[ostree] commit: add --timestamp=TIMESTAMP



commit 68f70d8e747d64a2b5ef525c9fec95c258eeabaa
Author: Giuseppe Scrivano <gscrivan redhat com>
Date:   Mon Nov 9 10:35:46 2015 +0000

    commit: add --timestamp=TIMESTAMP
    
    It allows to override the timestamp of the commit.
    
    Signed-off-by: Giuseppe Scrivano <gscrivan redhat com>

 doc/ostree-commit.xml          |    8 ++++++++
 src/ostree/ot-builtin-commit.c |   29 ++++++++++++++++++++++++++---
 2 files changed, 34 insertions(+), 3 deletions(-)
---
diff --git a/doc/ostree-commit.xml b/doc/ostree-commit.xml
index 440e77c..4a86c1d 100644
--- a/doc/ostree-commit.xml
+++ b/doc/ostree-commit.xml
@@ -198,6 +198,14 @@ Boston, MA 02111-1307, USA.
                     GPG home directory to use when looking for keyrings (if have GPGME - GNU Privacy Guard 
Made Easy).
                 </para></listitem>
             </varlistentry>
+
+            <varlistentry>
+                <term><option>--timestamp</option>="TIMESTAMP"</term>
+
+                <listitem><para>
+                    Override the timestamp of the commit to TIMESTAMP.
+                </para></listitem>
+            </varlistentry>
         </variablelist>
     </refsect1>
 
diff --git a/src/ostree/ot-builtin-commit.c b/src/ostree/ot-builtin-commit.c
index f53858e..6afed20 100644
--- a/src/ostree/ot-builtin-commit.c
+++ b/src/ostree/ot-builtin-commit.c
@@ -28,6 +28,7 @@
 #include "ostree.h"
 #include "otutil.h"
 #include "ot-tool-util.h"
+#include "parse-datetime.h"
 
 static char *opt_subject;
 static char *opt_body;
@@ -47,6 +48,7 @@ static char **opt_key_ids;
 static char *opt_gpg_homedir;
 static gboolean opt_generate_sizes;
 static gboolean opt_disable_fsync;
+static char *opt_timestamp;
 
 static gboolean
 parse_fsync_cb (const char  *option_name,
@@ -84,6 +86,7 @@ static GOptionEntry options[] = {
   { "generate-sizes", 0, 0, G_OPTION_ARG_NONE, &opt_generate_sizes, "Generate size information along with 
commit metadata", NULL },
   { "disable-fsync", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke 
fsync()", NULL },
   { "fsync", 0, 0, G_OPTION_ARG_CALLBACK, parse_fsync_cb, "Specify how to invoke fsync()", "POLICY" },
+  { "timestamp", 0, 0, G_OPTION_ARG_STRING, &opt_timestamp, "Override the timestamp of the commit", 
"TIMESTAMP" },
   { NULL }
 };
 
@@ -488,9 +491,29 @@ ostree_builtin_commit (int argc, char **argv, GCancellable *cancellable, GError
   if (!skip_commit)
     {
       gboolean update_summary;
-      if (!ostree_repo_write_commit (repo, parent, opt_subject, opt_body, metadata,
-                                     OSTREE_REPO_FILE (root),
-                                     &commit_checksum, cancellable, error))
+      guint64 timestamp;
+      if (!opt_timestamp)
+        {
+          GDateTime *now = g_date_time_new_now_utc ();
+          timestamp = g_date_time_to_unix (now);
+          g_date_time_unref (now);
+        }
+      else
+        {
+          struct timespec ts;
+          if (!parse_datetime (&ts, opt_timestamp, NULL))
+            {
+              g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                           "Could not parse '%s'", opt_timestamp);
+              goto out;
+            }
+          timestamp = ts.tv_sec;
+        }
+
+      if (!ostree_repo_write_commit_with_time (repo, parent, opt_subject, opt_body, metadata,
+                                               OSTREE_REPO_FILE (root),
+                                               timestamp,
+                                               &commit_checksum, cancellable, error))
         goto out;
 
       if (detached_metadata)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]