Added command argument passing to repository loading

Trailing command line arguments are now passed to the repository
loader (appended to git log) so `gitg . --all` should work for
example
This commit is contained in:
Jesse van den Kieboom 2008-06-30 11:19:42 +02:00
parent eeb076a145
commit 84e9d5b9b7
5 changed files with 24 additions and 18 deletions

View file

@ -671,7 +671,7 @@ gitg_repository_get_loader(GitgRepository *self)
}
gboolean
gitg_repository_load(GitgRepository *self, GError **error)
gitg_repository_load(GitgRepository *self, int argc, gchar **av, GError **error)
{
g_return_val_if_fail(GITG_IS_REPOSITORY(self), FALSE);
@ -686,20 +686,23 @@ gitg_repository_load(GitgRepository *self, GError **error)
gitg_runner_cancel(self->priv->loader);
gitg_repository_clear(self);
gchar *argv[] = {
"git",
"--git-dir",
gitg_utils_dot_git_path(self->priv->path),
"log",
"--encoding=UTF-8",
"--topo-order",
"--pretty=format:%H\01%an\01%s\01%P\01%at",
"HEAD",
NULL
};
gchar *dotgit = gitg_utils_dot_git_path(self->priv->path);
gchar **argv = g_new0(gchar *, 7 + (argc ? argc - 1 : 0));
argv[0] = "git";
argv[1] = "--git-dir";
argv[2] = dotgit;
argv[3] = "log";
argv[4] = "--pretty=format:%H\01%an\01%s\01%P\01%at";
if (!argc)
argv[5] = "HEAD";
int i;
for (i = 0; i < argc; ++i)
argv[5 + i] = av[i];
gboolean ret = gitg_runner_run(self->priv->loader, argv, error);
g_free(argv[2]);
g_free(dotgit);
return ret;
}

View file

@ -43,7 +43,7 @@ GitgRepository *gitg_repository_new(gchar const *path);
gchar const *gitg_repository_get_path(GitgRepository *repository);
GitgRunner *gitg_repository_get_loader(GitgRepository *repository);
gboolean gitg_repository_load(GitgRepository *repository, GError **error);
gboolean gitg_repository_load(GitgRepository *repository, int argc, gchar **argv, GError **error);
void gitg_repository_add(GitgRepository *repository, GitgRevision *revision, GtkTreeIter *iter);
void gitg_repository_clear(GitgRepository *repository);

View file

@ -324,7 +324,7 @@ handle_no_gitdir(GitgWindow *window)
}
void
gitg_window_load_repository(GitgWindow *window, gchar const *path)
gitg_window_load_repository(GitgWindow *window, gchar const *path, gint argc, gchar **argv)
{
g_return_if_fail(GITG_IS_WINDOW(window));
@ -347,7 +347,7 @@ gitg_window_load_repository(GitgWindow *window, gchar const *path)
g_object_unref(loader);
gitg_repository_load(window->priv->repository, NULL);
gitg_repository_load(window->priv->repository, argc, argv, NULL);
}
else
{

View file

@ -29,7 +29,7 @@ struct _GitgWindowClass {
GType gitg_window_get_type (void) G_GNUC_CONST;
void gitg_window_load_repository(GitgWindow *window, gchar const *path);
void gitg_window_load_repository(GitgWindow *window, gchar const *path, gint argc, gchar **argv);
G_END_DECLS

View file

@ -20,6 +20,9 @@ parse_options(int *argc, char ***argv)
GOptionContext *context;
context = g_option_context_new(_("- git repository viewer"));
// Ignore unknown options so we can pass them to git
g_option_context_set_ignore_unknown_options(context, TRUE);
g_option_context_add_main_entries(context, entries, GETTEXT_PACKAGE);
g_option_context_add_group(context, gtk_get_option_group (TRUE));
@ -78,7 +81,7 @@ main(int argc, char **argv)
GitgWindow *window = build_ui();
gchar *gitdir = argc > 1 ? g_strdup(argv[1]) : g_get_current_dir();
gitg_window_load_repository(window, gitdir);
gitg_window_load_repository(window, gitdir, argc - 2, &argv[2]);
g_free(gitdir);
gtk_main();