[ostree] core: Error out on an empty compose
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] core: Error out on an empty compose
- Date: Wed, 11 Jan 2012 18:44:08 +0000 (UTC)
commit e693d2cfe5b1b15e19627947ab82cf79d46d9a75
Author: Colin Walters <walters verbum org>
Date: Wed Jan 11 13:42:37 2012 -0500
core: Error out on an empty compose
src/ostree/ot-builtin-compose.c | 78 ++++++++++++++++----------------------
1 files changed, 33 insertions(+), 45 deletions(-)
---
diff --git a/src/ostree/ot-builtin-compose.c b/src/ostree/ot-builtin-compose.c
index 9bbc915..a0c51fb 100644
--- a/src/ostree/ot-builtin-compose.c
+++ b/src/ostree/ot-builtin-compose.c
@@ -31,42 +31,58 @@ static char *subject;
static char *body;
static char *branch;
static char *from_file_path;
-static gboolean recompose;
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" },
{ "branch", 'b', 0, G_OPTION_ARG_STRING, &branch, "Branch", "branch" },
{ "from-file", 'F', 0, G_OPTION_ARG_STRING, &from_file_path, "Take list of branches to compose from FILE", "FILE" },
- { "recompose", 0, 0, G_OPTION_ARG_NONE, &recompose, "Regenerate compose from existing branches", NULL },
{ NULL }
};
static gboolean
add_branch (OstreeRepo *repo,
OstreeMutableTree *mtree,
- const char *branch,
+ const char *branch_path,
GVariantBuilder *metadata_builder,
GError **error)
{
gboolean ret = FALSE;
GFile *branchf = NULL;
+ GFile *subdir = NULL;
const char *branch_rev;
+ char **components = NULL;
+ const char *branch_name;
+ const char *path;
- if (!ostree_repo_read_commit (repo, branch, &branchf, NULL, error))
+ components = g_strsplit (branch_path, ":", 2);
+
+ if (g_strv_length (components) != 2)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Invalid compose specification '%s'; missing ':'",
+ branch_path);
+ goto out;
+ }
+ branch_name = components[0];
+ path = components[1];
+
+ if (!ostree_repo_read_commit (repo, branch_name, &branchf, NULL, error))
goto out;
branch_rev = ostree_repo_file_get_commit ((OstreeRepoFile*)branchf);
+ subdir = g_file_resolve_relative_path (branchf, path);
- if (!ostree_repo_stage_directory_to_mtree (repo, branchf, mtree, NULL,
+ if (!ostree_repo_stage_directory_to_mtree (repo, subdir, mtree, NULL,
NULL, error))
goto out;
if (metadata_builder)
- g_variant_builder_add (metadata_builder, "(ss)", branch, branch_rev);
+ g_variant_builder_add (metadata_builder, "(ss)", branch_path, branch_rev);
ret = TRUE;
out:
+ g_strfreev (components);
g_clear_object (&branchf);
return ret;
}
@@ -129,7 +145,7 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
compose_metadata_builder_initialized = TRUE;
g_variant_builder_init (&compose_metadata_builder, G_VARIANT_TYPE ("a(ss)"));
- if (!ostree_repo_resolve_rev (repo, branch, recompose ? FALSE : TRUE, &parent, error))
+ if (!ostree_repo_resolve_rev (repo, branch, TRUE, &parent, error))
goto out;
if (parent)
@@ -146,43 +162,6 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
mtree = ostree_mutable_tree_new ();
- if (recompose)
- {
- const char *branch_name;
- const char *branch_rev;
-
- g_assert (parent);
- g_assert (parent_commit);
-
- seen_branches = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-
- g_variant_get_child (parent_commit, 1, "@a{sv}", &parent_commit_metadata);
-
- parent_commit_compose = g_variant_lookup_value (parent_commit_metadata,
- "ostree-compose", G_VARIANT_TYPE ("a(ss)"));
-
- if (!parent_commit_compose)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Commit '%s' doesn't have ostree-compose metadata",
- parent);
- goto out;
- }
-
- parent_commit_compose_iter = g_variant_iter_new (parent_commit_compose);
-
- while (g_variant_iter_loop (parent_commit_compose_iter, "(&s&s)",
- &branch_name, &branch_rev))
- {
- if (!add_branch (repo, mtree, branch_name,
- &compose_metadata_builder,
- error))
- goto out;
-
- g_hash_table_insert (seen_branches, g_strdup (branch_name), (char*)branch_name);
- }
- }
-
if (from_file_path)
{
char **iter;
@@ -248,9 +227,18 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
if (!skip_commit)
{
+ const char *root_metadata = ostree_mutable_tree_get_metadata_checksum (mtree);
+
+ if (!root_metadata)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Can't commit an empty tree");
+ goto out;
+ }
+
if (!ostree_repo_stage_commit (repo, branch, parent, subject, body, commit_metadata,
contents_checksum,
- ostree_mutable_tree_get_metadata_checksum (mtree),
+ root_metadata,
&commit_checksum, cancellable, error))
goto out;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]