Merge branch 'js/config-cb'
authorJunio C Hamano <gitster@pobox.com>
Sun, 25 May 2008 21:25:02 +0000 (14:25 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 25 May 2008 21:25:02 +0000 (14:25 -0700)
* js/config-cb:
Provide git_config with a callback-data parameter

Conflicts:

builtin-add.c
builtin-cat-file.c

75 files changed:
alias.c
archive-tar.c
builtin-add.c
builtin-apply.c
builtin-blame.c
builtin-branch.c
builtin-cat-file.c
builtin-checkout-index.c
builtin-checkout.c
builtin-clean.c
builtin-clone.c
builtin-commit-tree.c
builtin-commit.c
builtin-config.c
builtin-diff-files.c
builtin-diff-index.c
builtin-diff-tree.c
builtin-diff.c
builtin-fast-export.c
builtin-fetch-pack.c
builtin-fmt-merge-msg.c
builtin-gc.c
builtin-http-fetch.c
builtin-init-db.c
builtin-log.c
builtin-ls-files.c
builtin-ls-tree.c
builtin-mailinfo.c
builtin-merge-base.c
builtin-merge-recursive.c
builtin-mv.c
builtin-name-rev.c
builtin-pack-objects.c
builtin-read-tree.c
builtin-reflog.c
builtin-remote.c
builtin-rerere.c
builtin-reset.c
builtin-rev-list.c
builtin-rev-parse.c
builtin-revert.c
builtin-rm.c
builtin-show-branch.c
builtin-symbolic-ref.c
builtin-tag.c
builtin-unpack-objects.c
builtin-update-index.c
builtin-update-ref.c
builtin-verify-pack.c
builtin-verify-tag.c
builtin-write-tree.c
cache.h
color.c
color.h
config.c
connect.c
convert.c
daemon.c
diff.c
diff.h
fast-import.c
hash-object.c
help.c
http.c
imap-send.c
index-pack.c
ll-merge.c
pager.c
receive-pack.c
remote.c
setup.c
unpack-file.c
var.c
wt-status.c
wt-status.h
diff --git a/alias.c b/alias.c
index 116cac87c37eea27b9fc7aa41c5889fbf66057a5..995f3e6a0ac84fa71c3196de6673225d4a5d8231 100644 (file)
--- a/alias.c
+++ b/alias.c
@@ -2,7 +2,8 @@
 
 static const char *alias_key;
 static char *alias_val;
-static int alias_lookup_cb(const char *k, const char *v)
+
+static int alias_lookup_cb(const char *k, const char *v, void *cb)
 {
        if (!prefixcmp(k, "alias.") && !strcmp(k+6, alias_key)) {
                if (!v)
@@ -17,6 +18,6 @@ char *alias_lookup(const char *alias)
 {
        alias_key = alias;
        alias_val = NULL;
-       git_config(alias_lookup_cb);
+       git_config(alias_lookup_cb, NULL);
        return alias_val;
 }
index 4add80284e4570d1da44861e9025fa75eeb775d6..d7598f907d9f7fb40c24c8cef815f8fc33a8b19b 100644 (file)
@@ -220,7 +220,7 @@ static void write_global_extended_header(const unsigned char *sha1)
        strbuf_release(&ext_header);
 }
 
-static int git_tar_config(const char *var, const char *value)
+static int git_tar_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "tar.umask")) {
                if (value && !strcmp(value, "user")) {
@@ -231,7 +231,7 @@ static int git_tar_config(const char *var, const char *value)
                }
                return 0;
        }
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static int write_tar_entry(const unsigned char *sha1,
@@ -268,7 +268,7 @@ int write_tar_archive(struct archiver_args *args)
 {
        int plen = args->base ? strlen(args->base) : 0;
 
-       git_config(git_tar_config);
+       git_config(git_tar_config, NULL);
 
        archive_time = args->time;
        verbose = args->verbose;
index 6e4e645cb7ba1624825fac9ff3f1d9bce5e93689..1da22eec915539f06a4dfc1e4bb1d18482de0ede 100644 (file)
@@ -207,13 +207,13 @@ static struct option builtin_add_options[] = {
        OPT_END(),
 };
 
-static int add_config(const char *var, const char *value)
+static int add_config(const char *var, const char *value, void *cb)
 {
        if (!strcasecmp(var, "add.ignore-errors")) {
                ignore_add_errors = git_config_bool(var, value);
                return 0;
        }
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 int cmd_add(int argc, const char **argv, const char *prefix)
@@ -231,7 +231,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
        if (add_interactive)
                exit(interactive_add(argc, argv, prefix));
 
-       git_config(add_config);
+       git_config(add_config, NULL);
 
        newfd = hold_locked_index(&lock_file, 1);
 
index 1540f28ab4acc7794796389237bcfeee1075b932..c4978893122bbcfd80201fe937eb8433b29e1aa0 100644 (file)
@@ -2985,11 +2985,11 @@ static int apply_patch(int fd, const char *filename, int inaccurate_eof)
        return 0;
 }
 
-static int git_apply_config(const char *var, const char *value)
+static int git_apply_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "apply.whitespace"))
                return git_config_string(&apply_default_whitespace, var, value);
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 
@@ -3005,7 +3005,7 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
 
        prefix = setup_git_directory_gently(&is_not_gitdir);
        prefix_length = prefix ? strlen(prefix) : 0;
-       git_config(git_apply_config);
+       git_config(git_apply_config, NULL);
        if (apply_default_whitespace)
                parse_whitespace_option(apply_default_whitespace);
 
index bfd562d7d2b897ad4ab3d35dda33701e315b7d5d..b451f6c64dde8ce6358bb5c8dfccc8bad181a6bb 100644 (file)
@@ -1993,7 +1993,7 @@ static void prepare_blame_range(struct scoreboard *sb,
                usage(blame_usage);
 }
 
-static int git_blame_config(const char *var, const char *value)
+static int git_blame_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "blame.showroot")) {
                show_root = git_config_bool(var, value);
@@ -2003,7 +2003,7 @@ static int git_blame_config(const char *var, const char *value)
                blank_boundary = git_config_bool(var, value);
                return 0;
        }
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static struct commit *fake_working_tree_commit(const char *path, const char *contents_from)
@@ -2141,7 +2141,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 
        cmd_is_annotate = !strcmp(argv[0], "annotate");
 
-       git_config(git_blame_config);
+       git_config(git_blame_config, NULL);
        save_commit_buffer = 0;
 
        opt = 0;
index 19c508a60827c9c7c744da995bf5737733864a76..d279702ba9a90faa020fa2f102d595cec082be21 100644 (file)
@@ -63,7 +63,7 @@ static int parse_branch_color_slot(const char *var, int ofs)
        die("bad config variable '%s'", var);
 }
 
-static int git_branch_config(const char *var, const char *value)
+static int git_branch_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "color.branch")) {
                branch_use_color = git_config_colorbool(var, value, -1);
@@ -76,7 +76,7 @@ static int git_branch_config(const char *var, const char *value)
                color_parse(value, var, branch_colors[slot]);
                return 0;
        }
-       return git_color_default_config(var, value);
+       return git_color_default_config(var, value, cb);
 }
 
 static const char *branch_get_color(enum color_branch ix)
@@ -461,7 +461,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
-       git_config(git_branch_config);
+       git_config(git_branch_config, NULL);
 
        if (branch_use_color == -1)
                branch_use_color = git_use_color_default;
index 5ef15a4fa9eac952db105376ec6a10b706b3cbb2..200345e7fbd54d86fb1e4db228244b7a7a221562 100644 (file)
@@ -222,7 +222,7 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        if (argc != 3 && argc != 2)
                usage_with_options(cat_file_usage, options);
