connected.c: add new variant that runs with --shallow-file
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Thu, 5 Dec 2013 13:02:46 +0000 (20:02 +0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Dec 2013 00:14:18 +0000 (16:14 -0800)
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
connected.c
connected.h
index fae8d64c12e44cf6bcf4bab210abc4bc4b9c8ed9..427389dc47caa207c6da351e736d37fe56868df3 100644 (file)
@@ -19,17 +19,17 @@ int check_everything_connected(sha1_iterate_fn fn, int quiet, void *cb_data)
  *
  * Returns 0 if everything is connected, non-zero otherwise.
  */
-int check_everything_connected_with_transport(sha1_iterate_fn fn,
-                                             int quiet,
-                                             void *cb_data,
-                                             struct transport *transport)
+static int check_everything_connected_real(sha1_iterate_fn fn,
+                                          int quiet,
+                                          void *cb_data,
+                                          struct transport *transport,
+                                          const char *shallow_file)
 {
        struct child_process rev_list;
-       const char *argv[] = {"rev-list", "--objects",
-                             "--stdin", "--not", "--all", NULL, NULL};
+       const char *argv[9];
        char commit[41];
        unsigned char sha1[20];
-       int err = 0;
+       int err = 0, ac = 0;
        struct packed_git *new_pack = NULL;
 
        if (fn(cb_data, sha1))
@@ -47,8 +47,18 @@ int check_everything_connected_with_transport(sha1_iterate_fn fn,
                strbuf_release(&idx_file);
        }
 
+       if (shallow_file) {
+               argv[ac++] = "--shallow-file";
+               argv[ac++] = shallow_file;
+       }
+       argv[ac++] = "rev-list";
+       argv[ac++] = "--objects";
+       argv[ac++] = "--stdin";
+       argv[ac++] = "--not";
+       argv[ac++] = "--all";
        if (quiet)
-               argv[5] = "--quiet";
+               argv[ac++] = "--quiet";
+       argv[ac] = NULL;
 
        memset(&rev_list, 0, sizeof(rev_list));
        rev_list.argv = argv;
@@ -92,3 +102,19 @@ int check_everything_connected_with_transport(sha1_iterate_fn fn,
        sigchain_pop(SIGPIPE);
        return finish_command(&rev_list) || err;
 }
+
+int check_everything_connected_with_transport(sha1_iterate_fn fn,
+                                             int quiet,
+                                             void *cb_data,
+                                             struct transport *transport)
+{
+       return check_everything_connected_real(fn, quiet, cb_data,
+                                              transport, NULL);
+}
+
+int check_shallow_connected(sha1_iterate_fn fn, int quiet, void *cb_data,
+                           const char *shallow_file)
+{
+       return check_everything_connected_real(fn, quiet, cb_data,
+                                              NULL, shallow_file);
+}
index 0b060b7429ff2035ac3db108f80308c4a8a8e785..071d408f387b2afdbb642920054a7735c982200b 100644 (file)
@@ -18,6 +18,8 @@ typedef int (*sha1_iterate_fn)(void *, unsigned char [20]);
  * Return 0 if Ok, non zero otherwise (i.e. some missing objects)
  */
 extern int check_everything_connected(sha1_iterate_fn, int quiet, void *cb_data);
+extern int check_shallow_connected(sha1_iterate_fn, int quiet, void *cb_data,
+                                  const char *shallow_file);
 extern int check_everything_connected_with_transport(sha1_iterate_fn, int quiet,
                                                     void *cb_data,
                                                     struct transport *transport);