Drop support for related objects and metadata in commit objects
While the actual commit object format is presently the same, for a
number of reasons we'd like to change it fairly radically. Among
other things, we need to drop our a{sv} types in objects, to protect
against GVariant changing format.
Since now gnome-ostree now longer uses related objects, and nothing
ever used metadata, just drop them both.
This commit is contained in:
parent
1e7c0bb70b
commit
c9b61cbfee
|
|
@ -1401,8 +1401,6 @@ ostree_repo_stage_commit (OstreeRepo *self,
|
|||
const char *parent,
|
||||
const char *subject,
|
||||
const char *body,
|
||||
GVariant *metadata,
|
||||
GVariant *related_objects,
|
||||
const char *root_contents_checksum,
|
||||
const char *root_metadata_checksum,
|
||||
char **out_commit,
|
||||
|
|
@ -1422,9 +1420,9 @@ ostree_repo_stage_commit (OstreeRepo *self,
|
|||
|
||||
now = g_date_time_new_now_utc ();
|
||||
commit = g_variant_new ("(@a{sv}@ay@a(say)sst@ay@ay)",
|
||||
metadata ? metadata : create_empty_gvariant_dict (),
|
||||
create_empty_gvariant_dict (),
|
||||
parent ? ostree_checksum_to_bytes_v (parent) : ot_gvariant_new_bytearray (NULL, 0),
|
||||
related_objects ? related_objects : g_variant_new_array (G_VARIANT_TYPE ("(say)"), NULL, 0),
|
||||
g_variant_new_array (G_VARIANT_TYPE ("(say)"), NULL, 0),
|
||||
subject, body ? body : "",
|
||||
GUINT64_TO_BE (g_date_time_to_unix (now)),
|
||||
ostree_checksum_to_bytes_v (root_contents_checksum),
|
||||
|
|
|
|||
|
|
@ -253,8 +253,6 @@ gboolean ostree_repo_stage_commit (OstreeRepo *self,
|
|||
const char *parent,
|
||||
const char *subject,
|
||||
const char *body,
|
||||
GVariant *metadata,
|
||||
GVariant *related_objects,
|
||||
const char *content_checksum,
|
||||
const char *metadata_checksum,
|
||||
char **out_commit,
|
||||
|
|
|
|||
|
|
@ -25,14 +25,10 @@
|
|||
#include "ot-builtins.h"
|
||||
#include "ostree.h"
|
||||
|
||||
static char *opt_metadata_text_path;
|
||||
static char *opt_metadata_bin_path;
|
||||
static char *opt_subject;
|
||||
static char *opt_body;
|
||||
static char *opt_branch;
|
||||
static char **opt_metadata_strings;
|
||||
static char *opt_statoverride_file;
|
||||
static char *opt_related_objects_file;
|
||||
static gboolean opt_link_checkout_speedup;
|
||||
static gboolean opt_skip_if_unchanged;
|
||||
static gboolean opt_tar_autocreate_parents;
|
||||
|
|
@ -44,9 +40,6 @@ static gint opt_owner_gid = -1;
|
|||
static GOptionEntry options[] = {
|
||||
{ "subject", 's', 0, G_OPTION_ARG_STRING, &opt_subject, "One line subject", "subject" },
|
||||
{ "body", 'm', 0, G_OPTION_ARG_STRING, &opt_body, "Full description", "body" },
|
||||
{ "metadata-variant-text", 0, 0, G_OPTION_ARG_FILENAME, &opt_metadata_text_path, "File containing g_variant_print() output", "path" },
|
||||
{ "metadata-variant", 0, 0, G_OPTION_ARG_FILENAME, &opt_metadata_bin_path, "File containing serialized variant, in host endianness", "path" },
|
||||
{ "add-metadata-string", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_metadata_strings, "Append given key and value (in string format) to metadata", "KEY=VALUE" },
|
||||
{ "branch", 'b', 0, G_OPTION_ARG_STRING, &opt_branch, "Branch", "branch" },
|
||||
{ "tree", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_trees, "Overlay the given argument as a tree", "NAME" },
|
||||
{ "owner-uid", 0, 0, G_OPTION_ARG_INT, &opt_owner_uid, "Set file ownership user id", "UID" },
|
||||
|
|
@ -56,7 +49,6 @@ static GOptionEntry options[] = {
|
|||
{ "tar-autocreate-parents", 0, 0, G_OPTION_ARG_NONE, &opt_tar_autocreate_parents, "When loading tar archives, automatically create parent directories as needed", NULL },
|
||||
{ "skip-if-unchanged", 0, 0, G_OPTION_ARG_NONE, &opt_skip_if_unchanged, "If the contents are unchanged from previous commit, do nothing", NULL },
|
||||
{ "statoverride", 0, 0, G_OPTION_ARG_FILENAME, &opt_statoverride_file, "File containing list of modifications to make to permissions", "path" },
|
||||
{ "related-objects-file", 0, 0, G_OPTION_ARG_FILENAME, &opt_related_objects_file, "File containing newline-separated pairs of (checksum SPACE name) of related objects", "path" },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
|
@ -113,74 +105,6 @@ parse_statoverride_file (GHashTable **out_mode_add,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
parse_related_objects_file (GVariant **out_related_objects,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
gboolean ret = FALSE;
|
||||
gsize len;
|
||||
char **iter = NULL; /* nofree */
|
||||
gs_unref_hashtable GHashTable *ret_hash = NULL;
|
||||
gs_unref_variant GVariant *ret_related_objects = NULL;
|
||||
gs_unref_object GFile *path = NULL;
|
||||
gs_free char *contents = NULL;
|
||||
GVariantBuilder builder;
|
||||
gboolean builder_initialized = FALSE;
|
||||
char **lines = NULL;
|
||||
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(say)"));
|
||||
builder_initialized = TRUE;
|
||||
|
||||
path = g_file_new_for_path (opt_related_objects_file);
|
||||
|
||||
if (!g_file_load_contents (path, cancellable, &contents, &len, NULL,
|
||||
error))
|
||||
goto out;
|
||||
|
||||
lines = g_strsplit (contents, "\n", -1);
|
||||
|
||||
for (iter = lines; iter && *iter; iter++)
|
||||
{
|
||||
const char *line = *iter;
|
||||
const char *spc;
|
||||
gs_free char *name = NULL;
|
||||
|
||||
if (!*line)
|
||||
break;
|
||||
|
||||
spc = strchr (line, ' ');
|
||||
if (!spc)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Malformed related objects file");
|
||||
goto out;
|
||||
}
|
||||
|
||||
name = g_strndup (line, spc - line);
|
||||
|
||||
if (!ostree_validate_checksum_string (spc + 1, error))
|
||||
goto out;
|
||||
|
||||
{
|
||||
GVariant *csum_bytes_v = ostree_checksum_to_bytes_v (spc + 1);
|
||||
g_variant_builder_add (&builder, "(s@ay)", name, csum_bytes_v);
|
||||
}
|
||||
}
|
||||
|
||||
ret_related_objects = g_variant_builder_end (&builder);
|
||||
g_variant_ref_sink (ret_related_objects);
|
||||
builder_initialized = FALSE;
|
||||
|
||||
ret = TRUE;
|
||||
ot_transfer_out_value (out_related_objects, &ret_related_objects);
|
||||
out:
|
||||
if (builder_initialized)
|
||||
g_variant_builder_clear (&builder);
|
||||
g_strfreev (lines);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static OstreeRepoCommitFilterResult
|
||||
commit_filter (OstreeRepo *self,
|
||||
const char *path,
|
||||
|
|
@ -219,9 +143,6 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GCancellable *ca
|
|||
gs_free char *parent = NULL;
|
||||
gs_free char *commit_checksum = NULL;
|
||||
gs_unref_variant GVariant *parent_commit = NULL;
|
||||
gs_unref_variant GVariant *metadata = NULL;
|
||||
gs_unref_variant GVariant *related_objects = NULL;
|
||||
gs_unref_object GFile *metadata_f = NULL;
|
||||
gs_free char *contents_checksum = NULL;
|
||||
gs_unref_object OstreeMutableTree *mtree = NULL;
|
||||
gs_free char *tree_type = NULL;
|
||||
|
|
@ -231,9 +152,6 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GCancellable *ca
|
|||
gs_free char *parent_content_checksum = NULL;
|
||||
gs_free char *parent_metadata_checksum = NULL;
|
||||
OstreeRepoCommitModifier *modifier = NULL;
|
||||
GMappedFile *metadata_mappedf = NULL;
|
||||
GVariantBuilder metadata_builder;
|
||||
gboolean metadata_builder_initialized = FALSE;
|
||||
|
||||
context = g_option_context_new ("[ARG] - Commit a new revision");
|
||||
g_option_context_add_main_entries (context, options, NULL);
|
||||
|
|
@ -241,74 +159,12 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GCancellable *ca
|
|||
if (!g_option_context_parse (context, &argc, &argv, error))
|
||||
goto out;
|
||||
|
||||
if (opt_metadata_text_path || opt_metadata_bin_path)
|
||||
{
|
||||
metadata_mappedf = g_mapped_file_new (opt_metadata_text_path ? opt_metadata_text_path : opt_metadata_bin_path, FALSE, error);
|
||||
if (!metadata_mappedf)
|
||||
goto out;
|
||||
if (opt_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 (opt_metadata_bin_path)
|
||||
{
|
||||
metadata_f = g_file_new_for_path (opt_metadata_bin_path);
|
||||
if (!ot_util_variant_map (metadata_f, G_VARIANT_TYPE ("a{sv}"), TRUE,
|
||||
&metadata, error))
|
||||
goto out;
|
||||
}
|
||||
else
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
else if (opt_metadata_strings)
|
||||
{
|
||||
char **iter;
|
||||
|
||||
metadata_builder_initialized = TRUE;
|
||||
g_variant_builder_init (&metadata_builder, G_VARIANT_TYPE ("a{sv}"));
|
||||
|
||||
for (iter = opt_metadata_strings; *iter; iter++)
|
||||
{
|
||||
const char *s;
|
||||
const char *eq;
|
||||
gs_free char *key = NULL;
|
||||
|
||||
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;
|
||||
g_variant_ref_sink (metadata);
|
||||
}
|
||||
|
||||
if (opt_statoverride_file)
|
||||
{
|
||||
if (!parse_statoverride_file (&mode_adds, cancellable, error))
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (opt_related_objects_file)
|
||||
{
|
||||
if (!parse_related_objects_file (&related_objects, cancellable, error))
|
||||
goto out;
|
||||
}
|
||||
|
||||
repo = ostree_repo_new (repo_path);
|
||||
if (!ostree_repo_check (repo, error))
|
||||
goto out;
|
||||
|
|
@ -462,8 +318,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GCancellable *ca
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (!ostree_repo_stage_commit (repo, opt_branch, parent, opt_subject, opt_body, metadata,
|
||||
related_objects, contents_checksum, root_metadata,
|
||||
if (!ostree_repo_stage_commit (repo, opt_branch, parent, opt_subject, opt_body,
|
||||
contents_checksum, root_metadata,
|
||||
&commit_checksum, cancellable, error))
|
||||
goto out;
|
||||
|
||||
|
|
@ -493,10 +349,6 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GCancellable *ca
|
|||
{
|
||||
(void) ostree_repo_abort_transaction (repo, cancellable, NULL);
|
||||
}
|
||||
if (metadata_builder_initialized)
|
||||
g_variant_builder_clear (&metadata_builder);
|
||||
if (metadata_mappedf)
|
||||
g_mapped_file_unref (metadata_mappedf);
|
||||
if (context)
|
||||
g_option_context_free (context);
|
||||
if (modifier)
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
set -e
|
||||
|
||||
echo "1..35"
|
||||
echo "1..33"
|
||||
|
||||
. $(dirname $0)/libtest.sh
|
||||
|
||||
|
|
@ -120,21 +120,6 @@ cd ${test_tmpdir}
|
|||
assert_file_has_content diff-test2-2 'M */four$'
|
||||
echo "ok diff file changing type"
|
||||
|
||||
cd ${test_tmpdir}/checkout-test2-4
|
||||
echo afile > oh-look-a-file
|
||||
cat > ${test_tmpdir}/ostree-commit-metadata <<EOF
|
||||
{'origin': <'http://example.com'>, 'buildid': <@u 42>}
|
||||
EOF
|
||||
$OSTREE commit -b test2 -s "Metadata test" --metadata-variant-text=${test_tmpdir}/ostree-commit-metadata
|
||||
echo "ok metadata commit"
|
||||
|
||||
cd ${test_tmpdir}
|
||||
rm ostree-commit-metadata
|
||||
$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"
|
||||
|
||||
cd ${test_tmpdir}
|
||||
mkdir repo2
|
||||
${CMD_PREFIX} ostree --repo=repo2 init
|
||||
|
|
@ -162,12 +147,6 @@ 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"
|
||||
|
||||
cd ${test_tmpdir}/checkout-test2-4
|
||||
$OSTREE commit -b test2 -s "no xattrs" --no-xattrs
|
||||
echo "ok commit with no xattrs"
|
||||
|
|
|
|||
Loading…
Reference in New Issue