index 7e42024c67a2c0fda72f94935b7d5a723c73d131..eb1fc9aa6f7f61a817a198feaf94ca9d983eb14b 100644 (file)
@@ -166,7 +166,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
        int read_from_stdin = 0;
        int prefix_length;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        state.base_dir = "";
        prefix_length = prefix ? strlen(prefix) : 0;
 
index 68fffd28cb636d115ed4491b55ce3b87d0b97109..1ea017f5f70f2255fb937866e9913a06399ce517 100644 (file)
@@ -516,7 +516,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
        memset(&opts, 0, sizeof(opts));
        memset(&new, 0, sizeof(new));
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        opts.track = git_branch_track;
 
index 6778a03ae4c901d216e4b91cd41f2073e0e98589..80a7ff9ae45035b44bbac44a9436152645c4fb38 100644 (file)
@@ -19,11 +19,11 @@ static const char *const builtin_clean_usage[] = {
        NULL
 };
 
-static int git_clean_config(const char *var, const char *value)
+static int git_clean_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "clean.requireforce"))
                force = !git_config_bool(var, value);
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 int cmd_clean(int argc, const char **argv, const char *prefix)
@@ -50,7 +50,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       git_config(git_clean_config);
+       git_config(git_clean_config, NULL);
        if (force < 0)
                force = 0;
        else
index 2a3f6732f2a233c17a0086628ff3c31319bfe8ac..4740b130674c074180a190f4c700863ac992ef91 100644 (file)
@@ -418,7 +418,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        if (option_reference)
                setup_reference(git_dir);
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        if (option_bare) {
                strcpy(branch_top, "refs/heads/");
index 6610d18358bae81ac1f162ca0c71062d36664c2a..e5e4bdbe862b23aafe932da411f597b0f3b5c997 100644 (file)
@@ -60,7 +60,7 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
        struct strbuf buffer;
        int encoding_is_utf8;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        if (argc < 2)
                usage(commit_tree_usage);
index d75224381b7ad88d6bbb67db3a85bbb881cea941..07872c8ea71064c1bcf5813dd66b4a7e5feb9bec 100644 (file)
@@ -806,7 +806,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
        const char *index_file;
        int commitable;
 
-       git_config(git_status_config);
+       git_config(git_status_config, NULL);
 
        if (wt_status_use_color == -1)
                wt_status_use_color = git_use_color_default;
@@ -860,7 +860,7 @@ static void print_summary(const char *prefix, const unsigned char *sha1)
        }
 }
 
-int git_commit_config(const char *k, const char *v)
+int git_commit_config(const char *k, const char *v, void *cb)
 {
        if (!strcmp(k, "commit.template")) {
                if (!v)
@@ -869,7 +869,7 @@ int git_commit_config(const char *k, const char *v)
                return 0;
        }
 
-       return git_status_config(k, v);
+       return git_status_config(k, v, cb);
 }
 
 static const char commit_utf8_warn[] =
@@ -897,7 +897,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
        unsigned char commit_sha1[20];
        struct ref_lock *ref_lock;
 
-       git_config(git_commit_config);
+       git_config(git_commit_config, NULL);
 
        argc = parse_and_validate_options(argc, argv, builtin_commit_usage);
 
index 8ee01bdecde1ede4062a630761ce56f3366f3a14..3a441ef64868b7c477ee9c49546ef1cb39e5acad 100644 (file)
@@ -18,7 +18,7 @@ static char key_delim = ' ';
 static char term = '\n';
 static enum { T_RAW, T_INT, T_BOOL, T_BOOL_OR_INT } type = T_RAW;
 
-static int show_all_config(const char *key_, const char *value_)
+static int show_all_config(const char *key_, const char *value_, void *cb)
 {
        if (value_)
                printf("%s%c%s%c", key_, delim, value_, term);
@@ -27,7 +27,7 @@ static int show_all_config(const char *key_, const char *value_)
        return 0;
 }
 
-static int show_config(const char* key_, const char* value_)
+static int show_config(const char* key_, const char* value_, void *cb)
 {
        char value[256];
        const char *vptr = value;
@@ -121,14 +121,14 @@ static int get_value(const char* key_, const char* regex_)
        }
 
        if (do_all && system_wide)
-               git_config_from_file(show_config, system_wide);
+               git_config_from_file(show_config, system_wide, NULL);
        if (do_all && global)
-               git_config_from_file(show_config, global);
-       git_config_from_file(show_config, local);
+               git_config_from_file(show_config, global, NULL);
+       git_config_from_file(show_config, local, NULL);
        if (!do_all && !seen && global)
-               git_config_from_file(show_config, global);
+               git_config_from_file(show_config, global, NULL);
        if (!do_all && !seen && system_wide)
