chiark / gitweb /
git-cache-proxy: gc: Break out $gccheck
[chiark-utils.git] / scripts / git-cache-proxy
index ec5ff7f2e81aa9c4fd67069e537479e812f5f60c..48c397c4fb0d4b81dcef369fc678772e98b1edd2 100755 (executable)
@@ -430,18 +430,19 @@ sub housekeeping () {
        }
        my ($mode_what,$mode_locknb,$mode_action);
        if (-M _ <= $treeexpiredays) {
-           if (!lstat "$gcdone") {
-               $! == ENOENT or hkfail "$gcdone: lstat: $!";
-               logm 'debug',
- "housekeeping: subdirs $subdir: touched recently, never gc'd!";
-           } elsif (-M _ <= $gcintervaldays) {
-               logm 'debug',
- "housekeeping: subdirs $subdir: touched recently, gc'd recently";
-               next;
-           } else {
-               logm 'debug',
- "housekeeping: subdirs $subdir: touched recently, needs gc";
-           }
+           my $gccheck = sub {
+               if (!lstat "$gcdone") {
+                   $! == ENOENT or hkfail "$gcdone: lstat: $!";
+                   return 1, "touched recently, never gc'd!";
+               } elsif (-M _ <= $gcintervaldays) {
+                   return 0, "touched recently, gc'd recently";
+               } else {
+                   return 1, "touched recently, needs gc";
+               }
+           };
+           my ($needsgc, $gcmsg) = $gccheck->();
+           logm 'debug', "housekeeping: subdirs $subdir: $gcmsg";
+           next unless $needsgc;
            $mode_what = 'garbage collecting';
            $mode_locknb = 0;
            $mode_action = sub {