summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2015-09-17 12:25:37 -0400
committerMatthew Barnes <mbarnes@redhat.com>2015-09-17 12:29:14 -0400
commit055b3aac32e7ba95d5bf46e45b69dbf5e9df4e85 (patch)
tree6221bea25889f26aa7fa0d7371b437383b3a8509
parent3267267115f4a53d8a104655250b9162066a95e1 (diff)
downloadostree-055b3aac32e7ba95d5bf46e45b69dbf5e9df4e85.tar.gz
reset: Simplify argument checking logic
-rw-r--r--src/ostree/ot-builtin-reset.c31
1 files changed, 9 insertions, 22 deletions
diff --git a/src/ostree/ot-builtin-reset.c b/src/ostree/ot-builtin-reset.c
index 61f233f7..9468ae78 100644
--- a/src/ostree/ot-builtin-reset.c
+++ b/src/ostree/ot-builtin-reset.c
@@ -31,24 +31,6 @@ static GOptionEntry options[] = {
{ NULL }
};
-static gchar *
-find_current_ref (OstreeRepo *repo,
- const gchar *ref,
- GCancellable *cancellable,
- GError **error)
-{
- g_autoptr(GHashTable) refs = NULL;
- gchar *ret;
-
- if (!ostree_repo_list_refs (repo, NULL, &refs, cancellable, error))
- return NULL;
- ret = g_strdup (g_hash_table_lookup (refs, ref));
- if (ret == NULL)
- g_set_error (error, G_IO_ERROR, G_IO_ERROR, "The ref was not found: %s", ref);
-
- return ret;
-}
-
gboolean
ostree_builtin_reset (int argc,
char **argv,
@@ -57,10 +39,10 @@ ostree_builtin_reset (int argc,
{
GOptionContext *context;
glnx_unref_object OstreeRepo *repo = NULL;
+ g_autoptr(GHashTable) known_refs = NULL;
gboolean ret = FALSE;
const char *ref;
const char *target = NULL;
- g_autofree char *current = NULL;
g_autofree char *checksum = NULL;
context = g_option_context_new ("REF COMMIT - Reset a REF to a previous COMMIT");
@@ -79,11 +61,16 @@ ostree_builtin_reset (int argc,
ref = argv[1];
target = argv[2];
- if (!ostree_repo_resolve_rev (repo, target, FALSE, &checksum, error))
+ if (!ostree_repo_list_refs (repo, NULL, &known_refs, cancellable, error))
goto out;
- current = find_current_ref (repo, ref, cancellable, error);
- if (current == NULL)
+ if (!g_hash_table_contains (known_refs, ref))
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR, "Invalid ref '%s'", ref);
+ goto out;
+ }
+
+ if (!ostree_repo_resolve_rev (repo, target, FALSE, &checksum, error))
goto out;
if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error))