-               git_config_from_file(show_config, system_wide);
+               git_config_from_file(show_config, system_wide, NULL);
 
        free(key);
        if (regexp) {
@@ -182,7 +182,7 @@ static int get_color_found;
 static const char *get_color_slot;
 static char parsed_color[COLOR_MAXLEN];
 
-static int git_get_color_config(const char *var, const char *value)
+static int git_get_color_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, get_color_slot)) {
                if (!value)
@@ -218,7 +218,7 @@ static int get_color(int argc, const char **argv)
 
        get_color_found = 0;
        parsed_color[0] = '\0';
-       git_config(git_get_color_config);
+       git_config(git_get_color_config, NULL);
 
        if (!get_color_found && def_color)
                color_parse(def_color, "command line", parsed_color);
@@ -230,7 +230,8 @@ static int get_color(int argc, const char **argv)
 static int stdout_is_tty;
 static int get_colorbool_found;
 static int get_diff_color_found;
-static int git_get_colorbool_config(const char *var, const char *value)
+static int git_get_colorbool_config(const char *var, const char *value,
+               void *cb)
 {
        if (!strcmp(var, get_color_slot)) {
                get_colorbool_found =
@@ -265,7 +266,7 @@ static int get_colorbool(int argc, const char **argv)
        get_colorbool_found = -1;
        get_diff_color_found = -1;
        get_color_slot = argv[0];
-       git_config(git_get_colorbool_config);
+       git_config(git_get_colorbool_config, NULL);
 
        if (get_colorbool_found < 0) {
                if (!strcmp(get_color_slot, "color.diff"))
@@ -298,7 +299,8 @@ int cmd_config(int argc, const char **argv, const char *prefix)
                else if (!strcmp(argv[1], "--list") || !strcmp(argv[1], "-l")) {
                        if (argc != 2)
                                usage(git_config_set_usage);
-                       if (git_config(show_all_config) < 0 && file && errno)
+                       if (git_config(show_all_config, NULL) < 0 &&
+                                       file && errno)
                                die("unable to read config file %s: %s", file,
                                    strerror(errno));
                        return 0;
index e2306c162a55df30042a0bf87c9a60a1e02f5396..907392a1f3d9b548389708c8c56c20a05bb5a69c 100644 (file)
@@ -21,7 +21,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
 
        prefix = setup_git_directory_gently(&nongit);
        init_revisions(&rev, prefix);
-       git_config(git_diff_basic_config); /* no "diff" UI options */
+       git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
        rev.abbrev = 0;
 
        if (!setup_diff_no_index(&rev, argc, argv, nongit, prefix))
index 2b955deb912a38ccabb115f8d3a6c7feb815eb45..2f44ebfcdd86cde2347258dbeb1e5c4b9cab0622 100644 (file)
@@ -17,7 +17,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
        int result;
 
        init_revisions(&rev, prefix);
-       git_config(git_diff_basic_config); /* no "diff" UI options */
+       git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
        rev.abbrev = 0;
 
        argc = setup_revisions(argc, argv, &rev, NULL);
index 832797ff3bb45751758f0d629abb2cf8fa4507ad..9d2a48fd6833038fee1b608175f71a867bb9f3e6 100644 (file)
@@ -68,7 +68,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
        int read_stdin = 0;
 
        init_revisions(opt, prefix);
-       git_config(git_diff_basic_config); /* no "diff" UI options */
+       git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
        nr_sha1 = 0;
        opt->abbrev = 0;
        opt->diff = 1;
index 7c2a8412fa8cefa2f53a5f7c2035ea9f2536e1c4..583291a9c0e52ed8c8e678606be7ec02b603db60 100644 (file)
@@ -234,7 +234,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
         */
 
        prefix = setup_git_directory_gently(&nongit);
-       git_config(git_diff_ui_config);
+       git_config(git_diff_ui_config, NULL);
 
        if (diff_use_color_default == -1)
                diff_use_color_default = git_use_color_default;
index e1c56303e5cb7882bc79980c4f8e6c6791ad323b..ff759cc578ac28c8f321124b25ff7539882382b6 100755 (executable)
@@ -372,7 +372,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
        };
 
        /* we handle encodings */
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        init_revisions(&revs, prefix);
        argc = setup_revisions(argc, argv, &revs, NULL);
index c97a42739d23ac7ed90ae207e5a3770c388e66a7..de1e8d1365769c7c841749901f705c0b6a78eab3 100644 (file)
@@ -635,7 +635,7 @@ static int remove_duplicates(int nr_heads, char **heads)
        return dst;
 }
 
-static int fetch_pack_config(const char *var, const char *value)
+static int fetch_pack_config(const char *var, const char *value, void *cb)
 {
        if (strcmp(var, "fetch.unpacklimit") == 0) {
                fetch_unpack_limit = git_config_int(var, value);
@@ -647,7 +647,7 @@ static int fetch_pack_config(const char *var, const char *value)
                return 0;
        }
 
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static struct lock_file lock;
@@ -657,7 +657,7 @@ static void fetch_pack_setup(void)
        static int did_setup;
        if (did_setup)
                return;
-       git_config(fetch_pack_config);
+       git_config(fetch_pack_config, NULL);
        if (0 <= transfer_unpack_limit)
                unpack_limit = transfer_unpack_limit;
        else if (0 <= fetch_unpack_limit)
index b72cb59e6a6aab33e7170826242d82785e4fa1e4..b892621ab50346ff29a0a1335de76e3f2fbbc723 100644 (file)
@@ -10,7 +10,7 @@ static const char *fmt_merge_msg_usage =
 
 static int merge_summary;
 
-static int fmt_merge_msg_config(const char *key, const char *value)
+static int fmt_merge_msg_config(const char *key, const char *value, void *cb)
 {
        static int found_merge_log = 0;
        if (!strcmp("merge.log", key)) {
@@ -260,7 +260,7 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
        unsigned char head_sha1[20];
        const char *current_branch;
 
-       git_config(fmt_merge_msg_config);
+       git_config(fmt_merge_msg_config, NULL);
 
        while (argc > 1) {
                if (!strcmp(argv[1], "--log") || !strcmp(argv[1], "--summary"))
index 48f7d95f9784d27f023b22343929f5ad188caa4c..f5625bb9fb090f5af4dfb782dc04005a4149a5c8 100644 (file)
@@ -35,7 +35,7 @@ static const char *argv_repack[MAX_ADD] = {"repack", "-d", "-l", NULL};
 static const char *argv_prune[] = {"prune", "--expire", NULL, NULL};
 static const char *argv_rerere[] = {"rerere", "gc", NULL};
 
-static int gc_config(const char *var, const char *value)
+static int gc_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "gc.packrefs")) {
                if (value && !strcmp(value, "notbare"))
@@ -67,7 +67,7 @@ static int gc_config(const char *var, const char *value)
                prune_expire = xstrdup(value);
                return 0;
        }
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static void append_option(const char **cmd, const char *opt, int max_length)
@@ -226,7 +226,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       git_config(gc_config);
+       git_config(gc_config, NULL);
 
        if (pack_refs < 0)
                pack_refs = !is_bare_repository();
index b1f33891c36fe38d855ace535cf9218fe9603541..3a062487a7eacd01ed824b46a9124dd343cd2e60 100644 (file)
@@ -18,7 +18,7 @@ int cmd_http_fetch(int argc, const char **argv, const char *prefix)
        int get_verbosely = 0;
        int get_recover = 0;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        while (arg < argc && argv[arg][0] == '-') {
                if (argv[arg][1] == 't') {
index 3968c9911ff23717a4505ba9a02af6e27bf0b4a0..d8bdf928b1e97864722352955a2e2e37b5c00806 100644 (file)
@@ -144,7 +144,7 @@ static void copy_templates(const char *template_dir)
        strcpy(template_path + template_len, "config");
        repository_format_version = 0;
        git_config_from_file(check_repository_format_version,
-                            template_path);
+                            template_path, NULL);
        template_path[template_len] = 0;
 
        if (repository_format_version &&
@@ -198,7 +198,7 @@ static int create_default_files(const char *template_path)
         */
        copy_templates(template_path);
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        /*
         * We would have created the above under user's umask -- under
index 543855b7ad11bd0355d88bc1502030509875e0c7..9817d6fbeb69393ed321e71b6211a8630b982fab 100644 (file)
@@ -230,7 +230,7 @@ static int cmd_log_walk(struct rev_info *rev)
        return 0;
 }
 
-static int git_log_config(const char *var, const char *value)
+static int git_log_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "format.pretty"))
                return git_config_string(&fmt_pretty, var, value);
@@ -246,14 +246,14 @@ static int git_log_config(const char *var, const char *value)
                default_show_root = git_config_bool(var, value);
                return 0;
        }
-       return git_diff_ui_config(var, value);
+       return git_diff_ui_config(var, value, cb);
 }
 
 int cmd_whatchanged(int argc, const char **argv, const char *prefix)
 {
        struct rev_info rev;
 
-       git_config(git_log_config);
+       git_config(git_log_config, NULL);
 
        if (diff_use_color_default == -1)
                diff_use_color_default = git_use_color_default;
@@ -329,7 +329,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
        struct object_array_entry *objects;
        int i, count, ret = 0;
 
-       git_config(git_log_config);
+       git_config(git_log_config, NULL);
 
        if (diff_use_color_default == -1)
                diff_use_color_default = git_use_color_default;
@@ -393,7 +393,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)
 {
        struct rev_info rev;
 
-       git_config(git_log_config);
+       git_config(git_log_config, NULL);
 
        if (diff_use_color_default == -1)
                diff_use_color_default = git_use_color_default;
@@ -426,7 +426,7 @@ int cmd_log(int argc, const char **argv, const char *prefix)
 {
        struct rev_info rev;
 
-       git_config(git_log_config);
+       git_config(git_log_config, NULL);
 
        if (diff_use_color_default == -1)
                diff_use_color_default = git_use_color_default;
@@ -481,7 +481,7 @@ static void add_header(const char *value)
        extra_hdr[extra_hdr_nr++] = xstrndup(value, len);
 }
 
-static int git_format_config(const char *var, const char *value)
+static int git_format_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "format.headers")) {
                if (!value)
@@ -514,7 +514,7 @@ static int git_format_config(const char *var, const char *value)
                return 0;
        }
 
-       return git_log_config(var, value);
+       return git_log_config(var, value, cb);
 }
 
 
@@ -781,7 +781,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        char *add_signoff = NULL;
        struct strbuf buf;
 
-       git_config(git_format_config);
+       git_config(git_format_config, NULL);
        init_revisions(&rev, prefix);
        rev.commit_format = CMIT_FMT_EMAIL;
        rev.verbose_header = 1;
index dc7eab89b34fed32dbb198a9aa9a7503fc162216..75ba42246ee340634d317ec39948ed983171a42f 100644 (file)
@@ -437,7 +437,7 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
        memset(&dir, 0, sizeof(dir));
        if (prefix)
                prefix_offset = strlen(prefix);
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        for (i = 1; i < argc; i++) {
                const char *arg = argv[i];
index 7abe333ce99a3448373119c1a811341cb15f1d10..f4a75ddbc3fecb9c1690a94d39ce230e82fefd8d 100644 (file)
@@ -122,7 +122,7 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
        unsigned char sha1[20];
        struct tree *tree;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        ls_tree_prefix = prefix;
        if (prefix && *prefix)
                chomp_prefix = strlen(prefix);
index e1e094f29ef3e7f7af3b0a20047b67a70c8c3e18..97c1ff97440ec107e336df774f86aadc28f26b89 100644 (file)
@@ -968,7 +968,7 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
        /* NEEDSWORK: might want to do the optional .git/ directory
         * discovery
         */
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        def_charset = (git_commit_encoding ? git_commit_encoding : "utf-8");
        metainfo_charset = def_charset;
index 0108e22adee8b4de922a2b00b514dd4d4cf23c55..bcf9395aafb475edd22459eaf05cf5e180ca9b8f 100644 (file)
@@ -28,7 +28,7 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
        unsigned char rev1key[20], rev2key[20];
        int show_all = 0;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        while (1 < argc && argv[1][0] == '-') {
                const char *arg = argv[1];
index 46e636fdcf1cb854a486e425df05a2485d18d5d7..362c290028d68ebc2e589d424bc42cd5e8630a4e 100644 (file)
@@ -1340,7 +1340,7 @@ static struct commit *get_ref(const char *ref)
        return (struct commit *)object;
 }
 
-static int merge_config(const char *var, const char *value)
+static int merge_config(const char *var, const char *value, void *cb)
 {
        if (!strcasecmp(var, "merge.verbosity")) {
                verbosity = git_config_int(var, value);
@@ -1354,7 +1354,7 @@ static int merge_config(const char *var, const char *value)
                merge_rename_limit = git_config_int(var, value);
                return 0;
        }
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
@@ -1375,7 +1375,7 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
                        subtree_merge = 1;
        }
 
-       git_config(merge_config);
+       git_config(merge_config, NULL);
        if (getenv("GIT_MERGE_VERBOSITY"))
                verbosity = strtol(getenv("GIT_MERGE_VERBOSITY"), NULL, 10);
 
index fb906b3fc7838dd81add9d87e5001d70e83e1e48..5530e11b89c2c05c95c8ab1e82999eec0fdcc4c5 100644 (file)
@@ -81,7 +81,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
        struct path_list deleted = {NULL, 0, 0, 0};
        struct path_list changed = {NULL, 0, 0, 0};
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        newfd = hold_locked_index(&lock_file, 1);
        if (read_cache() < 0)
index 384da4db13d9ff82b9bd45e6ab26b5dbf925dc22..cde5de56fa43c1552722965343867b2baaebdaf4 100644 (file)
@@ -195,7 +195,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        argc = parse_options(argc, argv, opts, name_rev_usage, 0);
        if (!!all + !!transform_stdin + !!argc > 1) {
                error("Specify either a list, or --all, not both!");
index f43eb67016ee719d34d2e2f4ae8d77e1ec74b396..70d2f5d4161a0bb62f4734be97d0a8dd2a5098dc 100644 (file)
@@ -1760,7 +1760,7 @@ static void prepare_pack(int window, int depth)
        free(delta_list);
 }
 
-static int git_pack_config(const char *k, const char *v)
+static int git_pack_config(const char *k, const char *v, void *cb)
 {
        if(!strcmp(k, "pack.window")) {
                window = git_config_int(k, v);
@@ -1813,7 +1813,7 @@ static int git_pack_config(const char *k, const char *v)
                pack_size_limit_cfg = git_config_ulong(k, v);
                return 0;
        }
-       return git_default_config(k, v);
+       return git_default_config(k, v, cb);
 }
 
 static void read_object_list_from_stdin(void)
@@ -2033,7 +2033,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
        rp_av[1] = "--objects"; /* --thin will make it --objects-edge */
        rp_ac = 2;
 
-       git_config(git_pack_config);
+       git_config(git_pack_config, NULL);
        if (!pack_compression_seen && core_compression_seen)
                pack_compression_level = core_compression_level;
 
index 7ac30883bc72c51b0227828bef5758751e524f65..5a09e17f1ad4fe19cf4e7cc29235d14d35405168 100644 (file)
@@ -104,12 +104,10 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
        opts.src_index = &the_index;
        opts.dst_index = &the_index;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        newfd = hold_locked_index(&lock_file, 1);
 
-       git_config(git_default_config);
-
        for (i = 1; i < argc; i++) {
                const char *arg = argv[i];
 
index 280e24e1514f2989b571acc768d7067cbb223933..897d1dcac6b34e0c631c94b98c489db075e90bb2 100644 (file)
@@ -329,7 +329,7 @@ static int collect_reflog(const char *ref, const unsigned char *sha1, int unused
        return 0;
 }
 
-static int reflog_expire_config(const char *var, const char *value)
+static int reflog_expire_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "gc.reflogexpire")) {
                if (!value)
@@ -343,7 +343,7 @@ static int reflog_expire_config(const char *var, const char *value)
                default_reflog_expire_unreachable = approxidate(value);
                return 0;
        }
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
@@ -352,7 +352,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
        unsigned long now = time(NULL);
        int i, status, do_all;
 
-       git_config(reflog_expire_config);
+       git_config(reflog_expire_config, NULL);
 
        save_commit_buffer = 0;
        do_all = status = 0;
index 8b63619ef08a2ac3d96000908fe4986396ddd6a2..99a34dfe86a79df353d3c094cb2ebf71fdca1cc0 100644 (file)
@@ -153,7 +153,7 @@ struct branch_info {
 
 static struct path_list branch_list;
 
-static int config_read_branches(const char *key, const char *value)
+static int config_read_branches(const char *key, const char *value, void *cb)
 {
        if (!prefixcmp(key, "branch.")) {
                char *name;
@@ -200,7 +200,7 @@ static void read_branches(void)
 {
        if (branch_list.nr)
                return;
-       git_config(config_read_branches);
+       git_config(config_read_branches, NULL);
        sort_path_list(&branch_list);
 }
 
@@ -514,7 +514,7 @@ struct remote_group {
        struct path_list *list;
 } remote_group;
 
-static int get_remote_group(const char *key, const char *value)
+static int get_remote_group(const char *key, const char *value, void *cb)
 {
        if (!prefixcmp(key, "remotes.") &&
                        !strcmp(key + 8, remote_group.name)) {
@@ -546,7 +546,7 @@ static int update(int argc, const char **argv)
        remote_group.list = &list;
        for (i = 1; i < argc; i++) {
                remote_group.name = argv[i];
-               result = git_config(get_remote_group);
+               result = git_config(get_remote_group, NULL);
        }
 
        if (!result && !list.nr  && argc == 2 && !strcmp(argv[1], "default"))
index c607aade637423f0129167163fa4055b08546248..5c811423cc1234d933cff013f9923b45f19dc6fa 100644 (file)
@@ -339,7 +339,7 @@ static int do_plain_rerere(struct path_list *rr, int fd)
        return write_rr(rr, fd);
 }
 
-static int git_rerere_config(const char *var, const char *value)
+static int git_rerere_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "gc.rerereresolved"))
                cutoff_resolve = git_config_int(var, value);
@@ -348,7 +348,7 @@ static int git_rerere_config(const char *var, const char *value)
        else if (!strcmp(var, "rerere.enabled"))
                rerere_enabled = git_config_bool(var, value);
        else
-               return git_default_config(var, value);
+               return git_default_config(var, value, cb);
        return 0;
 }
 
@@ -376,7 +376,7 @@ static int setup_rerere(struct path_list *merge_rr)
 {
        int fd;
 
-       git_config(git_rerere_config);
+       git_config(git_rerere_config, NULL);
        if (!is_rerere_enabled())
                return -1;
 
index 79424bb26efb4525b6bc2080e639b51d59eaabd9..e32ddd90ac9e6f1bdf755b268d1a7c8b034c9e63 100644 (file)
@@ -186,7 +186,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        argc = parse_options(argc, argv, options, git_reset_usage,
                                                PARSE_OPT_KEEP_DASHDASH);
index b474527402262fa821a53bc2cc0ca53b74014d8e..83a7b1349e06dbf1a355888272d9b13a7d4c22c4 100644 (file)
@@ -591,7 +591,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
        int bisect_find_all = 0;
        int quiet = 0;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        init_revisions(&revs, prefix);
        revs.abbrev = 0;
        revs.commit_format = CMIT_FMT_UNSPECIFIED;
index ab3e85054e174d2d328c625f1db744854b62f5f7..a7860ed75ac4a7b1895bfe088e34a39b24448f57 100644 (file)
@@ -387,7 +387,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
                return cmd_parseopt(argc - 1, argv + 1, prefix);
 
        prefix = setup_git_directory();
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        for (i = 1; i < argc; i++) {
                const char *arg = argv[i];
 
index 2b57525d7234086bdf2022d13fa405e5007627fb..0270f9b85a8229d30ab3fab5ce73661f383b005e 100644 (file)
@@ -269,7 +269,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)
        const char *message, *encoding;
        const char *defmsg = xstrdup(git_path("MERGE_MSG"));
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        me = action == REVERT ? "revert" : "cherry-pick";
        setenv(GIT_REFLOG_ACTION, me, 0);
        parse_args(argc, argv);
index c0a8bb6cf5675d671a2cca50bf72d5c60f155313..22c9bd1c6cf2d372e0262506cc1e21daebdf579a 100644 (file)
@@ -144,7 +144,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
        const char **pathspec;
        char *seen;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        newfd = hold_locked_index(&lock_file, 1);
 
index 019abd3527e7c573c69900a58313749e2ef2280a..ee4269dd33aa0b2229eaac0ce7b75f7893447b0f 100644 (file)
@@ -533,7 +533,7 @@ static void append_one_rev(const char *av)
        die("bad sha1 reference %s", av);
 }
 
-static int git_show_branch_config(const char *var, const char *value)
+static int git_show_branch_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "showbranch.default")) {
                if (!value)
@@ -547,7 +547,7 @@ static int git_show_branch_config(const char *var, const char *value)
                return 0;
        }
 
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static int omit_in_dense(struct commit *commit, struct commit **rev, int n)
@@ -611,7 +611,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
        int reflog = 0;
        const char *reflog_base = NULL;
 
-       git_config(git_show_branch_config);
+       git_config(git_show_branch_config, NULL);
 
        /* If nothing is specified, try the default first */
        if (ac == 1 && default_num) {
index d33982b967e7665ae79fb186435d9ed9aabb907b..b49bdb6900f2c49b55880f9f220597bf3f156810 100644 (file)
@@ -35,7 +35,7 @@ int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        argc = parse_options(argc, argv, options, git_symbolic_ref_usage, 0);
        if (msg &&!*msg)
                die("Refusing to perform update with empty message");
index 129ff57f11d2cdfdacc6be9685736ada07caef7f..e675206de38f0709b4c07e1667d791bf9b6704cb 100644 (file)
@@ -256,7 +256,7 @@ static void set_signingkey(const char *value)
                die("signing key value too long (%.10s...)", value);
 }
 
-static int git_tag_config(const char *var, const char *value)
+static int git_tag_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "user.signingkey")) {
                if (!value)
@@ -265,7 +265,7 @@ static int git_tag_config(const char *var, const char *value)
                return 0;
        }
 
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static void write_tag_body(int fd, const unsigned char *sha1)
@@ -408,7 +408,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       git_config(git_tag_config);
+       git_config(git_tag_config, NULL);
 
        argc = parse_options(argc, argv, options, git_tag_usage, 0);
 
index fecf0be7796f34fbb06a6bbbe61e9e3d042f6780..85043d1fde917e67746fb1ee106ce2cf78f3d161 100644 (file)
@@ -493,7 +493,7 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix)
        int i;
        unsigned char sha1[20];
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        quiet = !isatty(2);
 
index d4c85c0cbc6fec3d526cc57d8b748b1f1a82b9a1..9e0d7ab11ee01c6a1def223820038a94113f348c 100644 (file)
@@ -567,7 +567,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
        int lock_error = 0;
        struct lock_file *lock_file;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        /* We can't free this memory, it becomes part of a linked list parsed atexit() */
        lock_file = xcalloc(1, sizeof(struct lock_file));
index e90737c350402fec8937a9e343485e1c71411f55..93c127196d272d99d8af24a5fbc7ac89efdbb3d4 100644 (file)
@@ -22,7 +22,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        argc = parse_options(argc, argv, options, git_update_ref_usage, 0);
        if (msg && !*msg)
                die("Refusing to perform update with empty message.");
index 4958bbbf11f5f796feedfa7480b827029f912d01..4c515a0570ec2b05e5dca8156d885a70b922251e 100644 (file)
@@ -55,7 +55,7 @@ int cmd_verify_pack(int argc, const char **argv, const char *prefix)
        int no_more_options = 0;
        int nothing_done = 1;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        while (1 < argc) {
                if (!no_more_options && argv[1][0] == '-') {
                        if (!strcmp("-v", argv[1]))
index db81496b464e253341a42e01eb72d6845e87199c..92eaa89a45eff2e76e531a914bdccca5fafe98b0 100644 (file)
@@ -90,7 +90,7 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)
 {
        int i = 1, verbose = 0, had_error = 0;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        if (argc == 1)
                usage(builtin_verify_tag_usage);
index e838d01233eb1d6cfaa0885c6b37c8726079b0ac..c2187997447df64948577d8a9a78f4462239b369 100644 (file)
@@ -18,7 +18,7 @@ int cmd_write_tree(int argc, const char **argv, const char *unused_prefix)
        unsigned char sha1[20];
        const char *me = "git-write-tree";
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        while (1 < argc) {
                const char *arg = argv[1];
                if (!strcmp(arg, "--missing-ok"))
diff --git a/cache.h b/cache.h
index 943bee9e7da6ce2b903ab9331b35430ecb09644e..eab1a172fe4b2a9d735dc480879fd1034da7942a 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -723,10 +723,10 @@ extern int matches_pack_name(struct packed_git *p, const char *name);
 /* Dumb servers support */
 extern int update_server_info(int);
 
-typedef int (*config_fn_t)(const char *, const char *);
-extern int git_default_config(const char *, const char *);
-extern int git_config_from_file(config_fn_t fn, const char *);
-extern int git_config(config_fn_t fn);
+typedef int (*config_fn_t)(const char *, const char *, void *);
+extern int git_default_config(const char *, const char *, void *);
+extern int git_config_from_file(config_fn_t fn, const char *, void *);
+extern int git_config(config_fn_t fn, void *);
 extern int git_parse_long(const char *, long *);
 extern int git_parse_ulong(const char *, unsigned long *);
 extern int git_config_int(const char *, const char *);
@@ -738,7 +738,7 @@ extern int git_config_set(const char *, const char *);
 extern int git_config_set_multivar(const char *, const char *, const char *, int);
 extern int git_config_rename_section(const char *, const char *);
 extern const char *git_etc_gitconfig(void);
-extern int check_repository_format_version(const char *var, const char *value);
+extern int check_repository_format_version(const char *var, const char *value, void *cb);
 extern int git_env_bool(const char *, int);
 extern int git_config_system(void);
 extern int git_config_global(void);
diff --git a/color.c b/color.c
index 12a6453f90eb4ce2b39f85762bf3acd1cff2b9f2..fc0b72ad59b13e4bd86372e5e81b4f400c99d26e 100644 (file)
--- a/color.c
+++ b/color.c
@@ -145,14 +145,14 @@ int git_config_colorbool(const char *var, const char *value, int stdout_is_tty)
        return 0;
 }
 
-int git_color_default_config(const char *var, const char *value)
+int git_color_default_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "color.ui")) {
                git_use_color_default = git_config_colorbool(var, value, -1);
                return 0;
        }
 
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static int color_vfprintf(FILE *fp, const char *color, const char *fmt,
diff --git a/color.h b/color.h
index ecda5569a2cccabaf16fcf0aad3bce57dfb3aca4..6cf5c88aaf8d0e38e2853e6fd212e3cdd6c180cb 100644 (file)
--- a/color.h
+++ b/color.h
@@ -13,7 +13,7 @@ extern int git_use_color_default;
 /*
  * Use this instead of git_default_config if you need the value of color.ui.
  */
-int git_color_default_config(const char *var, const char *value);
+int git_color_default_config(const char *var, const char *value, void *cb);
 
 int git_config_colorbool(const char *var, const char *value, int stdout_is_tty);
 void color_parse(const char *var, const char *value, char *dst);
index 5195de10c9289a25053756ce799e654d5e01483e..c2f2bbb000cd003002c1bd346e6be6c9d3ef5c2d 100644 (file)
--- a/config.c
+++ b/config.c
@@ -111,7 +111,7 @@ static inline int iskeychar(int c)
        return isalnum(c) || c == '-';
 }
 
-static int get_value(config_fn_t fn, char *name, unsigned int len)
+static int get_value(config_fn_t fn, void *data, char *name, unsigned int len)
 {
        int c;
        char *value;
@@ -139,7 +139,7 @@ static int get_value(config_fn_t fn, char *name, unsigned int len)
                if (!value)
                        return -1;
        }
-       return fn(name, value);
+       return fn(name, value, data);
 }
 
 static int get_extended_base_var(char *name, int baselen, int c)
@@ -197,7 +197,7 @@ static int get_base_var(char *name)
        }
 }
 
