diff options
author | Russell Belfer <rb@github.com> | 2014-03-28 10:42:38 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-04-01 09:45:20 -0700 |
commit | d543d59cf0d90264aa84ac49b7f21c6a603d5d3a (patch) | |
tree | f73feb436f4dfb46fe7d100677773b9ee44f862d /examples/status.c | |
parent | e402d2f134ff6ac76726bedd37ac4f1c0aa5e9ab (diff) | |
download | libgit2-d543d59cf0d90264aa84ac49b7f21c6a603d5d3a.tar.gz |
Add some funny options for debugging status
This allows you to use a --repeat option to run status over and
over and see how the output changes as you make local directory
changes without reopening the git_repository object each time.
Also, adds a flag to explicitly list the submodules before status.
Diffstat (limited to 'examples/status.c')
-rw-r--r-- | examples/status.c | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/examples/status.c b/examples/status.c index feba77f84..5f619a055 100644 --- a/examples/status.c +++ b/examples/status.c @@ -13,6 +13,7 @@ */ #include "common.h" +#include <unistd.h> /** * This example demonstrates the use of the libgit2 status APIs, @@ -44,19 +45,22 @@ enum { #define MAX_PATHSPEC 8 struct opts { - git_status_options statusopt; - char *repodir; - char *pathspec[MAX_PATHSPEC]; - int npaths; - int format; - int zterm; - int showbranch; + git_status_options statusopt; + char *repodir; + char *pathspec[MAX_PATHSPEC]; + int npaths; + int format; + int zterm; + int showbranch; + int showsubmod; + int repeat; }; static void parse_opts(struct opts *o, int argc, char *argv[]); static void show_branch(git_repository *repo, int format); static void print_long(git_status_list *status); static void print_short(git_repository *repo, git_status_list *status); +static int print_submod(git_submodule *sm, const char *name, void *payload); int main(int argc, char *argv[]) { @@ -84,6 +88,10 @@ int main(int argc, char *argv[]) fatal("Cannot report status on bare repository", git_repository_path(repo)); +show_status: + if (o.repeat) + printf("\033[H\033[2J"); + /** * Run status on the repository * @@ -98,17 +106,29 @@ int main(int argc, char *argv[]) * about what results are presented. */ check_lg2(git_status_list_new(&status, repo, &o.statusopt), - "Could not get status", NULL); + "Could not get status", NULL); if (o.showbranch) show_branch(repo, o.format); + if (o.showsubmod) { + int submod_count = 0; + check_lg2(git_submodule_foreach(repo, print_submod, &submod_count), + "Cannot iterate submodules", o.repodir); + } + if (o.format == FORMAT_LONG) print_long(status); else print_short(repo, status); git_status_list_free(status); + + if (o.repeat) { + sleep(o.repeat); + goto show_status; + } + git_repository_free(repo); git_threads_shutdown(); @@ -381,7 +401,7 @@ static void print_short(git_repository *repo, git_status_list *status) } /** - * Now that we have all the information, it's time to format the output. + * Now that we have all the information, format the output. */ if (s->head_to_index) { @@ -417,6 +437,21 @@ static void print_short(git_repository *repo, git_status_list *status) } } +static int print_submod(git_submodule *sm, const char *name, void *payload) +{ + int *count = payload; + (void)name; + + if (*count == 0) + printf("# Submodules\n"); + (*count)++; + + printf("# - submodule '%s' at %s\n", + git_submodule_name(sm), git_submodule_path(sm)); + + return 0; +} + /** * Parse options that git's status command supports. */ @@ -462,6 +497,12 @@ static void parse_opts(struct opts *o, int argc, char *argv[]) o->statusopt.flags |= GIT_STATUS_OPT_EXCLUDE_SUBMODULES; else if (!strncmp(a, "--git-dir=", strlen("--git-dir="))) o->repodir = a + strlen("--git-dir="); + else if (!strcmp(a, "--repeat")) + o->repeat = 10; + else if (match_int_arg(&o->repeat, &args, "--repeat", 0)) + /* okay */; + else if (!strcmp(a, "--list-submodules")) + o->showsubmod = 1; else check_lg2(-1, "Unsupported option", a); } |