static int gc_config(const char *var, const char *value, void *cb) { if (!strcmp(var, "gc.packrefs")) { 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.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")) { unsigned long now = approxidate("now"); if (approxidate(value) >= now) return error(_("Invalid %s: '%s'"), var, value); } return git_config_string(&prune_expire, var, value); } return git_default_config(var, value, cb); }
static int receive_pack_config(const char *var, const char *value, void *cb) { if (strcmp(var, "receive.denydeletes") == 0) { deny_deletes = git_config_bool(var, value); return 0; } if (strcmp(var, "receive.denynonfastforwards") == 0) { deny_non_fast_forwards = git_config_bool(var, value); return 0; } if (strcmp(var, "receive.unpacklimit") == 0) { receive_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, "receive.fsckobjects") == 0) { receive_fsck_objects = git_config_bool(var, value); return 0; } if (!strcmp(var, "receive.denycurrentbranch")) { deny_current_branch = parse_deny_action(var, value); return 0; } return git_default_config(var, value, cb); }
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); 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; } return git_default_config(var, value, cb); }
static int gc_config(const char *var, const char *value) { if (!strcmp(var, "gc.packrefs")) { 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.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.pruneexpire")) { if (!value) return config_error_nonbool(var); if (strcmp(value, "now")) { unsigned long now = approxidate("now"); if (approxidate(value) >= now) return error("Invalid %s: '%s'", var, value); } prune_expire = xstrdup(value); return 0; } return git_default_config(var, value); }
static int receive_pack_config(const char *var, const char *value, void *cb) { if (strcmp(var, "receive.denydeletes") == 0) { deny_deletes = git_config_bool(var, value); return 0; } if (strcmp(var, "receive.denynonfastforwards") == 0) { deny_non_fast_forwards = git_config_bool(var, value); return 0; } if (strcmp(var, "receive.unpacklimit") == 0) { receive_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, "receive.fsckobjects") == 0) { receive_fsck_objects = git_config_bool(var, value); return 0; } if (strcmp(var, "transfer.fsckobjects") == 0) { transfer_fsck_objects = git_config_bool(var, value); return 0; } if (!strcmp(var, "receive.denycurrentbranch")) { deny_current_branch = parse_deny_action(var, value); return 0; } if (strcmp(var, "receive.denydeletecurrent") == 0) { deny_delete_current = parse_deny_action(var, value); return 0; } if (strcmp(var, "repack.usedeltabaseoffset") == 0) { prefer_ofs_delta = git_config_bool(var, value); return 0; } if (strcmp(var, "receive.updateserverinfo") == 0) { auto_update_server_info = git_config_bool(var, value); return 0; } if (strcmp(var, "receive.autogc") == 0) { auto_gc = git_config_bool(var, value); return 0; } return git_default_config(var, value, cb); }
static int git_rerere_gc_config(const char *var, const char *value, void *cb) { if (!strcmp(var, "gc.rerereresolved")) cutoff_resolve = git_config_int(var, value); else if (!strcmp(var, "gc.rerereunresolved")) cutoff_noresolve = git_config_int(var, value); else return git_default_config(var, value, cb); return 0; }
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); return 0; } if (strcmp(var, "transfer.unpacklimit") == 0) { transfer_unpack_limit = git_config_int(var, value); return 0; } return git_default_config(var, value, cb); }
int parse_submodule_fetchjobs(const char *var, const char *value) { int fetchjobs = git_config_int(var, value); if (fetchjobs < 0) die(_("negative values not allowed for submodule.fetchjobs")); return fetchjobs; }
char *normalize_value(const char *key, const char *value) { char *normalized; if (!value) return NULL; if (type == T_RAW) normalized = xstrdup(value); else { normalized = xmalloc(64); if (type == T_INT) { int v = git_config_int(key, value); sprintf(normalized, "%d", v); } else if (type == T_BOOL) sprintf(normalized, "%s", git_config_bool(key, value) ? "true" : "false"); else if (type == T_BOOL_OR_INT) { int is_bool, v; v = git_config_bool_or_int(key, value, &is_bool); if (!is_bool) sprintf(normalized, "%d", v); else sprintf(normalized, "%s", v ? "true" : "false"); } } return normalized; }
static int check_repo_format(const char *var, const char *value, void *vdata) { struct repository_format *data = vdata; const char *ext; if (strcmp(var, "core.repositoryformatversion") == 0) data->version = git_config_int(var, value); else if (skip_prefix(var, "extensions.", &ext)) { /* * record any known extensions here; otherwise, * we fall through to recording it as unknown, and * check_repository_format will complain */ if (!strcmp(ext, "noop")) ; else if (!strcmp(ext, "preciousobjects")) data->precious_objects = git_config_bool(var, value); else string_list_append(&data->unknown_extensions, ext); } else if (strcmp(var, "core.bare") == 0) { data->is_bare = git_config_bool(var, value); } else if (strcmp(var, "core.worktree") == 0) { if (!value) return config_error_nonbool(var); data->work_tree = xstrdup(value); } return 0; }
static int populate_opts_cb(const char *key, const char *value, void *data) { struct replay_opts *opts = data; int error_flag = 1; if (!value) error_flag = 0; else if (!strcmp(key, "options.no-commit")) opts->no_commit = git_config_bool_or_int(key, value, &error_flag); else if (!strcmp(key, "options.edit")) opts->edit = git_config_bool_or_int(key, value, &error_flag); else if (!strcmp(key, "options.signoff")) opts->signoff = git_config_bool_or_int(key, value, &error_flag); else if (!strcmp(key, "options.record-origin")) opts->record_origin = git_config_bool_or_int(key, value, &error_flag); else if (!strcmp(key, "options.allow-ff")) opts->allow_ff = git_config_bool_or_int(key, value, &error_flag); else if (!strcmp(key, "options.mainline")) opts->mainline = git_config_int(key, value); else if (!strcmp(key, "options.strategy")) git_config_string(&opts->strategy, key, value); else if (!strcmp(key, "options.gpg-sign")) git_config_string(&opts->gpg_sign, key, value); else if (!strcmp(key, "options.strategy-option")) { ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc); opts->xopts[opts->xopts_nr++] = xstrdup(value); } else return error(_("Invalid key: %s"), key); if (!error_flag) return error(_("Invalid value for %s: %s"), key, value); return 0; }
static int merge_config(const char *var, const char *value, void *cb) { if (!strcasecmp(var, "merge.verbosity")) { verbosity = git_config_int(var, value); return 0; } if (!strcasecmp(var, "diff.renamelimit")) { diff_rename_limit = git_config_int(var, value); return 0; } if (!strcasecmp(var, "merge.renamelimit")) { merge_rename_limit = git_config_int(var, value); return 0; } return git_default_config(var, value, cb); }
static int upload_pack_config(const char *var, const char *value, void *unused) { if (!strcmp("uploadpack.allowtipsha1inwant", var)) { if (git_config_bool(var, value)) allow_unadvertised_object_request |= ALLOW_TIP_SHA1; else allow_unadvertised_object_request &= ~ALLOW_TIP_SHA1; } else if (!strcmp("uploadpack.allowreachablesha1inwant", var)) { if (git_config_bool(var, value)) allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1; else allow_unadvertised_object_request &= ~ALLOW_REACHABLE_SHA1; } else if (!strcmp("uploadpack.allowanysha1inwant", var)) { if (git_config_bool(var, value)) allow_unadvertised_object_request |= ALLOW_ANY_SHA1; else allow_unadvertised_object_request &= ~ALLOW_ANY_SHA1; } else if (!strcmp("uploadpack.keepalive", var)) { keepalive = git_config_int(var, value); if (!keepalive) keepalive = -1; } else if (current_config_scope() != CONFIG_SCOPE_REPO) { if (!strcmp("uploadpack.packobjectshook", var)) return git_config_string(&pack_objects_hook, var, value); } else if (!strcmp("uploadpack.allowfilter", var)) { allow_filter = git_config_bool(var, value); } return parse_hide_refs_config(var, value, "uploadpack"); }
static int grep_cmd_config(const char *var, const char *value, void *cb) { int st = grep_config(var, value, cb); if (git_color_default_config(var, value, cb) < 0) st = -1; if (!strcmp(var, "grep.threads")) { num_threads = git_config_int(var, value); if (num_threads < 0) die(_("invalid number of threads specified (%d) for %s"), num_threads, var); #ifdef NO_PTHREADS else if (num_threads && num_threads != 1) { /* * TRANSLATORS: %s is the configuration * variable for tweaking threads, currently * grep.threads */ warning(_("no threads support, ignoring %s"), var); num_threads = 0; } #endif } if (!strcmp(var, "submodule.recurse")) recurse_submodules = git_config_bool(var, value); return st; }
static int check_repo_format(const char *var, const char *value, void *cb) { if (strcmp(var, "core.repositoryformatversion") == 0) repository_format_version = git_config_int(var, value); else if (strcmp(var, "core.sharedrepository") == 0) shared_repository = git_config_perm(var, value); return 0; }
static int merge_recursive_config(const char *var, const char *value, void *cb) { struct merge_options *o = cb; if (!strcasecmp(var, "merge.verbosity")) { o->verbosity = git_config_int(var, value); return 0; } if (!strcasecmp(var, "diff.renamelimit")) { o->diff_rename_limit = git_config_int(var, value); return 0; } if (!strcasecmp(var, "merge.renamelimit")) { o->merge_rename_limit = git_config_int(var, value); return 0; } return git_xmerge_config(var, value, cb); }
int git_diff_config(const char *var, const char *value) { if (!strcmp(var, "diff.renamelimit")) { diff_rename_limit_default = git_config_int(var, value); return 0; } return git_default_config(var, value); }
static int show_config(const char *key_, const char *value_, void *cb) { char value[256]; const char *vptr = value; int must_free_vptr = 0; int dup_error = 0; if (!use_key_regexp && strcmp(key_, key)) return 0; if (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0)) return 0; if (regexp != NULL && (do_not_match ^ !!regexec(regexp, (value_?value_:""), 0, NULL, 0))) return 0; if (show_keys) { if (value_) printf("%s%c", key_, key_delim); else printf("%s", key_); } if (seen && !do_all) dup_error = 1; if (types == TYPE_INT) sprintf(value, "%d", git_config_int(key_, value_?value_:"")); else if (types == TYPE_BOOL) vptr = git_config_bool(key_, value_) ? "true" : "false"; else if (types == TYPE_BOOL_OR_INT) { int is_bool, v; v = git_config_bool_or_int(key_, value_, &is_bool); if (is_bool) vptr = v ? "true" : "false"; else sprintf(value, "%d", v); } else if (types == TYPE_PATH) { git_config_pathname(&vptr, key_, value_); must_free_vptr = 1; } else vptr = value_?value_:""; seen++; if (dup_error) { error("More than one value for the key %s: %s", key_, vptr); } else printf("%s%c", vptr, term); if (must_free_vptr) /* If vptr must be freed, it's a pointer to a * dynamically allocated buffer, it's safe to cast to * const. */ free((char *)vptr); return 0; }
static int http_options(const char *var, const char *value, void *cb) { if (!strcmp("http.sslverify", var)) { curl_ssl_verify = git_config_bool(var, value); return 0; } if (!strcmp("http.sslcert", var)) return git_config_string(&ssl_cert, var, value); #if LIBCURL_VERSION_NUM >= 0x070902 if (!strcmp("http.sslkey", var)) return git_config_string(&ssl_key, var, value); #endif #if LIBCURL_VERSION_NUM >= 0x070908 if (!strcmp("http.sslcapath", var)) return git_config_string(&ssl_capath, var, value); #endif if (!strcmp("http.sslcainfo", var)) return git_config_string(&ssl_cainfo, var, value); #ifdef USE_CURL_MULTI if (!strcmp("http.maxrequests", var)) { max_requests = git_config_int(var, value); return 0; } #endif if (!strcmp("http.lowspeedlimit", var)) { curl_low_speed_limit = (long)git_config_int(var, value); return 0; } if (!strcmp("http.lowspeedtime", var)) { curl_low_speed_time = (long)git_config_int(var, value); return 0; } if (!strcmp("http.noepsv", var)) { curl_ftp_no_epsv = git_config_bool(var, value); return 0; } if (!strcmp("http.proxy", var)) return git_config_string(&curl_http_proxy, var, value); /* Fall back on the default ones */ return git_default_config(var, value, cb); }
static int git_unknown_cmd_config(const char *var, const char *value, void *cb) { if (!strcmp(var, "help.autocorrect")) autocorrect = git_config_int(var,value); /* Also use aliases for command lookup */ if (!prefixcmp(var, "alias.")) add_cmdname(&aliases, var + 6, strlen(var + 6)); return git_default_config(var, value, cb); }
int git_config_bool_or_int(const char *name, const char *value, int *is_bool) { int v = git_config_maybe_bool(name, value); if (0 <= v) { *is_bool = 1; return v; } *is_bool = 0; return git_config_int(name, value); }
static int upload_pack_config(const char *var, const char *value, void *unused) { if (!strcmp("uploadpack.allowtipsha1inwant", var)) allow_tip_sha1_in_want = git_config_bool(var, value); else if (!strcmp("uploadpack.keepalive", var)) { keepalive = git_config_int(var, value); if (!keepalive) keepalive = -1; } return parse_hide_refs_config(var, value, "uploadpack"); }
int git_config_bool(const char *name, const char *value) { if (!value) return 1; if (!*value) return 0; if (!strcasecmp(value, "true")) return 1; if (!strcasecmp(value, "false")) return 0; return git_config_int(name, value) != 0; }
static int git_tar_config(const char *var, const char *value, void *cb) { if (!strcmp(var, "tar.umask")) { if (value && !strcmp(value, "user")) { tar_umask = umask(0); umask(tar_umask); } else { tar_umask = git_config_int(var, value); } return 0; } return tar_filter_config(var, value, cb); }
int git_config_bool_or_int(const char *name, const char *value, int *is_bool) { *is_bool = 1; if (!value) return 1; if (!*value) return 0; if (!strcasecmp(value, "true") || !strcasecmp(value, "yes") || !strcasecmp(value, "on")) return 1; if (!strcasecmp(value, "false") || !strcasecmp(value, "no") || !strcasecmp(value, "off")) return 0; *is_bool = 0; return git_config_int(name, value); }
int submodule_config(const char *var, const char *value, void *cb) { if (!strcmp(var, "submodule.fetchjobs")) { parallel_jobs = git_config_int(var, value); if (parallel_jobs < 0) die(_("negative values not allowed for submodule.fetchJobs")); return 0; } else if (starts_with(var, "submodule.")) return parse_submodule_config_option(var, value); else if (!strcmp(var, "fetch.recursesubmodules")) { config_fetch_recurse_submodules = parse_fetch_recurse_submodules_arg(var, value); return 0; } return 0; }
static int grep_cmd_config(const char *var, const char *value, void *cb) { int st = grep_config(var, value, cb); if (git_color_default_config(var, value, cb) < 0) st = -1; if (!strcmp(var, "grep.threads")) { num_threads = git_config_int(var, value); if (num_threads < 0) die(_("invalid number of threads specified (%d) for %s"), num_threads, var); } return st; }
static int show_config(const char* key_, const char* value_) { char value[256]; const char *vptr = value; int dup_error = 0; if (!use_key_regexp && strcmp(key_, key)) return 0; if (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0)) return 0; if (regexp != NULL && (do_not_match ^ !!regexec(regexp, (value_?value_:""), 0, NULL, 0))) return 0; if (show_keys) { if (value_) printf("%s%c", key_, key_delim); else printf("%s", key_); } if (seen && !do_all) dup_error = 1; if (type == T_INT) sprintf(value, "%d", git_config_int(key_, value_?value_:"")); else if (type == T_BOOL) vptr = git_config_bool(key_, value_) ? "true" : "false"; else if (type == T_BOOL_OR_INT) { int is_bool, v; v = git_config_bool_or_int(key_, value_, &is_bool); if (is_bool) vptr = v ? "true" : "false"; else sprintf(value, "%d", v); } else vptr = value_?value_:""; seen++; if (dup_error) { error("More than one value for the key %s: %s", key_, vptr); } else printf("%s%c", vptr, term); return 0; }
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); else if (strcmp(var, "core.sharedrepository") == 0) shared_repository = git_config_perm(var, value); else if (strcmp(var, "core.bare") == 0) { is_bare_repository_cfg = git_config_bool(var, value); if (is_bare_repository_cfg == 1) inside_work_tree = -1; } else if (strcmp(var, "core.worktree") == 0) { if (!value) return config_error_nonbool(var); free(git_work_tree_cfg); git_work_tree_cfg = xstrdup(value); inside_work_tree = -1; } return 0; }
static int upload_pack_config(const char *var, const char *value, void *unused) { if (!strcmp("uploadpack.allowtipsha1inwant", var)) { if (git_config_bool(var, value)) allow_unadvertised_object_request |= ALLOW_TIP_SHA1; else allow_unadvertised_object_request &= ~ALLOW_TIP_SHA1; } else if (!strcmp("uploadpack.allowreachablesha1inwant", var)) { if (git_config_bool(var, value)) allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1; else allow_unadvertised_object_request &= ~ALLOW_REACHABLE_SHA1; } else if (!strcmp("uploadpack.keepalive", var)) { keepalive = git_config_int(var, value); if (!keepalive) keepalive = -1; } return parse_hide_refs_config(var, value, "uploadpack"); }