-static int git_parse_file(config_fn_t fn)
+static int git_parse_file(config_fn_t fn, void *data)
 {
        int comment = 0;
        int baselen = 0;
@@ -228,7 +228,7 @@ static int git_parse_file(config_fn_t fn)
                if (!isalpha(c))
                        break;
                var[baselen] = tolower(c);
-               if (get_value(fn, var, baselen+1) < 0)
+               if (get_value(fn, data, var, baselen+1) < 0)
                        break;
        }
        die("bad config file line %d in %s", config_linenr, config_file_name);
@@ -332,7 +332,7 @@ int git_config_string(const char **dest, const char *var, const char *value)
        return 0;
 }
 
-int git_default_config(const char *var, const char *value)
+int git_default_config(const char *var, const char *value, void *dummy)
 {
        /* This needs a better name */
        if (!strcmp(var, "core.filemode")) {
@@ -516,7 +516,7 @@ int git_default_config(const char *var, const char *value)
        return 0;
 }
 
-int git_config_from_file(config_fn_t fn, const char *filename)
+int git_config_from_file(config_fn_t fn, const char *filename, void *data)
 {
        int ret;
        FILE *f = fopen(filename, "r");
@@ -527,7 +527,7 @@ int git_config_from_file(config_fn_t fn, const char *filename)
                config_file_name = filename;
                config_linenr = 1;
                config_file_eof = 0;
-               ret = git_parse_file(fn);
+               ret = git_parse_file(fn, data);
                fclose(f);
                config_file_name = NULL;
        }
@@ -565,7 +565,7 @@ int git_config_global(void)
        return !git_env_bool("GIT_CONFIG_NOGLOBAL", 0);
 }
 
