libostree: add new API ostree_repo_write_commit_with_time
authorGiuseppe Scrivano <gscrivan@redhat.com>
Mon, 9 Nov 2015 10:16:55 +0000 (10:16 +0000)
committerGiuseppe Scrivano <gscrivan@redhat.com>
Mon, 16 Nov 2015 10:07:55 +0000 (11:07 +0100)
It extends ostree_repo_write_commit as it permits to override the
commit timestamp.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
doc/ostree-sections.txt
src/libostree/ostree-repo-commit.c
src/libostree/ostree-repo.h

index ff512e470441f16b697f5923cb267070708aaf64..aecaa5665545940550b913cd0741d60af0f240e2 100644 (file)
@@ -282,6 +282,7 @@ ostree_repo_write_directory_to_mtree
 ostree_repo_write_archive_to_mtree
 ostree_repo_write_mtree
 ostree_repo_write_commit
+ostree_repo_write_commit_with_time
 ostree_repo_read_commit_detached_metadata
 ostree_repo_write_commit_detached_metadata
 OstreeRepoCheckoutMode
index 7cc3e27b3d461e3034e2232d54ab2e07cfedfe5f..732bbd06f79d7399c2a2d825cadc9617a4c90540 100644 (file)
@@ -1967,13 +1967,57 @@ ostree_repo_write_commit (OstreeRepo      *self,
                           char           **out_commit,
                           GCancellable    *cancellable,
                           GError         **error)
+{
+  gboolean ret = FALSE;
+  GDateTime *now = NULL;
+
+  now = g_date_time_new_now_utc ();
+  ret = ostree_repo_write_commit_with_time (self,
+                                          parent,
+                                          subject,
+                                          body,
+                                          metadata,
+                                          root,
+                                          GUINT64_TO_BE (g_date_time_to_unix (now)),
+                                          out_commit,
+                                          cancellable,
+                                          error);
+  g_date_time_unref (now);
+  return ret;
+}
+
+/**
+ * ostree_repo_write_commit_with_time:
+ * @self: Repo
+ * @parent: (allow-none): ASCII SHA256 checksum for parent, or %NULL for none
+ * @subject: Subject
+ * @body: (allow-none): Body
+ * @metadata: (allow-none): GVariant of type a{sv}, or %NULL for none
+ * @root: The tree to point the commit to
+ * @out_commit: (out): Resulting ASCII SHA256 checksum for commit
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * Write a commit metadata object, referencing @root_contents_checksum
+ * and @root_metadata_checksum.
+ */
+gboolean
+ostree_repo_write_commit_with_time (OstreeRepo      *self,
+                                    const char      *parent,
+                                    const char      *subject,
+                                    const char      *body,
+                                    GVariant        *metadata,
+                                    OstreeRepoFile  *root,
+                                    guint64          time,
+                                    char           **out_commit,
+                                    GCancellable    *cancellable,
+                                    GError         **error)
 {
   gboolean ret = FALSE;
   g_autofree char *ret_commit = NULL;
   g_autoptr(GVariant) commit = NULL;
   g_autoptr(GVariant) new_metadata = NULL;
   g_autofree guchar *commit_csum = NULL;
-  GDateTime *now = NULL;
   OstreeRepoFile *repo_root = OSTREE_REPO_FILE (root);
 
   g_return_val_if_fail (subject != NULL, FALSE);
@@ -1983,13 +2027,12 @@ ostree_repo_write_commit (OstreeRepo      *self,
                                    cancellable, error))
     goto out;
 
-  now = g_date_time_new_now_utc ();
   commit = g_variant_new ("(@a{sv}@ay@a(say)sst@ay@ay)",
                           new_metadata ? new_metadata : create_empty_gvariant_dict (),
                           parent ? ostree_checksum_to_bytes_v (parent) : ot_gvariant_new_bytearray (NULL, 0),
                           g_variant_new_array (G_VARIANT_TYPE ("(say)"), NULL, 0),
                           subject, body ? body : "",
-                          GUINT64_TO_BE (g_date_time_to_unix (now)),
+                          GUINT64_TO_BE (time),
                           ostree_checksum_to_bytes_v (ostree_repo_file_tree_get_contents_checksum (repo_root)),
                           ostree_checksum_to_bytes_v (ostree_repo_file_tree_get_metadata_checksum (repo_root)));
   g_variant_ref_sink (commit);
@@ -2003,8 +2046,6 @@ ostree_repo_write_commit (OstreeRepo      *self,
   ret = TRUE;
   ot_transfer_out_value(out_commit, &ret_commit);
  out:
-  if (now)
-    g_date_time_unref (now);
   return ret;
 }
 
index e67c310d7455ef3fb8b2e9ca186062eabdd5e9d3..69720a2e295cd020f9eed1b7d195c304a4742418 100644 (file)
@@ -452,6 +452,17 @@ gboolean      ostree_repo_write_commit (OstreeRepo      *self,
                                         GCancellable    *cancellable,
                                         GError         **error);
 
+gboolean      ostree_repo_write_commit_with_time (OstreeRepo      *self,
+                                                  const char      *parent,
+                                                  const char      *subject,
+                                                  const char      *body,
+                                                  GVariant        *metadata,
+                                                  OstreeRepoFile  *root,
+                                                  guint64         time,
+                                                  char           **out_commit,
+                                                  GCancellable    *cancellable,
+                                                  GError         **error);
+
 gboolean      ostree_repo_read_commit_detached_metadata (OstreeRepo      *self,
                                                          const char      *checksum,
                                                          GVariant       **out_metadata,