Skip to content

Commit

Permalink
Merge branch 'ta/config-set-2'
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Junio C Hamano committed Sep 11, 2014
2 parents 7f346e9 + b35b10d commit 554913d
Show file tree
Hide file tree
Showing 15 changed files with 152 additions and 313 deletions.
25 changes: 6 additions & 19 deletions alias.c
Original file line number Diff line number Diff line change
@@ -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
Expand Down
12 changes: 3 additions & 9 deletions archive.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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();

Expand Down
27 changes: 7 additions & 20 deletions branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
12 changes: 5 additions & 7 deletions builtin/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand Down
51 changes: 20 additions & 31 deletions builtin/gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
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;
pack_refs = git_config_bool("gc.packrefs", value);
}
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)
Expand Down Expand Up @@ -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();
Expand Down
26 changes: 4 additions & 22 deletions daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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'",
Expand Down
44 changes: 21 additions & 23 deletions fast-import.c
Original file line number Diff line number Diff line change
Expand Up @@ -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[] =
Expand Down Expand Up @@ -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;

Expand Down
35 changes: 8 additions & 27 deletions fetch-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -869,42 +869,23 @@ 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;
}

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;
}
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);

return git_default_config(var, value, cb);
git_config(git_default_config, NULL);
}

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)
Expand Down
Loading

0 comments on commit 554913d

Please sign in to comment.