From d25f1bf73d3b992a3209bd908faff489d8309443 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 22 Dec 2011 11:04:08 -0500 Subject: [PATCH] core: Use GFile for repo constructor API, and a bit more internally Also, ensure that the repo directory GFile is absolute - this avoids a getcwd() syscall every time we construct a GFile object. --- src/daemon/ot-daemon.c | 8 ++-- src/libostree/ostree-repo.c | 64 +++++++++++++--------------- src/libostree/ostree-repo.h | 4 +- src/ostree/ostree-pull.c | 2 +- src/ostree/ot-builtin-checkout.c | 2 +- src/ostree/ot-builtin-checksum.c | 2 +- src/ostree/ot-builtin-commit.c | 2 +- src/ostree/ot-builtin-compose.c | 2 +- src/ostree/ot-builtin-diff.c | 2 +- src/ostree/ot-builtin-fsck.c | 2 +- src/ostree/ot-builtin-init.c | 16 +++---- src/ostree/ot-builtin-local-clone.c | 11 +++-- src/ostree/ot-builtin-log.c | 2 +- src/ostree/ot-builtin-ls.c | 2 +- src/ostree/ot-builtin-remote.c | 2 +- src/ostree/ot-builtin-rev-parse.c | 2 +- src/ostree/ot-builtin-run-triggers.c | 2 +- src/ostree/ot-builtin-show.c | 2 +- src/ostree/ot-builtins.h | 30 ++++++------- src/ostree/ot-main.c | 8 +++- src/ostree/ot-main.h | 2 +- 21 files changed, 84 insertions(+), 85 deletions(-) diff --git a/src/daemon/ot-daemon.c b/src/daemon/ot-daemon.c index f0ac5535..b688fedd 100644 --- a/src/daemon/ot-daemon.c +++ b/src/daemon/ot-daemon.c @@ -253,11 +253,11 @@ on_name_acquired (GDBusConnection *connection, { OstreeDaemon *self = user_data; GError *error = NULL; - char *repo_path; + GFile *repo_file = NULL; - repo_path = g_build_filename (ot_gfile_get_path_cached (self->prefix), "repo", NULL); - self->repo = ostree_repo_new (repo_path); - g_free (repo_path); + repo_file = g_file_get_child (self->prefix, "repo"); + self->repo = ostree_repo_new (repo_file); + g_clear_object (&repo_file); if (!ostree_repo_check (self->repo, &error)) { g_printerr ("%s\n", error->message); diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 569dff5f..c26fa50a 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -51,13 +51,12 @@ G_DEFINE_TYPE (OstreeRepo, ostree_repo, G_TYPE_OBJECT) typedef struct _OstreeRepoPrivate OstreeRepoPrivate; struct _OstreeRepoPrivate { - char *path; - GFile *repo_file; + GFile *repodir; GFile *tmp_dir; GFile *local_heads_dir; GFile *remote_heads_dir; - char *objects_path; - char *config_path; + GFile *objects_dir; + GFile *config_file; gboolean inited; gboolean in_transaction; @@ -74,13 +73,12 @@ ostree_repo_finalize (GObject *object) OstreeRepo *self = OSTREE_REPO (object); OstreeRepoPrivate *priv = GET_PRIVATE (self); - g_free (priv->path); - g_clear_object (&priv->repo_file); + g_clear_object (&priv->repodir); g_clear_object (&priv->tmp_dir); g_clear_object (&priv->local_heads_dir); g_clear_object (&priv->remote_heads_dir); - g_free (priv->objects_path); - g_free (priv->config_path); + g_clear_object (&priv->objects_dir); + g_clear_object (&priv->config_file); g_hash_table_destroy (priv->pending_transaction_tmpfiles); if (priv->config) g_key_file_free (priv->config); @@ -100,7 +98,8 @@ ostree_repo_set_property(GObject *object, switch (prop_id) { case PROP_PATH: - priv->path = g_value_dup_string (value); + /* Canonicalize */ + priv->repodir = ot_gfile_new_for_path (g_file_get_path (g_value_get_object (value))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -120,7 +119,7 @@ ostree_repo_get_property(GObject *object, switch (prop_id) { case PROP_PATH: - g_value_set_string (value, priv->path); + g_value_set_object (value, priv->repodir); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -142,15 +141,14 @@ ostree_repo_constructor (GType gtype, priv = GET_PRIVATE (object); - g_assert (priv->path != NULL); + g_assert (priv->repodir != NULL); - priv->repo_file = ot_gfile_new_for_path (priv->path); - priv->tmp_dir = g_file_resolve_relative_path (priv->repo_file, "tmp"); - priv->local_heads_dir = g_file_resolve_relative_path (priv->repo_file, "refs/heads"); - priv->remote_heads_dir = g_file_resolve_relative_path (priv->repo_file, "refs/remotes"); + priv->tmp_dir = g_file_resolve_relative_path (priv->repodir, "tmp"); + priv->local_heads_dir = g_file_resolve_relative_path (priv->repodir, "refs/heads"); + priv->remote_heads_dir = g_file_resolve_relative_path (priv->repodir, "refs/remotes"); - priv->objects_path = g_build_filename (priv->path, "objects", NULL); - priv->config_path = g_build_filename (priv->path, "config", NULL); + priv->objects_dir = g_file_get_child (priv->repodir, "objects"); + priv->config_file = g_file_get_child (priv->repodir, "config"); return object; } @@ -169,10 +167,10 @@ ostree_repo_class_init (OstreeRepoClass *klass) g_object_class_install_property (object_class, PROP_PATH, - g_param_spec_string ("path", + g_param_spec_object ("path", "", "", - NULL, + G_TYPE_FILE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); } @@ -187,7 +185,7 @@ ostree_repo_init (OstreeRepo *self) } OstreeRepo* -ostree_repo_new (const char *path) +ostree_repo_new (GFile *path) { return g_object_new (OSTREE_TYPE_REPO, "path", path, NULL); } @@ -474,7 +472,8 @@ ostree_repo_write_config (OstreeRepo *self, g_return_val_if_fail (priv->inited, FALSE); data = g_key_file_to_data (new_config, &len, error); - if (!g_file_set_contents (priv->config_path, data, len, error)) + if (!g_file_replace_contents (priv->config_file, data, len, NULL, FALSE, 0, NULL, + NULL, error)) goto out; g_key_file_free (priv->config); @@ -569,15 +568,16 @@ ostree_repo_check (OstreeRepo *self, GError **error) if (priv->inited) return TRUE; - if (!g_file_test (priv->objects_path, G_FILE_TEST_IS_DIR)) + if (!g_file_test (ot_gfile_get_path_cached (priv->objects_dir), G_FILE_TEST_IS_DIR)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Couldn't find objects directory '%s'", priv->objects_path); + "Couldn't find objects directory '%s'", + ot_gfile_get_path_cached (priv->objects_dir)); goto out; } priv->config = g_key_file_new (); - if (!g_key_file_load_from_file (priv->config, priv->config_path, 0, error)) + if (!g_key_file_load_from_file (priv->config, ot_gfile_get_path_cached (priv->config_file), 0, error)) { g_prefix_error (error, "Couldn't parse config file: "); goto out; @@ -627,11 +627,11 @@ ostree_repo_check (OstreeRepo *self, GError **error) return ret; } -const char * +GFile * ostree_repo_get_path (OstreeRepo *self) { OstreeRepoPrivate *priv = GET_PRIVATE (self); - return priv->path; + return priv->repodir; } GFile * @@ -1132,15 +1132,12 @@ ostree_repo_get_object_path (OstreeRepo *self, OstreeObjectType type) { OstreeRepoPrivate *priv = GET_PRIVATE (self); - char *path; char *relpath; GFile *ret; relpath = ostree_get_relative_object_path (checksum, type); - path = g_build_filename (priv->path, relpath, NULL); + ret = g_file_resolve_relative_path (priv->repodir, relpath); g_free (relpath); - ret = ot_gfile_new_for_path (path); - g_free (path); return ret; } @@ -1974,7 +1971,6 @@ ostree_repo_iter_objects (OstreeRepo *self, GError **error) { OstreeRepoPrivate *priv = GET_PRIVATE (self); - GFile *objectdir = NULL; GFileEnumerator *enumerator = NULL; gboolean ret = FALSE; GFileInfo *file_info = NULL; @@ -1983,8 +1979,7 @@ ostree_repo_iter_objects (OstreeRepo *self, g_return_val_if_fail (error == NULL || *error == NULL, FALSE); g_return_val_if_fail (priv->inited, FALSE); - objectdir = ot_gfile_new_for_path (priv->objects_path); - enumerator = g_file_enumerate_children (objectdir, OSTREE_GIO_FAST_QUERYINFO, + enumerator = g_file_enumerate_children (priv->objects_dir, OSTREE_GIO_FAST_QUERYINFO, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, error); @@ -2001,7 +1996,7 @@ ostree_repo_iter_objects (OstreeRepo *self, if (strlen (name) == 2 && type == G_FILE_TYPE_DIRECTORY) { - GFile *objdir = g_file_get_child (objectdir, name); + GFile *objdir = g_file_get_child (priv->objects_dir, name); if (!iter_object_dir (self, objdir, callback, user_data, error)) { g_object_unref (objdir); @@ -2023,7 +2018,6 @@ ostree_repo_iter_objects (OstreeRepo *self, out: g_clear_object (&file_info); g_clear_object (&enumerator); - g_clear_object (&objectdir); return ret; } diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h index 89b00d64..272d1594 100644 --- a/src/libostree/ostree-repo.h +++ b/src/libostree/ostree-repo.h @@ -50,11 +50,11 @@ typedef struct { GType ostree_repo_get_type (void); -OstreeRepo* ostree_repo_new (const char *path); +OstreeRepo* ostree_repo_new (GFile *path); gboolean ostree_repo_check (OstreeRepo *self, GError **error); -const char * ostree_repo_get_path (OstreeRepo *self); +GFile * ostree_repo_get_path (OstreeRepo *self); typedef enum { OSTREE_REPO_MODE_BARE, diff --git a/src/ostree/ostree-pull.c b/src/ostree/ostree-pull.c index 232e77c7..6431cb62 100644 --- a/src/ostree/ostree-pull.c +++ b/src/ostree/ostree-pull.c @@ -351,7 +351,7 @@ store_commit_recurse (OstreeRepo *repo, } static gboolean -ostree_builtin_pull (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_pull (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-checkout.c b/src/ostree/ot-builtin-checkout.c index 3aecfc0d..3fd40456 100644 --- a/src/ostree/ot-builtin-checkout.c +++ b/src/ostree/ot-builtin-checkout.c @@ -35,7 +35,7 @@ static GOptionEntry options[] = { }; gboolean -ostree_builtin_checkout (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_checkout (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-checksum.c b/src/ostree/ot-builtin-checksum.c index 911482e6..2e5f665d 100644 --- a/src/ostree/ot-builtin-checksum.c +++ b/src/ostree/ot-builtin-checksum.c @@ -55,7 +55,7 @@ on_checksum_received (GObject *obj, } gboolean -ostree_builtin_checksum (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_checksum (int argc, char **argv, GFile *repo_path_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-commit.c b/src/ostree/ot-builtin-commit.c index d84a77ac..d97c27da 100644 --- a/src/ostree/ot-builtin-commit.c +++ b/src/ostree/ot-builtin-commit.c @@ -53,7 +53,7 @@ static GOptionEntry options[] = { }; gboolean -ostree_builtin_commit (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-compose.c b/src/ostree/ot-builtin-compose.c index 9ac12182..bf3fc280 100644 --- a/src/ostree/ot-builtin-compose.c +++ b/src/ostree/ot-builtin-compose.c @@ -70,7 +70,7 @@ add_branch (OstreeRepo *repo, } gboolean -ostree_builtin_compose (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-diff.c b/src/ostree/ot-builtin-diff.c index f48f04f7..c669aeac 100644 --- a/src/ostree/ot-builtin-diff.c +++ b/src/ostree/ot-builtin-diff.c @@ -62,7 +62,7 @@ parse_file_or_commit (OstreeRepo *repo, } gboolean -ostree_builtin_diff (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_diff (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-fsck.c b/src/ostree/ot-builtin-fsck.c index 4ca0aa7d..fcd7070f 100644 --- a/src/ostree/ot-builtin-fsck.c +++ b/src/ostree/ot-builtin-fsck.c @@ -176,7 +176,7 @@ object_iter_callback (OstreeRepo *repo, } gboolean -ostree_builtin_fsck (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_fsck (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; OtFsckData data; diff --git a/src/ostree/ot-builtin-init.c b/src/ostree/ot-builtin-init.c index 96bf67f2..935bae70 100644 --- a/src/ostree/ot-builtin-init.c +++ b/src/ostree/ot-builtin-init.c @@ -39,11 +39,10 @@ static GOptionEntry options[] = { gboolean -ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_init (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context = NULL; gboolean ret = FALSE; - GFile *repodir = NULL; GFile *child = NULL; GFile *grandchild = NULL; GString *config_data = NULL; @@ -54,9 +53,7 @@ ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **erro if (!g_option_context_parse (context, &argc, &argv, error)) goto out; - repodir = ot_gfile_new_for_path (repo_path); - - child = g_file_get_child (repodir, "config"); + child = g_file_get_child (repo_path, "config"); config_data = g_string_new (DEFAULT_CONFIG_CONTENTS); g_string_append_printf (config_data, "mode=%s\n", archive ? "archive" : "bare"); @@ -68,17 +65,17 @@ ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **erro goto out; g_clear_object (&child); - child = g_file_get_child (repodir, "objects"); + child = g_file_get_child (repo_path, "objects"); if (!g_file_make_directory (child, NULL, error)) goto out; g_clear_object (&child); - child = g_file_get_child (repodir, "tmp"); + child = g_file_get_child (repo_path, "tmp"); if (!g_file_make_directory (child, NULL, error)) goto out; g_clear_object (&child); - child = g_file_get_child (repodir, "refs"); + child = g_file_get_child (repo_path, "refs"); if (!g_file_make_directory (child, NULL, error)) goto out; @@ -94,7 +91,7 @@ ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **erro g_clear_object (&child); - child = g_file_get_child (repodir, "tags"); + child = g_file_get_child (repo_path, "tags"); if (!g_file_make_directory (child, NULL, error)) goto out; g_clear_object (&child); @@ -105,7 +102,6 @@ ostree_builtin_init (int argc, char **argv, const char *repo_path, GError **erro g_option_context_free (context); if (config_data) g_string_free (config_data, TRUE); - g_clear_object (&repodir); g_clear_object (&child); g_clear_object (&grandchild); return ret; diff --git a/src/ostree/ot-builtin-local-clone.c b/src/ostree/ot-builtin-local-clone.c index 28e3ad8d..f1a6e1bc 100644 --- a/src/ostree/ot-builtin-local-clone.c +++ b/src/ostree/ot-builtin-local-clone.c @@ -160,11 +160,12 @@ object_iter_callback (OstreeRepo *repo, } gboolean -ostree_builtin_local_clone (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_local_clone (int argc, char **argv, GFile *repo_path, GError **error) { gboolean ret = FALSE; GOptionContext *context; const char *destination; + GFile *dest_f = NULL; OtLocalCloneData data; GFile *src_repo_dir = NULL; GFile *dest_repo_dir = NULL; @@ -196,13 +197,14 @@ ostree_builtin_local_clone (int argc, char **argv, const char *repo_path, GError } destination = argv[1]; + dest_f = ot_gfile_new_for_path (destination); - data.dest_repo = ostree_repo_new (destination); + data.dest_repo = ostree_repo_new (dest_f); if (!ostree_repo_check (data.dest_repo, error)) goto out; - src_repo_dir = ot_gfile_new_for_path (ostree_repo_get_path (data.src_repo)); - dest_repo_dir = ot_gfile_new_for_path (ostree_repo_get_path (data.dest_repo)); + src_repo_dir = g_object_ref (ostree_repo_get_path (data.src_repo)); + dest_repo_dir = g_object_ref (ostree_repo_get_path (data.dest_repo)); src_info = g_file_query_info (src_repo_dir, OSTREE_GIO_FAST_QUERYINFO, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, @@ -242,6 +244,7 @@ ostree_builtin_local_clone (int argc, char **argv, const char *repo_path, GError out: if (context) g_option_context_free (context); + g_clear_object (&dest_f); g_clear_object (&src_repo_dir); g_clear_object (&dest_repo_dir); g_clear_object (&src_info); diff --git a/src/ostree/ot-builtin-log.c b/src/ostree/ot-builtin-log.c index 9f55fb32..ebdbcd35 100644 --- a/src/ostree/ot-builtin-log.c +++ b/src/ostree/ot-builtin-log.c @@ -32,7 +32,7 @@ static GOptionEntry options[] = { }; gboolean -ostree_builtin_log (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_log (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-ls.c b/src/ostree/ot-builtin-ls.c index f50ec07c..30480b05 100644 --- a/src/ostree/ot-builtin-ls.c +++ b/src/ostree/ot-builtin-ls.c @@ -165,7 +165,7 @@ print_directory_recurse (GFile *f, } gboolean -ostree_builtin_ls (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_ls (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-remote.c b/src/ostree/ot-builtin-remote.c index f9d4a2ce..41510bc5 100644 --- a/src/ostree/ot-builtin-remote.c +++ b/src/ostree/ot-builtin-remote.c @@ -42,7 +42,7 @@ usage_error (GOptionContext *context, const char *message, GError **error) } gboolean -ostree_builtin_remote (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_remote (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-rev-parse.c b/src/ostree/ot-builtin-rev-parse.c index 02dc0d75..b60a6082 100644 --- a/src/ostree/ot-builtin-rev-parse.c +++ b/src/ostree/ot-builtin-rev-parse.c @@ -32,7 +32,7 @@ static GOptionEntry options[] = { }; gboolean -ostree_builtin_rev_parse (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_rev_parse (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-run-triggers.c b/src/ostree/ot-builtin-run-triggers.c index dd33211f..d5be7a32 100644 --- a/src/ostree/ot-builtin-run-triggers.c +++ b/src/ostree/ot-builtin-run-triggers.c @@ -35,7 +35,7 @@ static GOptionEntry options[] = { }; gboolean -ostree_builtin_run_triggers (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_run_triggers (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtin-show.c b/src/ostree/ot-builtin-show.c index c25dc8c3..1fe7b406 100644 --- a/src/ostree/ot-builtin-show.c +++ b/src/ostree/ot-builtin-show.c @@ -192,7 +192,7 @@ do_print_compose (OstreeRepo *repo, } gboolean -ostree_builtin_show (int argc, char **argv, const char *repo_path, GError **error) +ostree_builtin_show (int argc, char **argv, GFile *repo_path, GError **error) { GOptionContext *context; gboolean ret = FALSE; diff --git a/src/ostree/ot-builtins.h b/src/ostree/ot-builtins.h index cfacaad1..acf2406c 100644 --- a/src/ostree/ot-builtins.h +++ b/src/ostree/ot-builtins.h @@ -23,24 +23,24 @@ #ifndef __OSTREE_BUILTINS__ #define __OSTREE_BUILTINS__ -#include +#include G_BEGIN_DECLS -gboolean ostree_builtin_checkout (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_checksum (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_commit (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_compose (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_diff (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_init (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_local_clone (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_log (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_ls (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_run_triggers (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_fsck (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_show (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_rev_parse (int argc, char **argv, const char *repo, GError **error); -gboolean ostree_builtin_remote (int argc, char **argv, const char *repo, GError **error); +gboolean ostree_builtin_checkout (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_checksum (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_diff (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_init (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_local_clone (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_log (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_ls (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_run_triggers (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_fsck (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_show (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_rev_parse (int argc, char **argv, GFile *repo_path, GError **error); +gboolean ostree_builtin_remote (int argc, char **argv, GFile *repo_path, GError **error); G_END_DECLS diff --git a/src/ostree/ot-main.c b/src/ostree/ot-main.c index e951252b..1492e8e2 100644 --- a/src/ostree/ot-main.c +++ b/src/ostree/ot-main.c @@ -27,6 +27,7 @@ #include #include "ot-main.h" +#include "otutil.h" static int usage (char **argv, OstreeBuiltin *builtins, gboolean is_error) @@ -91,6 +92,7 @@ ostree_main (int argc, gboolean have_repo_arg; const char *cmd = NULL; const char *repo = NULL; + GFile *repo_file = NULL; int arg_off; g_type_init (); @@ -110,6 +112,9 @@ ostree_main (int argc, else repo = NULL; + if (repo) + repo_file = ot_gfile_new_for_path (repo); + cmd = strchr (argv[0], '-'); if (cmd) { @@ -151,11 +156,12 @@ ostree_main (int argc, prep_builtin_argv (cmd, argc-arg_off, argv+arg_off, &cmd_argc, &cmd_argv); - if (!builtin->fn (cmd_argc, cmd_argv, repo, &error)) + if (!builtin->fn (cmd_argc, cmd_argv, repo_file, &error)) goto out; out: g_free (cmd_argv); + g_clear_object (&repo_file); if (error) { g_printerr ("%s\n", error->message); diff --git a/src/ostree/ot-main.h b/src/ostree/ot-main.h index 2fb54cd3..34142cf8 100644 --- a/src/ostree/ot-main.h +++ b/src/ostree/ot-main.h @@ -29,7 +29,7 @@ typedef enum { typedef struct { const char *name; - gboolean (*fn) (int argc, char **argv, const char *repo, GError **error); + gboolean (*fn) (int argc, char **argv, GFile *repo_path, GError **error); int flags; /* OstreeBuiltinFlags */ } OstreeBuiltin;