]> git.ipfire.org Git - thirdparty/git.git/commitdiff
gc: refactor a "call me once" pattern
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 15 Mar 2019 15:59:54 +0000 (16:59 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 18 Mar 2019 06:09:40 +0000 (15:09 +0900)
Change an idiom we're using to ensure that gc_before_repack() only
does work once (see 62aad1849f ("gc --auto: do not lock refs in the
background", 2014-05-25)) to be more obvious.

Nothing except this function cares about the "pack_refs" and
"prune_reflogs" variables, so let's not leave the reader wondering if
they're being zero'd out for later use somewhere else.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/gc.c

index 733bd7bdf463f2b59eaa7e029c6d964a55647247..ae716a00d4a3ab039051e27ee13bf41845c0bfe1 100644 (file)
@@ -489,14 +489,20 @@ done:
 
 static void gc_before_repack(void)
 {
+       /*
+        * We may be called twice, as both the pre- and
+        * post-daemonized phases will call us, but running these
+        * commands more than once is pointless and wasteful.
+        */
+       static int done = 0;
+       if (done++)
+               return;
+
        if (pack_refs && run_command_v_opt(pack_refs_cmd.argv, RUN_GIT_CMD))
                die(FAILED_RUN, pack_refs_cmd.argv[0]);
 
        if (prune_reflogs && run_command_v_opt(reflog.argv, RUN_GIT_CMD))
                die(FAILED_RUN, reflog.argv[0]);
-
-       pack_refs = 0;
-       prune_reflogs = 0;
 }
 
 int cmd_gc(int argc, const char **argv, const char *prefix)