@matheusbsbs / matheus-bagliano / commits / 850b6edefa
Fork 0

auto-gc: extract a reusable helper from "git fetch"

Back in 1991006c (fetch: convert argv_gc_auto to struct argv_array, 2014-08-16), we taught "git fetch --quiet" to pass the "--quiet" option down to "gc --auto". This issue, however, is not limited to "fetch": $ git grep -e 'gc.*--auto' \*.c finds hits in "am", "commit", "merge", and "rebase" and these commands do not pass "--quiet" down to "gc --auto" when they themselves are told to be quiet. As a preparatory step, let's introduce a helper function run_auto_gc(), that the caller can pass a boolean "quiet", and redo the fix to "git fetch" using the helper. Signed-off-by: Junio C Hamano <gitster@pobox.com> Reviewed-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed May 6, 2020 at 13:18 UTC 850b6edefa7a4fcc75149447cb8a984f804dd080
3 files changed +20 -8
builtin/fetch.c
+2 -8
@@ -1759,7 +1759,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
1759 struct remote *remote = NULL;
1760 int result = 0;
1761 int prune_tags_ok = 1;
1762 - struct argv_array argv_gc_auto = ARGV_ARRAY_INIT;
1762
1763 packet_trace_identity("fetch");
1764
@@ -1886,13 +1885,8 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
1885
1886 close_object_store(the_repository->objects);
1887
1889 - if (enable_auto_gc) {
1890 - argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL);
1891 - if (verbosity < 0)
1892 - argv_array_push(&argv_gc_auto, "--quiet");
1893 - run_command_v_opt(argv_gc_auto.argv, RUN_GIT_CMD);
1894 - argv_array_clear(&argv_gc_auto);
1895 - }
1888 + if (enable_auto_gc)
1889 + run_auto_gc(verbosity < 0);
1890
1891 return result;
1892 }
run-command.c
+13
@@ -1864,3 +1864,16 @@ int run_processes_parallel_tr2(int n, get_next_task_fn get_next_task,
1864
1865 return result;
1866 }
1867 +
1868 +int run_auto_gc(int quiet)
1869 +{
1870 + struct argv_array argv_gc_auto = ARGV_ARRAY_INIT;
1871 + int status;
1872 +
1873 + argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL);
1874 + if (quiet)
1875 + argv_array_push(&argv_gc_auto, "--quiet");
1876 + status = run_command_v_opt(argv_gc_auto.argv, RUN_GIT_CMD);
1877 + argv_array_clear(&argv_gc_auto);
1878 + return status;
1879 +}
run-command.h
+5
@@ -218,6 +218,11 @@ LAST_ARG_MUST_BE_NULL
218 int run_hook_le(const char *const *env, const char *name, ...);
219 int run_hook_ve(const char *const *env, const char *name, va_list args);
220
221 +/*
222 + * Trigger an auto-gc
223 + */
224 +int run_auto_gc(int quiet);
225 +
226 #define RUN_COMMAND_NO_STDIN 1
227 #define RUN_GIT_CMD 2 /*If this is to be git sub-command */
228 #define RUN_COMMAND_STDOUT_TO_STDERR 4