Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'examples/status.c')
-rw-r--r--examples/status.c89
1 files changed, 69 insertions, 20 deletions
diff --git a/examples/status.c b/examples/status.c
index 3adfe0d5d..a59f34454 100644
--- a/examples/status.c
+++ b/examples/status.c
@@ -13,6 +13,12 @@
*/
#include "common.h"
+#ifdef _WIN32
+# include <Windows.h>
+# define sleep(a) Sleep(a * 1000)
+#else
+# include <unistd.h>
+#endif
/**
* This example demonstrates the use of the libgit2 status APIs,
@@ -44,19 +50,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 +93,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 +111,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();
@@ -363,22 +388,25 @@ static void print_short(git_repository *repo, git_status_list *status)
unsigned int smstatus = 0;
if (!git_submodule_lookup(
- &sm, repo, s->index_to_workdir->new_file.path) &&
- !git_submodule_status(&smstatus, sm))
- {
- if (smstatus & GIT_SUBMODULE_STATUS_WD_MODIFIED)
- extra = " (new commits)";
- else if (smstatus & GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED)
- extra = " (modified content)";
- else if (smstatus & GIT_SUBMODULE_STATUS_WD_WD_MODIFIED)
- extra = " (modified content)";
- else if (smstatus & GIT_SUBMODULE_STATUS_WD_UNTRACKED)
- extra = " (untracked content)";
+ &sm, repo, s->index_to_workdir->new_file.path)) {
+
+ if (!git_submodule_status(&smstatus, sm)) {
+ if (smstatus & GIT_SUBMODULE_STATUS_WD_MODIFIED)
+ extra = " (new commits)";
+ else if (smstatus & GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED)
+ extra = " (modified content)";
+ else if (smstatus & GIT_SUBMODULE_STATUS_WD_WD_MODIFIED)
+ extra = " (modified content)";
+ else if (smstatus & GIT_SUBMODULE_STATUS_WD_UNTRACKED)
+ extra = " (untracked content)";
+ }
}
+
+ git_submodule_free(sm);
}
/**
- * 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) {
@@ -414,6 +442,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.
*/
@@ -459,6 +502,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);
}