-int git_config(config_fn_t fn)
+int git_config(config_fn_t fn, void *data)
 {
        int ret = 0;
        char *repo_config = NULL;
@@ -578,7 +578,8 @@ int git_config(config_fn_t fn)
        filename = getenv(CONFIG_ENVIRONMENT);
        if (!filename) {
                if (git_config_system() && !access(git_etc_gitconfig(), R_OK))
-                       ret += git_config_from_file(fn, git_etc_gitconfig());
+                       ret += git_config_from_file(fn, git_etc_gitconfig(),
+                               data);
                home = getenv("HOME");
                filename = getenv(CONFIG_LOCAL_ENVIRONMENT);
                if (!filename)
@@ -588,11 +589,11 @@ int git_config(config_fn_t fn)
        if (git_config_global() && home) {
                char *user_config = xstrdup(mkpath("%s/.gitconfig", home));
                if (!access(user_config, R_OK))
-                       ret = git_config_from_file(fn, user_config);
+                       ret = git_config_from_file(fn, user_config, data);
                free(user_config);
        }
 
-       ret += git_config_from_file(fn, filename);
+       ret += git_config_from_file(fn, filename, data);
        free(repo_config);
        return ret;
 }
@@ -622,7 +623,7 @@ static int matches(const char* key, const char* value)
                  !regexec(store.value_regex, value, 0, NULL, 0)));
 }
 
