]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fsck: make fsck_config() re-usable
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 5 Jan 2021 19:42:47 +0000 (20:42 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 5 Jan 2021 22:58:29 +0000 (14:58 -0800)
Move the fsck_config() function from builtin/fsck.c to fsck.[ch]. This
allows for re-using it in other tools that expose fsck logic and want
to support its configuration variables.

A logical continuation of this change would be to use a common
function for all of {fetch,receive}.fsck.* and fsck.*. See
5d477a334a6 (fsck (receive-pack): allow demoting errors to warnings,
2015-06-22) and my own 1362df0d413 (fetch: implement fetch.fsck.*,
2018-07-27) for the relevant code.

However, those routines want to not parse the fsck.skipList into OIDs,
but rather pass them along with the --strict option to another
process. It would be possible to refactor that whole thing so we
support e.g. a "fetch." prefix, then just keep track of the skiplist
as a filename instead of parsing it, and learn to spew that all out
from our internal structures into something we can append to the
--strict option.

But instead I'm planning to re-use this in "mktag", which'll just
re-use these "fsck.*" variables as-is.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fsck.c
fsck.c
fsck.h

index fbf26cafcfd7d42fa779f449cf53eb7d9a6d5ea0..821e7798c706dfa1b6f2ae61b7fb08a036280242 100644 (file)
@@ -73,25 +73,7 @@ static const char *printable_type(const struct object_id *oid,
 
 static int fsck_config(const char *var, const char *value, void *cb)
 {
-       if (strcmp(var, "fsck.skiplist") == 0) {
-               const char *path;
-               struct strbuf sb = STRBUF_INIT;
-
-               if (git_config_pathname(&path, var, value))
-                       return 1;
-               strbuf_addf(&sb, "skiplist=%s", path);
-               free((char *)path);
-               fsck_set_msg_types(&fsck_obj_options, sb.buf);
-               strbuf_release(&sb);
-               return 0;
-       }
-
-       if (skip_prefix(var, "fsck.", &var)) {
-               fsck_set_msg_type(&fsck_obj_options, var, value);
-               return 0;
-       }
-
-       return git_default_config(var, value, cb);
+       return fsck_config_internal(var, value, cb, &fsck_obj_options);
 }
 
 static int objerror(struct object *obj, const char *err)
diff --git a/fsck.c b/fsck.c
index bed5e20e03b9317d8e4425e98996fa0cc9d995cf..9c3a5942d2a0f36ceb31ab679758a2d9eb47bf66 100644 (file)
--- a/fsck.c
+++ b/fsck.c
@@ -1310,3 +1310,27 @@ int fsck_finish(struct fsck_options *options)
        oidset_clear(&gitmodules_done);
        return ret;
 }
+
+int fsck_config_internal(const char *var, const char *value, void *cb,
+                        struct fsck_options *options)
+{
+       if (strcmp(var, "fsck.skiplist") == 0) {
+               const char *path;
+               struct strbuf sb = STRBUF_INIT;
+
+               if (git_config_pathname(&path, var, value))
+                       return 1;
+               strbuf_addf(&sb, "skiplist=%s", path);
+               free((char *)path);
+               fsck_set_msg_types(options, sb.buf);
+               strbuf_release(&sb);
+               return 0;
+       }
+
+       if (skip_prefix(var, "fsck.", &var)) {
+               fsck_set_msg_type(options, var, value);
+               return 0;
+       }
+
+       return git_default_config(var, value, cb);
+}
diff --git a/fsck.h b/fsck.h
index 29ee4c45e8753a344d96524300540060d194a82d..423c467feb70307a0d60aa5563be38a1a8812d2b 100644 (file)
--- a/fsck.h
+++ b/fsck.h
@@ -103,4 +103,11 @@ void fsck_put_object_name(struct fsck_options *options,
 const char *fsck_describe_object(struct fsck_options *options,
                                 const struct object_id *oid);
 
+/*
+ * git_config() callback for use by fsck-y tools that want to support
+ * fsck.<msg> fsck.skipList etc.
+ */
+int fsck_config_internal(const char *var, const char *value, void *cb,
+                        struct fsck_options *options);
+
 #endif