core: Add --add-metadata-string option for commit
A convenience function for the common case of slapping a string into the metadata.
This commit is contained in:
parent
2e48474263
commit
1687f3efa8
|
|
@ -35,6 +35,7 @@ static char *subject;
|
|||
static char *body;
|
||||
static char *parent;
|
||||
static char *branch;
|
||||
static char **metadata_strings;
|
||||
static gboolean skip_if_unchanged;
|
||||
static gboolean tar_autocreate_parents;
|
||||
static char **trees;
|
||||
|
|
@ -46,6 +47,7 @@ static GOptionEntry options[] = {
|
|||
{ "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" },
|
||||
{ "add-metadata-string", 0, 0, G_OPTION_ARG_STRING_ARRAY, &metadata_strings, "Append given key and value (in string format) to metadata", "KEY=VALUE" },
|
||||
{ "branch", 'b', 0, G_OPTION_ARG_STRING, &branch, "Branch", "branch" },
|
||||
{ "parent", 'p', 0, G_OPTION_ARG_STRING, &parent, "Parent commit", "commit" },
|
||||
{ "tree", 0, 0, G_OPTION_ARG_STRING_ARRAY, &trees, "Overlay the given argument as a tree", "NAME" },
|
||||
|
|
@ -74,6 +76,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
|
|||
GCancellable *cancellable = NULL;
|
||||
OstreeMutableTree *mtree = NULL;
|
||||
char *tree_type = NULL;
|
||||
GVariantBuilder metadata_builder;
|
||||
gboolean metadata_builder_initialized = FALSE;
|
||||
gboolean skip_commit = FALSE;
|
||||
|
||||
context = g_option_context_new ("[ARG] - Commit a new revision");
|
||||
|
|
@ -105,6 +109,36 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
|
|||
else
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
else if (metadata_strings)
|
||||
{
|
||||
char **iter;
|
||||
|
||||
metadata_builder_initialized = TRUE;
|
||||
g_variant_builder_init (&metadata_builder, G_VARIANT_TYPE ("a{sv}"));
|
||||
|
||||
for (iter = metadata_strings; *iter; iter++)
|
||||
{
|
||||
const char *s;
|
||||
const char *eq;
|
||||
char *key;
|
||||
|
||||
s = *iter;
|
||||
|
||||
eq = strchr (s, '=');
|
||||
if (!eq)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Missing '=' in KEY=VALUE metadata '%s'", s);
|
||||
goto out;
|
||||
}
|
||||
|
||||
key = g_strndup (s, eq - s);
|
||||
g_variant_builder_add (&metadata_builder, "{sv}", key,
|
||||
g_variant_new_string (eq + 1));
|
||||
}
|
||||
metadata = g_variant_builder_end (&metadata_builder);
|
||||
metadata_builder_initialized = FALSE;
|
||||
}
|
||||
|
||||
repo = ostree_repo_new (repo_path);
|
||||
if (!ostree_repo_check (repo, error))
|
||||
|
|
@ -253,6 +287,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
|
|||
|
||||
ret = TRUE;
|
||||
out:
|
||||
if (metadata_builder_initialized)
|
||||
g_variant_builder_clear (&metadata_builder);
|
||||
g_clear_object (&arg);
|
||||
g_clear_object (&mtree);
|
||||
g_free (contents_checksum);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
set -e
|
||||
|
||||
echo "1..21"
|
||||
echo "1..22"
|
||||
|
||||
. libtest.sh
|
||||
|
||||
|
|
@ -164,3 +164,8 @@ new_rev=$($OSTREE rev-parse test2)
|
|||
assert_streq "${old_rev}" "${new_rev}"
|
||||
echo "ok commit --skip-if-unchanged"
|
||||
|
||||
$OSTREE commit -b test2 -s "Metadata string" --add-metadata-string=FOO=BAR --add-metadata-string=KITTENS=CUTE --tree=ref=test2
|
||||
$OSTREE show test2 > test2-commit-text
|
||||
assert_file_has_content test2-commit-text "FOO=.*BAR"
|
||||
assert_file_has_content test2-commit-text "KITTENS=.*CUTE"
|
||||
echo "ok metadata commit with strings"
|
||||
|
|
|
|||
Loading…
Reference in New Issue