-static int store_aux(const char* key, const char* value)
+static int store_aux(const char* key, const char* value, void *cb)
 {
        const char *ep;
        size_t section_len;
@@ -951,7 +952,7 @@ int git_config_set_multivar(const char* key, const char* value,
                 * As a side effect, we make sure to transform only a valid
                 * existing config file.
                 */
-               if (git_config_from_file(store_aux, config_filename)) {
+               if (git_config_from_file(store_aux, config_filename, NULL)) {
                        error("invalid config file %s", config_filename);
                        free(store.key);
                        if (store.value_regex != NULL) {
index d12b105970bca82017998cae52f5807629736bb9..e92af2973565197f2f001c45c6059f9a838fe289 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -360,7 +360,8 @@ static char *git_proxy_command;
 static const char *rhost_name;
 static int rhost_len;
 
-static int git_proxy_command_options(const char *var, const char *value)
+static int git_proxy_command_options(const char *var, const char *value,
+               void *cb)
 {
        if (!strcmp(var, "core.gitproxy")) {
                const char *for_pos;
@@ -404,7 +405,7 @@ static int git_proxy_command_options(const char *var, const char *value)
                return 0;
        }
 
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static int git_use_proxy(const char *host)
@@ -412,7 +413,7 @@ static int git_use_proxy(const char *host)
        rhost_name = host;
        rhost_len = strlen(host);
        git_proxy_command = getenv("GIT_PROXY_COMMAND");
-       git_config(git_proxy_command_options);
+       git_config(git_proxy_command_options, NULL);
        rhost_name = NULL;
        return (git_proxy_command && *git_proxy_command);
 }
index d8c94cb3edeceff7a79b2f5e6ba7cad250e6b301..1c66844783ec3baa1373b3f0c41ea080bc7354fe 100644 (file)
--- a/convert.c
+++ b/convert.c
@@ -323,7 +323,7 @@ static struct convert_driver {
        char *clean;
 } *user_convert, **user_convert_tail;
 
-static int read_convert_config(const char *var, const char *value)
+static int read_convert_config(const char *var, const char *value, void *cb)
 {
        const char *ep, *name;
        int namelen;
@@ -385,7 +385,7 @@ static void setup_convert_check(struct git_attr_check *check)
                attr_ident = git_attr("ident", 5);
                attr_filter = git_attr("filter", 6);
                user_convert_tail = &user_convert;
-               git_config(read_convert_config);
+               git_config(read_convert_config, NULL);
        }
        check[0].attr = attr_crlf;
        check[1].attr = attr_ident;
index 2b4a6f145cc0f37c95da31df23dfde3ba7fa63a7..63cd12cd9c1909edbaab49aea066ff6fe03c3542 100644 (file)
--- a/daemon.c
+++ b/daemon.c
@@ -306,7 +306,7 @@ struct daemon_service {
 static struct daemon_service *service_looking_at;
 static int service_enabled;
 
-static int git_daemon_config(const char *var, const char *value)
+static int git_daemon_config(const char *var, const char *value, void *cb)
 {
        if (!prefixcmp(var, "daemon.") &&
            !strcmp(var + 7, service_looking_at->config_name)) {
@@ -356,7 +356,7 @@ static int run_service(struct interp *itable, struct daemon_service *service)
        if (service->overridable) {
                service_looking_at = service;
                service_enabled = -1;
-               git_config(git_daemon_config);
+               git_config(git_daemon_config, NULL);
                if (0 <= service_enabled)
                        enabled = service_enabled;
        }
diff --git a/diff.c b/diff.c
index d57bc299ee7499dc8f448220e894cc6e6a1d8aca..62fdc5492bbe5dacab6bc5b615a76ba5cd9de760 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -129,7 +129,7 @@ static int parse_funcname_pattern(const char *var, const char *ep, const char *v
  * never be affected by the setting of diff.renames
  * the user happens to have in the configuration file.
  */
-int git_diff_ui_config(const char *var, const char *value)
+int git_diff_ui_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "diff.renamelimit")) {
                diff_rename_limit_default = git_config_int(var, value);
@@ -166,10 +166,10 @@ int git_diff_ui_config(const char *var, const char *value)
                        return parse_lldiff_command(var, ep, value);
        }
 
-       return git_diff_basic_config(var, value);
+       return git_diff_basic_config(var, value, cb);
 }
 
-int git_diff_basic_config(const char *var, const char *value)
+int git_diff_basic_config(const char *var, const char *value, void *cb)
 {
        if (!prefixcmp(var, "diff.color.") || !prefixcmp(var, "color.diff.")) {
                int slot = parse_diff_color_slot(var, 11);
@@ -190,7 +190,7 @@ int git_diff_basic_config(const char *var, const char *value)
                }
        }
 
-       return git_color_default_config(var, value);
+       return git_color_default_config(var, value, cb);
 }
 
 static char *quote_two(const char *one, const char *two)
diff --git a/diff.h b/diff.h
index 1dfe1f98b1dbe66fd3c7c5cd5a999c28172cd8cc..b0b700a5f6ec71174c40285f376fc1b2bfb34e3a 100644 (file)
--- a/diff.h
+++ b/diff.h
@@ -182,8 +182,8 @@ extern void diff_unmerge(struct diff_options *,
 #define DIFF_SETUP_USE_CACHE           2
 #define DIFF_SETUP_USE_SIZE_CACHE      4
 
-extern int git_diff_basic_config(const char *var, const char *value);
-extern int git_diff_ui_config(const char *var, const char *value);
+extern int git_diff_basic_config(const char *var, const char *value, void *cb);
+extern int git_diff_ui_config(const char *var, const char *value, void *cb);
 extern int diff_use_color_default;
 extern void diff_setup(struct diff_options *);
 extern int diff_opt_parse(struct diff_options *, const char **, int);
index caea684338031431dc3177716654a1a289faa9a3..93119bbd9484504d19f069a5c0038fb1e2f40a26 100644 (file)
@@ -2352,7 +2352,7 @@ static void import_marks(const char *input_file)
        fclose(f);
 }
 
-static int git_pack_config(const char *k, const char *v)
+static int git_pack_config(const char *k, const char *v, void *cb)
 {
        if (!strcmp(k, "pack.depth")) {
                max_depth = git_config_int(k, v);
@@ -2370,7 +2370,7 @@ static int git_pack_config(const char *k, const char *v)
                pack_compression_seen = 1;
                return 0;
        }
-       return git_default_config(k, v);
+       return git_default_config(k, v, cb);
 }
 
 static const char fast_import_usage[] =
@@ -2381,7 +2381,7 @@ int main(int argc, const char **argv)
        unsigned int i, show_stats = 1;
 
        setup_git_directory();
-       git_config(git_pack_config);
+       git_config(git_pack_config, NULL);
        if (!pack_compression_seen && core_compression_seen)
                pack_compression_level = core_compression_level;
 
index 0a7ac2fe2adf820a171898b9e51b245c063018cc..48d522368454d2663d5cc075045d87f120058ced 100644 (file)
@@ -65,7 +65,7 @@ int main(int argc, char **argv)
        int hashstdin = 0;
        int stdin_paths = 0;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        for (i = 1 ; i < argc; i++) {
                if (!no_more_flags && argv[i][0] == '-') {
diff --git a/help.c b/help.c
index af80979fcb177faace150a7cfa7cb66daeb59f49..d89d43796f3ee9d3689131d48861967048f5c5d7 100644 (file)
--- a/help.c
+++ b/help.c
@@ -252,7 +252,7 @@ static int add_man_viewer_info(const char *var, const char *value)
        return 0;
 }
 
-static int git_help_config(const char *var, const char *value)
+static int git_help_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "help.format")) {
                if (!value)
@@ -269,7 +269,7 @@ static int git_help_config(const char *var, const char *value)
        if (!prefixcmp(var, "man."))
                return add_man_viewer_info(var, value);
 
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 /* most GUI terminals set COLUMNS (although some don't export it) */
@@ -641,7 +641,7 @@ int cmd_help(int argc, const char **argv, const char *prefix)
        const char *alias;
 
        setup_git_directory_gently(&nongit);
-       git_config(git_help_config);
+       git_config(git_help_config, NULL);
 
        argc = parse_options(argc, argv, builtin_help_options,
                        builtin_help_usage, 0);
diff --git a/http.c b/http.c
index acf746a12da0f0b5e3fe3f097a6626e17da8852c..2a21ccbb76351d108301d2b9c334e2c5a5feacd9 100644 (file)
--- a/http.c
+++ b/http.c
@@ -90,7 +90,7 @@ static void process_curl_messages(void)
 }
 #endif
 
-static int http_options(const char *var, const char *value)
+static int http_options(const char *var, const char *value, void *cb)
 {
        if (!strcmp("http.sslverify", var)) {
                if (curl_ssl_verify == -1) {
@@ -169,7 +169,7 @@ static int http_options(const char *var, const char *value)
        }
 
        /* Fall back on the default ones */
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static CURL* get_curl_handle(void)
@@ -263,7 +263,7 @@ void http_init(struct remote *remote)
        if (low_speed_time != NULL)
                curl_low_speed_time = strtol(low_speed_time, NULL, 10);
 
-       git_config(http_options);
+       git_config(http_options, NULL);
 
        if (curl_ssl_verify == -1)
                curl_ssl_verify = 1;
index db6559725e6867131800b6682348ebbf896ddbf5..1ec131092109aa3fbed3cd20f10b56a864584a94 100644 (file)
@@ -1247,7 +1247,7 @@ static imap_server_conf_t server =
 static char *imap_folder;
 
 static int
-git_imap_config(const char *key, const char *val)
+git_imap_config(const char *key, const char *val, void *cb)
 {
        char imap_key[] = "imap.";
 
@@ -1296,7 +1296,7 @@ main(int argc, char **argv)
        /* init the random number generator */
        arc4_init();
 
-       git_config( git_imap_config );
+       git_config(git_imap_config, NULL);
 
        if (!imap_folder) {
                fprintf( stderr, "no imap store specified\n" );
index 9c0c27813fd6736218d1caaed6248e4ae4d388b5..aaba9443ccbab1315e67c0e6bedaa82afe5464fc 100644 (file)
@@ -765,7 +765,7 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
        }
 }
 
-static int git_index_pack_config(const char *k, const char *v)
+static int git_index_pack_config(const char *k, const char *v, void *cb)
 {
        if (!strcmp(k, "pack.indexversion")) {
                pack_idx_default_version = git_config_int(k, v);
@@ -773,7 +773,7 @@ static int git_index_pack_config(const char *k, const char *v)
                        die("bad pack.indexversion=%d", pack_idx_default_version);
                return 0;
        }
-       return git_default_config(k, v);
+       return git_default_config(k, v, cb);
 }
 
 int main(int argc, char **argv)
@@ -786,7 +786,7 @@ int main(int argc, char **argv)
        struct pack_idx_entry **idx_objects;
        unsigned char sha1[20];
 
-       git_config(git_index_pack_config);
+       git_config(git_index_pack_config, NULL);
 
        for (i = 1; i < argc; i++) {
                char *arg = argv[i];
index 5ae74331bc2c55638bc5bf1bbfdc7e340199cb01..9837c842a3f215ebee7cbe9690e42e216fb5c76c 100644 (file)
@@ -225,7 +225,7 @@ static int ll_ext_merge(const struct ll_merge_driver *fn,
 static struct ll_merge_driver *ll_user_merge, **ll_user_merge_tail;
 static const char *default_ll_merge;
 
-static int read_merge_config(const char *var, const char *value)
+static int read_merge_config(const char *var, const char *value, void *cb)
 {
        struct ll_merge_driver *fn;
        const char *ep, *name;
@@ -309,7 +309,7 @@ static void initialize_ll_merge(void)
        if (ll_user_merge_tail)
                return;
        ll_user_merge_tail = &ll_user_merge;
-       git_config(read_merge_config);
+       git_config(read_merge_config, NULL);
 }
 
 static const struct ll_merge_driver *find_ll_merge_driver(const char *merge_attr)
diff --git a/pager.c b/pager.c
index ca002f9f791b6cdb8257836be9e13fe648afa1cc..dbd941421bf90bb1c4b6ad26ba46869f57d15cd8 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -33,7 +33,7 @@ void setup_pager(void)
                return;
        if (!pager) {
                if (!pager_program)
-                       git_config(git_default_config);
+                       git_config(git_default_config, NULL);
                pager = pager_program;
        }
        if (!pager)
index 828d49001d6c8494ede35e4ebbcea4fe482802dd..b26f2e3a41c870d1b73690e389dbd74a8b8a40a0 100644 (file)
@@ -19,7 +19,7 @@ static int report_status;
 static char capabilities[] = " report-status delete-refs ";
 static int capabilities_sent;
 
-static int receive_pack_config(const char *var, const char *value)
+static int receive_pack_config(const char *var, const char *value, void *cb)
 {
        if (strcmp(var, "receive.denynonfastforwards") == 0) {
                deny_non_fast_forwards = git_config_bool(var, value);
@@ -41,7 +41,7 @@ static int receive_pack_config(const char *var, const char *value)
                return 0;
        }
 
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 static int show_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
@@ -489,7 +489,7 @@ int main(int argc, char **argv)
        if (is_repository_shallow())
                die("attempt to push into a shallow repository");
 
-       git_config(receive_pack_config);
+       git_config(receive_pack_config, NULL);
 
        if (0 <= transfer_unpack_limit)
                unpack_limit = transfer_unpack_limit;
index 75a12c0762160dd877d0b6f63f8ec47228b7fee4..91e3b112bb5ffa151a8ede9391d3bd88ea4d3500 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -298,7 +298,7 @@ static void read_branches_file(struct remote *remote)
        remote->fetch_tags = 1; /* always auto-follow */
 }
 
-static int handle_config(const char *key, const char *value)
+static int handle_config(const char *key, const char *value, void *cb)
 {
        const char *name;
        const char *subkey;
@@ -420,7 +420,7 @@ static void read_config(void)
                current_branch =
                        make_branch(head_ref + strlen("refs/heads/"), 0);
        }
-       git_config(handle_config);
+       git_config(handle_config, NULL);
        alias_all_urls();
 }
 
diff --git a/setup.c b/setup.c
index b8fd476395db782bf942a548b87242b3a9f990f4..d630e374e7c03b934de14adceb93c9c327796e6d 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -300,7 +300,7 @@ void setup_work_tree(void)
 
 static int check_repository_format_gently(int *nongit_ok)
 {
-       git_config(check_repository_format_version);
+       git_config(check_repository_format_version, NULL);
        if (GIT_REPO_VERSION < repository_format_version) {
                if (!nongit_ok)
                        die ("Expected git repo version <= %d, found %d",
@@ -524,7 +524,7 @@ int git_config_perm(const char *var, const char *value)
        return i & 0666;
 }
 
-int check_repository_format_version(const char *var, const char *value)
+int check_repository_format_version(const char *var, const char *value, void *cb)
 {
        if (strcmp(var, "core.repositoryformatversion") == 0)
                repository_format_version = git_config_int(var, value);
index 65c66eb0bf34efee6485db3dbf8af11788c394f4..bcdc8bbb3b44a43aa43db6035a31478158e070af 100644 (file)
@@ -31,7 +31,7 @@ int main(int argc, char **argv)
                die("Not a valid object name %s", argv[1]);
 
        setup_git_directory();
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        puts(create_temp_file(sha1));
        return 0;
diff --git a/var.c b/var.c
index c20ac919bdbe73c8cd7657d468d2dfbccf6d3aa2..724ba87a7c9ccb16bc506fc3f25710a4b78e3006 100644 (file)
--- a/var.c
+++ b/var.c
@@ -39,13 +39,13 @@ static const char *read_var(const char *var)
        return val;
 }
 
-static int show_config(const char *var, const char *value)
+static int show_config(const char *var, const char *value, void *cb)
 {
        if (value)
                printf("%s=%s\n", var, value);
        else
                printf("%s\n", var);
-       return git_default_config(var, value);
+       return git_default_config(var, value, cb);
 }
 
 int main(int argc, char **argv)
@@ -60,11 +60,11 @@ int main(int argc, char **argv)
        val = NULL;
 
        if (strcmp(argv[1], "-l") == 0) {
-               git_config(show_config);
+               git_config(show_config, NULL);
                list_vars();
                return 0;
        }
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
        val = read_var(argv[1]);
        if (!val)
                usage(var_usage);
index 6e6516cd874a92376a672dcdc181aed6a3b5636c..5b4d74c1f3f4c24aa23cf564a16592d188449da1 100644 (file)
@@ -367,7 +367,7 @@ void wt_status_print(struct wt_status *s)
        }
 }
 
-int git_status_config(const char *k, const char *v)
+int git_status_config(const char *k, const char *v, void *cb)
 {
        if (!strcmp(k, "status.submodulesummary")) {
                int is_bool;
@@ -391,5 +391,5 @@ int git_status_config(const char *k, const char *v)
                wt_status_relative_paths = git_config_bool(k, v);
                return 0;
        }
-       return git_color_default_config(k, v);
+       return git_color_default_config(k, v, cb);
 }
index f0675fdff33420ba42f3a700501003a43afda376..597c7ea988634409f920c86008f5ba70910722f9 100644 (file)
@@ -28,7 +28,7 @@ struct wt_status {
        const char *prefix;
 };
 
-int git_status_config(const char *var, const char *value);
+int git_status_config(const char *var, const char *value, void *cb);
 extern int wt_status_use_color;
 extern int wt_status_relative_paths;
 void wt_status_prepare(struct wt_status *s);