Merge branch 'ta/config-set-2'

Update git_config() users with callback functions for a very narrow
scope with calls to config-set API that lets us query a single
variable.

* ta/config-set-2:
  builtin/apply.c: replace `git_config()` with `git_config_get_string_const()`
  merge-recursive.c: replace `git_config()` with `git_config_get_int()`
  ll-merge.c: refactor `read_merge_config()` to use `git_config_string()`
  fast-import.c: replace `git_config()` with `git_config_get_*()` family
  branch.c: replace `git_config()` with `git_config_get_string()
  alias.c: replace `git_config()` with `git_config_get_string()`
  imap-send.c: replace `git_config()` with `git_config_get_*()` family
  pager.c: replace `git_config()` with `git_config_get_value()`
  builtin/gc.c: replace `git_config()` with `git_config_get_*()` family
  rerere.c: replace `git_config()` with `git_config_get_*()` family
  fetchpack.c: replace `git_config()` with `git_config_get_*()` family
  archive.c: replace `git_config()` with `git_config_get_bool()` family
  read-cache.c: replace `git_config()` with `git_config_get_*()` family
  http-backend.c: replace `git_config()` with `git_config_get_bool()` family
  daemon.c: replace `git_config()` with `git_config_get_bool()` family
This commit is contained in:
Junio C Hamano 2014-09-11 10:33:26 -07:00
commit 554913daf4
15 changed files with 154 additions and 315 deletions

25
alias.c
View file

@ -1,26 +1,13 @@
#include "cache.h"
static const char *alias_key;
static char *alias_val;
static int alias_lookup_cb(const char *k, const char *v, void *cb)
{
const char *name;
if (skip_prefix(k, "alias.", &name) && !strcmp(name, alias_key)) {
if (!v)
return config_error_nonbool(k);
alias_val = xstrdup(v);
return 0;
}
return 0;
}
char *alias_lookup(const char *alias)
{
alias_key = alias;
alias_val = NULL;
git_config(alias_lookup_cb, NULL);
return alias_val;
char *v = NULL;
struct strbuf key = STRBUF_INIT;
strbuf_addf(&key, "alias.%s", alias);
git_config_get_string(key.buf, &v);
strbuf_release(&key);
return v;
}
#define SPLIT_CMDLINE_BAD_ENDING 1

View file

@ -402,14 +402,6 @@ static int parse_archive_args(int argc, const char **argv,
return argc;
}
static int git_default_archive_config(const char *var, const char *value,
void *cb)
{
if (!strcmp(var, "uploadarchive.allowunreachable"))
remote_allow_unreachable = git_config_bool(var, value);
return git_default_config(var, value, cb);
}
int write_archive(int argc, const char **argv, const char *prefix,
int setup_prefix, const char *name_hint, int remote)
{
@ -420,7 +412,9 @@ int write_archive(int argc, const char **argv, const char *prefix,
if (setup_prefix && prefix == NULL)
prefix = setup_git_directory_gently(&nongit);
git_config(git_default_archive_config, NULL);
git_config_get_bool("uploadarchive.allowunreachable", &remote_allow_unreachable);
git_config(git_default_config, NULL);
init_tar_archiver();
init_zip_archiver();

View file

@ -140,30 +140,17 @@ static int setup_tracking(const char *new_ref, const char *orig_ref,
return 0;
}
struct branch_desc_cb {
const char *config_name;
const char *value;
};
static int read_branch_desc_cb(const char *var, const char *value, void *cb)
{
struct branch_desc_cb *desc = cb;
if (strcmp(desc->config_name, var))
return 0;
free((char *)desc->value);
return git_config_string(&desc->value, var, value);
}
int read_branch_desc(struct strbuf *buf, const char *branch_name)
{
struct branch_desc_cb cb;
char *v = NULL;
struct strbuf name = STRBUF_INIT;
strbuf_addf(&name, "branch.%s.description", branch_name);
cb.config_name = name.buf;
cb.value = NULL;
git_config(read_branch_desc_cb, &cb);
if (cb.value)
strbuf_addstr(buf, cb.value);
if (git_config_get_string(name.buf, &v)) {
strbuf_release(&name);
return -1;
}
strbuf_addstr(buf, v);
free(v);
strbuf_release(&name);
return 0;
}

View file

@ -4274,13 +4274,11 @@ static int apply_patch(int fd, const char *filename, int options)
return 0;
}
static int git_apply_config(const char *var, const char *value, void *cb)
static void git_apply_config(void)
{
if (!strcmp(var, "apply.whitespace"))
return git_config_string(&apply_default_whitespace, var, value);
else if (!strcmp(var, "apply.ignorewhitespace"))
return git_config_string(&apply_default_ignorewhitespace, var, value);
return git_default_config(var, value, cb);
git_config_get_string_const("apply.whitespace", &apply_default_whitespace);
git_config_get_string_const("apply.ignorewhitespace", &apply_default_ignorewhitespace);
git_config(git_default_config, NULL);
}
static int option_parse_exclude(const struct option *opt,
@ -4428,7 +4426,7 @@ int cmd_apply(int argc, const char **argv, const char *prefix_)
prefix = prefix_;
prefix_length = prefix ? strlen(prefix) : 0;
git_config(git_apply_config, NULL);
git_apply_config();
if (apply_default_whitespace)
parse_whitespace_option(apply_default_whitespace);
if (apply_default_ignorewhitespace)

View file

@ -55,44 +55,33 @@ static void remove_pidfile_on_signal(int signo)
raise(signo);
}
static int gc_config(const char *var, const char *value, void *cb)
static void gc_config(void)
{
if (!strcmp(var, "gc.packrefs")) {
const char *value;
if (!git_config_get_value("gc.packrefs", &value)) {
if (value && !strcmp(value, "notbare"))
pack_refs = -1;
else
pack_refs = git_config_bool(var, value);
return 0;
pack_refs = git_config_bool("gc.packrefs", value);
}
if (!strcmp(var, "gc.aggressivewindow")) {
aggressive_window = git_config_int(var, value);
return 0;
}
if (!strcmp(var, "gc.aggressivedepth")) {
aggressive_depth = git_config_int(var, value);
return 0;
}
if (!strcmp(var, "gc.auto")) {
gc_auto_threshold = git_config_int(var, value);
return 0;
}
if (!strcmp(var, "gc.autopacklimit")) {
gc_auto_pack_limit = git_config_int(var, value);
return 0;
}
if (!strcmp(var, "gc.autodetach")) {
detach_auto = git_config_bool(var, value);
return 0;
}
if (!strcmp(var, "gc.pruneexpire")) {
if (value && strcmp(value, "now")) {
git_config_get_int("gc.aggressivewindow", &aggressive_window);
git_config_get_int("gc.aggressivedepth", &aggressive_depth);
git_config_get_int("gc.auto", &gc_auto_threshold);
git_config_get_int("gc.autopacklimit", &gc_auto_pack_limit);
git_config_get_bool("gc.autodetach", &detach_auto);
if (!git_config_get_string_const("gc.pruneexpire", &prune_expire)) {
if (strcmp(prune_expire, "now")) {
unsigned long now = approxidate("now");
if (approxidate(value) >= now)
return error(_("Invalid %s: '%s'"), var, value);
if (approxidate(prune_expire) >= now) {
git_die_config("gc.pruneexpire", _("Invalid gc.pruneexpire: '%s'"),
prune_expire);
}
}
return git_config_string(&prune_expire, var, value);
}
return git_default_config(var, value, cb);
git_config(git_default_config, NULL);
}
static int too_many_loose_objects(void)
@ -301,7 +290,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
argv_array_pushl(&prune, "prune", "--expire", NULL );
argv_array_pushl(&rerere, "rerere", "gc", NULL);
git_config(gc_config, NULL);
gc_config();
if (pack_refs < 0)
pack_refs = !is_bare_repository();

View file

@ -230,23 +230,6 @@ struct daemon_service {
int overridable;
};
static struct daemon_service *service_looking_at;
static int service_enabled;
static int git_daemon_config(const char *var, const char *value, void *cb)
{
const char *service;
if (skip_prefix(var, "daemon.", &service) &&
!strcmp(service, service_looking_at->config_name)) {
service_enabled = git_config_bool(var, value);
return 0;
}
/* we are not interested in parsing any other configuration here */
return 0;
}
static int daemon_error(const char *dir, const char *msg)
{
if (!informative_errors)
@ -324,6 +307,7 @@ static int run_service(const char *dir, struct daemon_service *service)
{
const char *path;
int enabled = service->enabled;
struct strbuf var = STRBUF_INIT;
loginfo("Request %s for '%s'", service->name, dir);
@ -354,11 +338,9 @@ static int run_service(const char *dir, struct daemon_service *service)
}
if (service->overridable) {
service_looking_at = service;
service_enabled = -1;
git_config(git_daemon_config, NULL);
if (0 <= service_enabled)
enabled = service_enabled;
strbuf_addf(&var, "daemon.%s", service->config_name);
git_config_get_bool(var.buf, &enabled);
strbuf_release(&var);
}
if (!enabled) {
logerror("'%s': service not enabled for '%s'",

View file

@ -3274,36 +3274,34 @@ static void parse_option(const char *option)
die("This version of fast-import does not support option: %s", option);
}
static int git_pack_config(const char *k, const char *v, void *cb)
static void git_pack_config(void)
{
if (!strcmp(k, "pack.depth")) {
max_depth = git_config_int(k, v);
int indexversion_value;
unsigned long packsizelimit_value;
if (!git_config_get_ulong("pack.depth", &max_depth)) {
if (max_depth > MAX_DEPTH)
max_depth = MAX_DEPTH;
return 0;
}
if (!strcmp(k, "pack.compression")) {
int level = git_config_int(k, v);
if (level == -1)
level = Z_DEFAULT_COMPRESSION;
else if (level < 0 || level > Z_BEST_COMPRESSION)
die("bad pack compression level %d", level);
pack_compression_level = level;
if (!git_config_get_int("pack.compression", &pack_compression_level)) {
if (pack_compression_level == -1)
pack_compression_level = Z_DEFAULT_COMPRESSION;
else if (pack_compression_level < 0 ||
pack_compression_level > Z_BEST_COMPRESSION)
git_die_config("pack.compression",
"bad pack compression level %d", pack_compression_level);
pack_compression_seen = 1;
return 0;
}
if (!strcmp(k, "pack.indexversion")) {
pack_idx_opts.version = git_config_int(k, v);
if (!git_config_get_int("pack.indexversion", &indexversion_value)) {
pack_idx_opts.version = indexversion_value;
if (pack_idx_opts.version > 2)
die("bad pack.indexversion=%"PRIu32,
pack_idx_opts.version);
return 0;
git_die_config("pack.indexversion",
"bad pack.indexversion=%"PRIu32, pack_idx_opts.version);
}
if (!strcmp(k, "pack.packsizelimit")) {
max_packsize = git_config_ulong(k, v);
return 0;
}
return git_default_config(k, v, cb);
if (!git_config_get_ulong("pack.packsizelimit", &packsizelimit_value))
max_packsize = packsizelimit_value;
git_config(git_default_config, NULL);
}
static const char fast_import_usage[] =
@ -3356,7 +3354,7 @@ int main(int argc, char **argv)
setup_git_directory();
reset_pack_idx_option(&pack_idx_opts);
git_config(git_pack_config, NULL);
git_pack_config();
if (!pack_compression_seen && core_compression_seen)
pack_compression_level = core_compression_level;

View file

@ -869,34 +869,15 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
return ref;
}
static int fetch_pack_config(const char *var, const char *value, void *cb)
static void fetch_pack_config(void)
{
if (strcmp(var, "fetch.unpacklimit") == 0) {
fetch_unpack_limit = git_config_int(var, value);
return 0;
}
git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit);
git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit);
git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta);
git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects);
git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects);
if (strcmp(var, "transfer.unpacklimit") == 0) {
transfer_unpack_limit = git_config_int(var, value);
return 0;
}
if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
prefer_ofs_delta = git_config_bool(var, value);
return 0;
}
if (!strcmp(var, "fetch.fsckobjects")) {
fetch_fsck_objects = git_config_bool(var, value);
return 0;
}
if (!strcmp(var, "transfer.fsckobjects")) {
transfer_fsck_objects = git_config_bool(var, value);
return 0;
}
return git_default_config(var, value, cb);
git_config(git_default_config, NULL);
}
static void fetch_pack_setup(void)
@ -904,7 +885,7 @@ static void fetch_pack_setup(void)
static int did_setup;
if (did_setup)
return;
git_config(fetch_pack_config, NULL);
fetch_pack_config();
if (0 <= transfer_unpack_limit)
unpack_limit = transfer_unpack_limit;
else if (0 <= fetch_unpack_limit)

View file

@ -219,29 +219,22 @@ static void get_idx_file(char *name)
send_local_file("application/x-git-packed-objects-toc", name);
}
static int http_config(const char *var, const char *value, void *cb)
static void http_config(void)
{
const char *p;
int i, value = 0;
struct strbuf var = STRBUF_INIT;
if (!strcmp(var, "http.getanyfile")) {
getanyfile = git_config_bool(var, value);
return 0;
git_config_get_bool("http.getanyfile", &getanyfile);
for (i = 0; i < ARRAY_SIZE(rpc_service); i++) {
struct rpc_service *svc = &rpc_service[i];
strbuf_addf(&var, "http.%s", svc->config_name);
if (!git_config_get_bool(var.buf, &value))
svc->enabled = value;
strbuf_reset(&var);
}
if (skip_prefix(var, "http.", &p)) {
int i;
for (i = 0; i < ARRAY_SIZE(rpc_service); i++) {
struct rpc_service *svc = &rpc_service[i];
if (!strcmp(p, svc->config_name)) {
svc->enabled = git_config_bool(var, value);
return 0;
}
}
}
/* we are not interested in parsing any other configuration here */
return 0;
strbuf_release(&var);
}
static struct rpc_service *select_service(const char *name)
@ -627,7 +620,7 @@ int main(int argc, char **argv)
access("git-daemon-export-ok", F_OK) )
not_found("Repository not exported: '%s'", dir);
git_config(http_config, NULL);
http_config();
cmd->imp(cmd_arg);
return 0;
}

View file

@ -1308,43 +1308,35 @@ static int split_msg(struct strbuf *all_msgs, struct strbuf *msg, int *ofs)
static char *imap_folder;
static int git_imap_config(const char *key, const char *val, void *cb)
static void git_imap_config(void)
{
if (!skip_prefix(key, "imap.", &key))
return 0;
const char *val = NULL;
/* check booleans first, and barf on others */
if (!strcmp("sslverify", key))
server.ssl_verify = git_config_bool(key, val);
else if (!strcmp("preformattedhtml", key))
server.use_html = git_config_bool(key, val);
else if (!val)
return config_error_nonbool(key);
git_config_get_bool("imap.sslverify", &server.ssl_verify);
git_config_get_bool("imap.preformattedhtml", &server.use_html);
git_config_get_string("imap.folder", &imap_folder);
if (!strcmp("folder", key)) {
imap_folder = xstrdup(val);
} else if (!strcmp("host", key)) {
if (starts_with(val, "imap:"))
val += 5;
else if (starts_with(val, "imaps:")) {
val += 6;
server.use_ssl = 1;
if (!git_config_get_value("imap.host", &val)) {
if (!val) {
git_die_config("imap.host", "Missing value for 'imap.host'");
} else {
if (starts_with(val, "imap:"))
val += 5;
else if (starts_with(val, "imaps:")) {
val += 6;
server.use_ssl = 1;
}
if (starts_with(val, "//"))
val += 2;
server.host = xstrdup(val);
}
if (starts_with(val, "//"))
val += 2;
server.host = xstrdup(val);
} else if (!strcmp("user", key))
server.user = xstrdup(val);
else if (!strcmp("pass", key))
server.pass = xstrdup(val);
else if (!strcmp("port", key))
server.port = git_config_int(key, val);
else if (!strcmp("tunnel", key))
server.tunnel = xstrdup(val);
else if (!strcmp("authmethod", key))
server.auth_method = xstrdup(val);
}
return 0;
git_config_get_string("imap.user", &server.user);
git_config_get_string("imap.pass", &server.pass);
git_config_get_int("imap.port", &server.port);
git_config_get_string("imap.tunnel", &server.tunnel);
git_config_get_string("imap.authmethod", &server.auth_method);
}
int main(int argc, char **argv)
@ -1365,7 +1357,7 @@ int main(int argc, char **argv)
usage(imap_send_usage);
setup_git_directory_gently(&nongit_ok);
git_config(git_imap_config, NULL);
git_imap_config();
if (!server.port)
server.port = server.use_ssl ? 993 : 143;

View file

@ -225,11 +225,8 @@ static int read_merge_config(const char *var, const char *value, void *cb)
const char *key, *name;
int namelen;
if (!strcmp(var, "merge.default")) {
if (value)
default_ll_merge = xstrdup(value);
return 0;
}
if (!strcmp(var, "merge.default"))
return git_config_string(&default_ll_merge, var, value);
/*
* We are not interested in anything but "merge.<name>.variable";
@ -254,12 +251,8 @@ static int read_merge_config(const char *var, const char *value, void *cb)
ll_user_merge_tail = &(fn->next);
}
if (!strcmp("name", key)) {
if (!value)
return error("%s: lacks value", var);
fn->description = xstrdup(value);
return 0;
}
if (!strcmp("name", key))
return git_config_string(&fn->description, var, value);
if (!strcmp("driver", key)) {
if (!value)
@ -285,12 +278,8 @@ static int read_merge_config(const char *var, const char *value, void *cb)
return 0;
}
if (!strcmp("recursive", key)) {
if (!value)
return error("%s: lacks value", var);
fn->recursive = xstrdup(value);
return 0;
}
if (!strcmp("recursive", key))
return git_config_string(&fn->recursive, var, value);
return 0;
}

View file

@ -2026,22 +2026,12 @@ int merge_recursive_generic(struct merge_options *o,
return clean ? 0 : 1;
}
static int merge_recursive_config(const char *var, const char *value, void *cb)
static void merge_recursive_config(struct merge_options *o)
{
struct merge_options *o = cb;
if (!strcmp(var, "merge.verbosity")) {
o->verbosity = git_config_int(var, value);
return 0;
}
if (!strcmp(var, "diff.renamelimit")) {
o->diff_rename_limit = git_config_int(var, value);
return 0;
}
if (!strcmp(var, "merge.renamelimit")) {
o->merge_rename_limit = git_config_int(var, value);
return 0;
}
return git_xmerge_config(var, value, cb);
git_config_get_int("merge.verbosity", &o->verbosity);
git_config_get_int("diff.renamelimit", &o->diff_rename_limit);
git_config_get_int("merge.renamelimit", &o->merge_rename_limit);
git_config(git_xmerge_config, NULL);
}
void init_merge_options(struct merge_options *o)
@ -2052,7 +2042,7 @@ void init_merge_options(struct merge_options *o)
o->diff_rename_limit = -1;
o->merge_rename_limit = -1;
o->renormalize = 0;
git_config(merge_recursive_config, o);
merge_recursive_config(o);
if (getenv("GIT_MERGE_VERBOSITY"))
o->verbosity =
strtol(getenv("GIT_MERGE_VERBOSITY"), NULL, 10);

44
pager.c
View file

@ -6,12 +6,6 @@
#define DEFAULT_PAGER "less"
#endif
struct pager_config {
const char *cmd;
int want;
char *value;
};
/*
* This is split up from the rest of git so that we can do
* something different on Windows.
@ -155,30 +149,22 @@ int decimal_width(int number)
return width;
}
static int pager_command_config(const char *var, const char *value, void *data)
{
struct pager_config *c = data;
if (starts_with(var, "pager.") && !strcmp(var + 6, c->cmd)) {
int b = git_config_maybe_bool(var, value);
if (b >= 0)
c->want = b;
else {
c->want = 1;
c->value = xstrdup(value);
}
}
return 0;
}
/* returns 0 for "no pager", 1 for "use pager", and -1 for "not specified" */
int check_pager_config(const char *cmd)
{
struct pager_config c;
c.cmd = cmd;
c.want = -1;
c.value = NULL;
git_config(pager_command_config, &c);
if (c.value)
pager_program = c.value;
return c.want;
int want = -1;
struct strbuf key = STRBUF_INIT;
const char *value = NULL;
strbuf_addf(&key, "pager.%s", cmd);
if (!git_config_get_value(key.buf, &value)) {
int b = git_config_maybe_bool(key.buf, value);
if (b >= 0)
want = b;
else {
want = 1;
pager_program = xstrdup(value);
}
}
strbuf_release(&key);
return want;
}

View file

@ -1246,24 +1246,16 @@ static struct cache_entry *refresh_cache_entry(struct cache_entry *ce,
#define INDEX_FORMAT_DEFAULT 3
static int index_format_config(const char *var, const char *value, void *cb)
{
unsigned int *version = cb;
if (!strcmp(var, "index.version")) {
*version = git_config_int(var, value);
return 0;
}
return 1;
}
static unsigned int get_index_format_default(void)
{
char *envversion = getenv("GIT_INDEX_VERSION");
char *endp;
int value;
unsigned int version = INDEX_FORMAT_DEFAULT;
if (!envversion) {
git_config(index_format_config, &version);
if (!git_config_get_int("index.version", &value))
version = value;
if (version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) {
warning(_("index.version set, but the value is invalid.\n"
"Using version %i"), INDEX_FORMAT_DEFAULT);

View file

@ -573,15 +573,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 +602,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 +695,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 +702,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 +717,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);