checkout: require worktree unconditionally
[gitweb.git] / rerere.c
index d84b495895bc6d42980c388ed03c560174604f92..1b0555f1a5a0233e931b13a088c052a56aef3977 100644 (file)
--- a/rerere.c
+++ b/rerere.c
@@ -1,4 +1,5 @@
 #include "cache.h"
+#include "lockfile.h"
 #include "string-list.h"
 #include "rerere.h"
 #include "xdiff-interface.h"
@@ -573,15 +574,11 @@ static int do_plain_rerere(struct string_list *rr, int fd)
        return write_rr(rr, fd);
 }
 
-static int git_rerere_config(const char *var, const char *value, void *cb)
+static void git_rerere_config(void)
 {
-       if (!strcmp(var, "rerere.enabled"))
-               rerere_enabled = git_config_bool(var, value);
-       else if (!strcmp(var, "rerere.autoupdate"))
-               rerere_autoupdate = git_config_bool(var, value);
-       else
-               return git_default_config(var, value, cb);
-       return 0;
+       git_config_get_bool("rerere.enabled", &rerere_enabled);
+       git_config_get_bool("rerere.autoupdate", &rerere_autoupdate);
+       git_config(git_default_config, NULL);
 }
 
 static int is_rerere_enabled(void)
@@ -606,7 +603,7 @@ int setup_rerere(struct string_list *merge_rr, int flags)
 {
        int fd;
 
-       git_config(git_rerere_config, NULL);
+       git_rerere_config();
        if (!is_rerere_enabled())
                return -1;
 
@@ -699,24 +696,6 @@ static void unlink_rr_item(const char *name)
        rmdir(git_path("rr-cache/%s", name));
 }
 
-struct rerere_gc_config_cb {
-       int cutoff_noresolve;
-       int cutoff_resolve;
-};
-
-static int git_rerere_gc_config(const char *var, const char *value, void *cb)
-{
-       struct rerere_gc_config_cb *cf = cb;
-
-       if (!strcmp(var, "gc.rerereresolved"))
-               cf->cutoff_resolve = git_config_int(var, value);
-       else if (!strcmp(var, "gc.rerereunresolved"))
-               cf->cutoff_noresolve = git_config_int(var, value);
-       else
-               return git_default_config(var, value, cb);
-       return 0;
-}
-
 void rerere_gc(struct string_list *rr)
 {
        struct string_list to_remove = STRING_LIST_INIT_DUP;
@@ -724,9 +703,12 @@ void rerere_gc(struct string_list *rr)
        struct dirent *e;
        int i, cutoff;
        time_t now = time(NULL), then;
-       struct rerere_gc_config_cb cf = { 15, 60 };
+       int cutoff_noresolve = 15;
+       int cutoff_resolve = 60;
 
-       git_config(git_rerere_gc_config, &cf);
+       git_config_get_int("gc.rerereresolved", &cutoff_resolve);
+       git_config_get_int("gc.rerereunresolved", &cutoff_noresolve);
+       git_config(git_default_config, NULL);
        dir = opendir(git_path("rr-cache"));
        if (!dir)
                die_errno("unable to open rr-cache directory");
@@ -736,12 +718,12 @@ void rerere_gc(struct string_list *rr)
 
                then = rerere_last_used_at(e->d_name);
                if (then) {
-                       cutoff = cf.cutoff_resolve;
+                       cutoff = cutoff_resolve;
                } else {
                        then = rerere_created_at(e->d_name);
                        if (!then)
                                continue;
-                       cutoff = cf.cutoff_noresolve;
+                       cutoff = cutoff_noresolve;
                }
                if (then < now - cutoff * 86400)
                        string_list_append(&to_remove, e->d_name);