[ostree] core: Support actually adding metadata to commits



commit d2cb5fb49a0d266549bbe3ca3ad615054991be5c
Author: Colin Walters <walters verbum org>
Date:   Fri Nov 4 12:32:08 2011 -0400

    core: Support actually adding metadata to commits

 libostree/ostree-repo.c    |    2 +-
 ostree/ot-builtin-commit.c |   37 ++++++++++++++++++++++++++++++++++++-
 tests/t0000-basic.sh       |   15 ++++++++++++++-
 3 files changed, 51 insertions(+), 3 deletions(-)
---
diff --git a/libostree/ostree-repo.c b/libostree/ostree-repo.c
index cd7b504..5251a6d 100644
--- a/libostree/ostree-repo.c
+++ b/libostree/ostree-repo.c
@@ -1611,7 +1611,7 @@ commit_parsed_tree (OstreeRepo *self,
   now = g_date_time_new_now_utc ();
   commit = g_variant_new ("(u a{sv}ssstss)",
                           GUINT32_TO_BE (OSTREE_COMMIT_VERSION),
-                          create_empty_gvariant_dict (),
+                          metadata ? metadata : create_empty_gvariant_dict (),
                           parent ? parent : "",
                           subject, body ? body : "",
                           GUINT64_TO_BE (g_date_time_to_unix (now)),
diff --git a/ostree/ot-builtin-commit.c b/ostree/ot-builtin-commit.c
index e4d6c8e..a54c4e8 100644
--- a/ostree/ot-builtin-commit.c
+++ b/ostree/ot-builtin-commit.c
@@ -32,6 +32,8 @@ static gboolean separator_null;
 static int from_fd = -1;
 static gboolean from_stdin;
 static char *from_file;
+static char *metadata_text_path;
+static char *metadata_bin_path;
 static char *subject;
 static char *body;
 static char *parent;
@@ -42,6 +44,8 @@ static char **removals;
 static GOptionEntry options[] = {
   { "subject", 's', 0, G_OPTION_ARG_STRING, &subject, "One line subject", "subject" },
   { "body", 'm', 0, G_OPTION_ARG_STRING, &body, "Full description", "body" },
+  { "metadata-variant-text", 0, 0, G_OPTION_ARG_FILENAME, &metadata_text_path, "File containing g_variant_print() output", "path" },
+  { "metadata-variant", 0, 0, G_OPTION_ARG_FILENAME, &metadata_bin_path, "File containing serialized variant, in host endianness", "path" },
   { "branch", 'b', 0, G_OPTION_ARG_STRING, &branch, "Branch", "branch" },
   { "parent", 'p', 0, G_OPTION_ARG_STRING, &parent, "Parent commit", "commit" },
   { "from-fd", 0, 0, G_OPTION_ARG_INT, &from_fd, "Read new tree files from fd", "file descriptor" },
@@ -199,6 +203,8 @@ ostree_builtin_commit (int argc, char **argv, const char *repo_path, GError **er
   GChecksum *commit_checksum = NULL;
   char **iter;
   char separator;
+  GVariant *metadata = NULL;
+  GMappedFile *metadata_mappedf = NULL;
 
   context = g_option_context_new ("[DIR] - Commit a new revision");
   g_option_context_add_main_entries (context, options, NULL);
@@ -223,6 +229,33 @@ ostree_builtin_commit (int argc, char **argv, const char *repo_path, GError **er
       goto out;
     }
 
+  if (metadata_text_path || metadata_bin_path)
+    {
+      metadata_mappedf = g_mapped_file_new (metadata_text_path ? metadata_text_path : metadata_bin_path, FALSE, error);
+      if (!metadata_mappedf)
+        goto out;
+      if (metadata_text_path)
+        {
+          metadata = g_variant_parse (G_VARIANT_TYPE ("a{sv}"),
+                                      g_mapped_file_get_contents (metadata_mappedf),
+                                      g_mapped_file_get_contents (metadata_mappedf) + g_mapped_file_get_length (metadata_mappedf),
+                                      NULL, error);
+          if (!metadata)
+            goto out;
+        }
+      else if (metadata_bin_path)
+        {
+          metadata = g_variant_new_from_data (G_VARIANT_TYPE ("a{sv}"),
+                                              g_mapped_file_get_contents (metadata_mappedf),
+                                              g_mapped_file_get_length (metadata_mappedf),
+                                              FALSE,
+                                              (GDestroyNotify) g_mapped_file_unref,
+                                              metadata_mappedf);
+        }
+      else
+        g_assert_not_reached ();
+    }
+
   repo = ostree_repo_new (repo_path);
   if (!ostree_repo_check (repo, error))
     goto out;
@@ -264,7 +297,7 @@ ostree_builtin_commit (int argc, char **argv, const char *repo_path, GError **er
         for (iter = removals; *iter; iter++)
           g_ptr_array_add (removals_array, *iter);
       
-      if (!ostree_repo_commit (repo, branch, parent, subject, body, NULL,
+      if (!ostree_repo_commit (repo, branch, parent, subject, body, metadata,
                                dir, additions_array,
                                removals_array,
                                &commit_checksum,
@@ -332,6 +365,8 @@ ostree_builtin_commit (int argc, char **argv, const char *repo_path, GError **er
   g_print ("%s\n", g_checksum_get_string (commit_checksum));
  out:
   g_free (dir);
+  if (metadata_mappedf)
+    g_mapped_file_unref (metadata_mappedf);
   if (context)
     g_option_context_free (context);
   g_clear_object (&repo);
diff --git a/tests/t0000-basic.sh b/tests/t0000-basic.sh
index f5186a7..bd5b089 100755
--- a/tests/t0000-basic.sh
+++ b/tests/t0000-basic.sh
@@ -20,7 +20,7 @@
 
 set -e
 
-echo "1..10"
+echo "1..12"
 
 . libtest.sh
 
@@ -93,3 +93,16 @@ assert_file_has_content yet/another/tree/green 'leaf'
 assert_file_has_content four '4'
 echo "ok cwd contents"
 
+cd ${test_tmpdir}/checkout-test2-4
+echo afile > oh-look-a-file
+cat > ostree-commit-metadata <<EOF
+{'origin': <'http://example.com'>, 'buildid': <@u 42>}
+EOF
+$OSTREE commit -b test2 -s "Metadata test" --metadata-variant-text=./ostree-commit-metadata --add=oh-look-a-file
+rm ostree-commit-metadata
+echo "ok metadata commit"
+
+$OSTREE show test2 > ${test_tmpdir}/show
+assert_file_has_content ${test_tmpdir}/show 'example.com'
+assert_file_has_content ${test_tmpdir}/show 'buildid'
+echo "ok metadata content"



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