]> git.proxmox.com Git - libgit2.git/blobdiff - examples/status.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / examples / status.c
index 62cb5b24f0373520a8fb1f73707d70df6f55bc8a..e659efb059b15a912ac3062ede4ce8e7732ec946 100644 (file)
  */
 
 #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,12 +38,12 @@ enum {
        FORMAT_DEFAULT   = 0,
        FORMAT_LONG      = 1,
        FORMAT_SHORT     = 2,
-       FORMAT_PORCELAIN = 3,
+       FORMAT_PORCELAIN = 3
 };
 
 #define MAX_PATHSPEC 8
 
-struct opts {
+struct status_opts {
        git_status_options statusopt;
        char *repodir;
        char *pathspec[MAX_PATHSPEC];
@@ -61,19 +55,16 @@ struct opts {
        int repeat;
 };
 
-static void parse_opts(struct opts *o, int argc, char *argv[]);
+static void parse_opts(struct status_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[])
+int lg2_status(git_repository *repo, int argc, char *argv[])
 {
-       git_repository *repo = NULL;
        git_status_list *status;
-       struct opts o = { GIT_STATUS_OPTIONS_INIT, "." };
-
-       git_libgit2_init();
+       struct status_opts o = { GIT_STATUS_OPTIONS_INIT, "." };
 
        o.statusopt.show  = GIT_STATUS_SHOW_INDEX_AND_WORKDIR;
        o.statusopt.flags = GIT_STATUS_OPT_INCLUDE_UNTRACKED |
@@ -82,13 +73,6 @@ int main(int argc, char *argv[])
 
        parse_opts(&o, argc, argv);
 
-       /**
-        * Try to open the repository at the given path (or at the current
-        * directory if none was given).
-        */
-       check_lg2(git_repository_open_ext(&repo, o.repodir, 0, NULL),
-                 "Could not open repository", o.repodir);
-
        if (git_repository_is_bare(repo))
                fatal("Cannot report status on bare repository",
                        git_repository_path(repo));
@@ -134,9 +118,6 @@ show_status:
                goto show_status;
        }
 
-       git_repository_free(repo);
-       git_libgit2_shutdown();
-
        return 0;
 }
 
@@ -384,25 +365,19 @@ static void print_short(git_repository *repo, git_status_list *status)
                if (s->index_to_workdir &&
                        s->index_to_workdir->new_file.mode == GIT_FILEMODE_COMMIT)
                {
-                       git_submodule *sm = NULL;
                        unsigned int smstatus = 0;
 
-                       if (!git_submodule_lookup(
-                                       &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)";
-                               }
+                       if (!git_submodule_status(&smstatus, repo, s->index_to_workdir->new_file.path,
+                                                 GIT_SUBMODULE_IGNORE_UNSPECIFIED)) {
+                               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);
                }
 
                /**
@@ -460,7 +435,7 @@ static int print_submod(git_submodule *sm, const char *name, void *payload)
 /**
  * Parse options that git's status command supports.
  */
-static void parse_opts(struct opts *o, int argc, char *argv[])
+static void parse_opts(struct status_opts *o, int argc, char *argv[])
 {
        struct args_info args = ARGS_INFO_INIT;