mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Merge branch 'ps/config-wo-the-repository' into pw/3.0-commentchar-auto-deprecation
* ps/config-wo-the-repository: (21 commits) config: fix sign comparison warnings config: move Git config parsing into "environment.c" config: remove unused `the_repository` wrappers config: drop `git_config_set_multivar()` wrapper config: drop `git_config_get_multivar_gently()` wrapper config: drop `git_config_set_multivar_in_file_gently()` wrapper config: drop `git_config_set_in_file_gently()` wrapper config: drop `git_config_set()` wrapper config: drop `git_config_set_gently()` wrapper config: drop `git_config_set_in_file()` wrapper config: drop `git_config_get_bool()` wrapper config: drop `git_config_get_ulong()` wrapper config: drop `git_config_get_int()` wrapper config: drop `git_config_get_string()` wrapper config: drop `git_config_get_string()` wrapper config: drop `git_config_get_string_multi()` wrapper config: drop `git_config_get_value()` wrapper config: drop `git_config_get_value()` wrapper config: drop `git_config_get()` wrapper config: drop `git_config_clear()` wrapper ...
This commit is contained in:
555
config.c
555
config.c
@@ -6,12 +6,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define USE_THE_REPOSITORY_VARIABLE
|
||||
#define DISABLE_SIGN_COMPARE_WARNINGS
|
||||
|
||||
#include "git-compat-util.h"
|
||||
#include "abspath.h"
|
||||
#include "advice.h"
|
||||
#include "date.h"
|
||||
#include "branch.h"
|
||||
#include "config.h"
|
||||
@@ -20,11 +16,8 @@
|
||||
#include "environment.h"
|
||||
#include "gettext.h"
|
||||
#include "git-zlib.h"
|
||||
#include "ident.h"
|
||||
#include "repository.h"
|
||||
#include "lockfile.h"
|
||||
#include "mailmap.h"
|
||||
#include "attr.h"
|
||||
#include "exec-cmd.h"
|
||||
#include "strbuf.h"
|
||||
#include "quote.h"
|
||||
@@ -32,7 +25,6 @@
|
||||
#include "string-list.h"
|
||||
#include "object-name.h"
|
||||
#include "odb.h"
|
||||
#include "pager.h"
|
||||
#include "path.h"
|
||||
#include "utf8.h"
|
||||
#include "color.h"
|
||||
@@ -41,7 +33,6 @@
|
||||
#include "strvec.h"
|
||||
#include "trace2.h"
|
||||
#include "wildmatch.h"
|
||||
#include "ws.h"
|
||||
#include "write-or-die.h"
|
||||
|
||||
struct config_source {
|
||||
@@ -70,9 +61,6 @@ struct config_source {
|
||||
};
|
||||
#define CONFIG_SOURCE_INIT { 0 }
|
||||
|
||||
static int pack_compression_seen;
|
||||
static int zlib_compression_seen;
|
||||
|
||||
/*
|
||||
* Config that comes from trusted scopes, namely:
|
||||
* - CONFIG_SCOPE_SYSTEM (e.g. /etc/gitconfig)
|
||||
@@ -207,11 +195,12 @@ static void add_trailing_starstar_for_dir(struct strbuf *pat)
|
||||
}
|
||||
|
||||
static int prepare_include_condition_pattern(const struct key_value_info *kvi,
|
||||
struct strbuf *pat)
|
||||
struct strbuf *pat,
|
||||
size_t *out)
|
||||
{
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
char *expanded;
|
||||
int prefix = 0;
|
||||
size_t prefix = 0;
|
||||
|
||||
expanded = interpolate_path(pat->buf, 1);
|
||||
if (expanded) {
|
||||
@@ -238,8 +227,10 @@ static int prepare_include_condition_pattern(const struct key_value_info *kvi,
|
||||
|
||||
add_trailing_starstar_for_dir(pat);
|
||||
|
||||
*out = prefix;
|
||||
|
||||
strbuf_release(&path);
|
||||
return prefix;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int include_by_gitdir(const struct key_value_info *kvi,
|
||||
@@ -248,7 +239,8 @@ static int include_by_gitdir(const struct key_value_info *kvi,
|
||||
{
|
||||
struct strbuf text = STRBUF_INIT;
|
||||
struct strbuf pattern = STRBUF_INIT;
|
||||
int ret = 0, prefix;
|
||||
size_t prefix;
|
||||
int ret = 0;
|
||||
const char *git_dir;
|
||||
int already_tried_absolute = 0;
|
||||
|
||||
@@ -259,12 +251,11 @@ static int include_by_gitdir(const struct key_value_info *kvi,
|
||||
|
||||
strbuf_realpath(&text, git_dir, 1);
|
||||
strbuf_add(&pattern, cond, cond_len);
|
||||
prefix = prepare_include_condition_pattern(kvi, &pattern);
|
||||
|
||||
again:
|
||||
if (prefix < 0)
|
||||
ret = prepare_include_condition_pattern(kvi, &pattern, &prefix);
|
||||
if (ret < 0)
|
||||
goto done;
|
||||
|
||||
again:
|
||||
if (prefix > 0) {
|
||||
/*
|
||||
* perform literal matching on the prefix part so that
|
||||
@@ -732,7 +723,6 @@ int git_config_from_parameters(config_fn_t fn, void *data)
|
||||
if (env) {
|
||||
unsigned long count;
|
||||
char *endp;
|
||||
int i;
|
||||
|
||||
count = strtoul(env, &endp, 10);
|
||||
if (*endp) {
|
||||
@@ -744,10 +734,10 @@ int git_config_from_parameters(config_fn_t fn, void *data)
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
for (unsigned long i = 0; i < count; i++) {
|
||||
const char *key, *value;
|
||||
|
||||
strbuf_addf(&envvar, "GIT_CONFIG_KEY_%d", i);
|
||||
strbuf_addf(&envvar, "GIT_CONFIG_KEY_%lu", i);
|
||||
key = getenv_safe(&to_free, envvar.buf);
|
||||
if (!key) {
|
||||
ret = error(_("missing config key %s"), envvar.buf);
|
||||
@@ -755,7 +745,7 @@ int git_config_from_parameters(config_fn_t fn, void *data)
|
||||
}
|
||||
strbuf_reset(&envvar);
|
||||
|
||||
strbuf_addf(&envvar, "GIT_CONFIG_VALUE_%d", i);
|
||||
strbuf_addf(&envvar, "GIT_CONFIG_VALUE_%lu", i);
|
||||
value = getenv_safe(&to_free, envvar.buf);
|
||||
if (!value) {
|
||||
ret = error(_("missing config value %s"), envvar.buf);
|
||||
@@ -1259,80 +1249,6 @@ double git_config_double(const char *name, const char *value,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct fsync_component_name {
|
||||
const char *name;
|
||||
enum fsync_component component_bits;
|
||||
} fsync_component_names[] = {
|
||||
{ "loose-object", FSYNC_COMPONENT_LOOSE_OBJECT },
|
||||
{ "pack", FSYNC_COMPONENT_PACK },
|
||||
{ "pack-metadata", FSYNC_COMPONENT_PACK_METADATA },
|
||||
{ "commit-graph", FSYNC_COMPONENT_COMMIT_GRAPH },
|
||||
{ "index", FSYNC_COMPONENT_INDEX },
|
||||
{ "objects", FSYNC_COMPONENTS_OBJECTS },
|
||||
{ "reference", FSYNC_COMPONENT_REFERENCE },
|
||||
{ "derived-metadata", FSYNC_COMPONENTS_DERIVED_METADATA },
|
||||
{ "committed", FSYNC_COMPONENTS_COMMITTED },
|
||||
{ "added", FSYNC_COMPONENTS_ADDED },
|
||||
{ "all", FSYNC_COMPONENTS_ALL },
|
||||
};
|
||||
|
||||
static enum fsync_component parse_fsync_components(const char *var, const char *string)
|
||||
{
|
||||
enum fsync_component current = FSYNC_COMPONENTS_PLATFORM_DEFAULT;
|
||||
enum fsync_component positive = 0, negative = 0;
|
||||
|
||||
while (string) {
|
||||
int i;
|
||||
size_t len;
|
||||
const char *ep;
|
||||
int negated = 0;
|
||||
int found = 0;
|
||||
|
||||
string = string + strspn(string, ", \t\n\r");
|
||||
ep = strchrnul(string, ',');
|
||||
len = ep - string;
|
||||
if (!strcmp(string, "none")) {
|
||||
current = FSYNC_COMPONENT_NONE;
|
||||
goto next_name;
|
||||
}
|
||||
|
||||
if (*string == '-') {
|
||||
negated = 1;
|
||||
string++;
|
||||
len--;
|
||||
if (!len)
|
||||
warning(_("invalid value for variable %s"), var);
|
||||
}
|
||||
|
||||
if (!len)
|
||||
break;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(fsync_component_names); ++i) {
|
||||
const struct fsync_component_name *n = &fsync_component_names[i];
|
||||
|
||||
if (strncmp(n->name, string, len))
|
||||
continue;
|
||||
|
||||
found = 1;
|
||||
if (negated)
|
||||
negative |= n->component_bits;
|
||||
else
|
||||
positive |= n->component_bits;
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
char *component = xstrndup(string, len);
|
||||
warning(_("ignoring unknown core.fsync component '%s'"), component);
|
||||
free(component);
|
||||
}
|
||||
|
||||
next_name:
|
||||
string = ep;
|
||||
}
|
||||
|
||||
return (current & ~negative) | positive;
|
||||
}
|
||||
|
||||
int git_config_bool_or_int(const char *name, const char *value,
|
||||
const struct key_value_info *kvi, int *is_bool)
|
||||
{
|
||||
@@ -1390,435 +1306,6 @@ int git_config_color(char *dest, const char *var, const char *value)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int git_default_core_config(const char *var, const char *value,
|
||||
const struct config_context *ctx, void *cb)
|
||||
{
|
||||
/* This needs a better name */
|
||||
if (!strcmp(var, "core.filemode")) {
|
||||
trust_executable_bit = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "core.trustctime")) {
|
||||
trust_ctime = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "core.checkstat")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
if (!strcasecmp(value, "default"))
|
||||
check_stat = 1;
|
||||
else if (!strcasecmp(value, "minimal"))
|
||||
check_stat = 0;
|
||||
else
|
||||
return error(_("invalid value for '%s': '%s'"),
|
||||
var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.quotepath")) {
|
||||
quote_path_fully = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.symlinks")) {
|
||||
has_symlinks = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.ignorecase")) {
|
||||
ignore_case = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.attributesfile")) {
|
||||
FREE_AND_NULL(git_attributes_file);
|
||||
return git_config_pathname(&git_attributes_file, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.bare")) {
|
||||
is_bare_repository_cfg = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.ignorestat")) {
|
||||
assume_unchanged = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.abbrev")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
if (!strcasecmp(value, "auto"))
|
||||
default_abbrev = -1;
|
||||
else if (!git_parse_maybe_bool_text(value))
|
||||
default_abbrev = GIT_MAX_HEXSZ;
|
||||
else {
|
||||
int abbrev = git_config_int(var, value, ctx->kvi);
|
||||
if (abbrev < minimum_abbrev)
|
||||
return error(_("abbrev length out of range: %d"), abbrev);
|
||||
default_abbrev = abbrev;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.disambiguate"))
|
||||
return set_disambiguate_hint_config(var, value);
|
||||
|
||||
if (!strcmp(var, "core.loosecompression")) {
|
||||
int level = git_config_int(var, value, ctx->kvi);
|
||||
if (level == -1)
|
||||
level = Z_DEFAULT_COMPRESSION;
|
||||
else if (level < 0 || level > Z_BEST_COMPRESSION)
|
||||
die(_("bad zlib compression level %d"), level);
|
||||
zlib_compression_level = level;
|
||||
zlib_compression_seen = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.compression")) {
|
||||
int level = git_config_int(var, value, ctx->kvi);
|
||||
if (level == -1)
|
||||
level = Z_DEFAULT_COMPRESSION;
|
||||
else if (level < 0 || level > Z_BEST_COMPRESSION)
|
||||
die(_("bad zlib compression level %d"), level);
|
||||
if (!zlib_compression_seen)
|
||||
zlib_compression_level = level;
|
||||
if (!pack_compression_seen)
|
||||
pack_compression_level = level;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.autocrlf")) {
|
||||
if (value && !strcasecmp(value, "input")) {
|
||||
auto_crlf = AUTO_CRLF_INPUT;
|
||||
return 0;
|
||||
}
|
||||
auto_crlf = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.safecrlf")) {
|
||||
int eol_rndtrp_die;
|
||||
if (value && !strcasecmp(value, "warn")) {
|
||||
global_conv_flags_eol = CONV_EOL_RNDTRP_WARN;
|
||||
return 0;
|
||||
}
|
||||
eol_rndtrp_die = git_config_bool(var, value);
|
||||
global_conv_flags_eol = eol_rndtrp_die ?
|
||||
CONV_EOL_RNDTRP_DIE : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.eol")) {
|
||||
if (value && !strcasecmp(value, "lf"))
|
||||
core_eol = EOL_LF;
|
||||
else if (value && !strcasecmp(value, "crlf"))
|
||||
core_eol = EOL_CRLF;
|
||||
else if (value && !strcasecmp(value, "native"))
|
||||
core_eol = EOL_NATIVE;
|
||||
else
|
||||
core_eol = EOL_UNSET;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.checkroundtripencoding")) {
|
||||
FREE_AND_NULL(check_roundtrip_encoding);
|
||||
return git_config_string(&check_roundtrip_encoding, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.editor")) {
|
||||
FREE_AND_NULL(editor_program);
|
||||
return git_config_string(&editor_program, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.commentchar") ||
|
||||
!strcmp(var, "core.commentstring")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
else if (!strcasecmp(value, "auto")) {
|
||||
auto_comment_line_char = 1;
|
||||
FREE_AND_NULL(comment_line_str_to_free);
|
||||
comment_line_str = "#";
|
||||
} else if (value[0]) {
|
||||
if (strchr(value, '\n'))
|
||||
return error(_("%s cannot contain newline"), var);
|
||||
comment_line_str = value;
|
||||
FREE_AND_NULL(comment_line_str_to_free);
|
||||
auto_comment_line_char = 0;
|
||||
} else
|
||||
return error(_("%s must have at least one character"), var);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.askpass")) {
|
||||
FREE_AND_NULL(askpass_program);
|
||||
return git_config_string(&askpass_program, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.excludesfile")) {
|
||||
FREE_AND_NULL(excludes_file);
|
||||
return git_config_pathname(&excludes_file, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.whitespace")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
whitespace_rule_cfg = parse_whitespace_rule(value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.fsync")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
fsync_components = parse_fsync_components(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.fsyncmethod")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
if (!strcmp(value, "fsync"))
|
||||
fsync_method = FSYNC_METHOD_FSYNC;
|
||||
else if (!strcmp(value, "writeout-only"))
|
||||
fsync_method = FSYNC_METHOD_WRITEOUT_ONLY;
|
||||
else if (!strcmp(value, "batch"))
|
||||
fsync_method = FSYNC_METHOD_BATCH;
|
||||
else
|
||||
warning(_("ignoring unknown core.fsyncMethod value '%s'"), value);
|
||||
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.fsyncobjectfiles")) {
|
||||
if (fsync_object_files < 0)
|
||||
warning(_("core.fsyncObjectFiles is deprecated; use core.fsync instead"));
|
||||
fsync_object_files = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.createobject")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
if (!strcmp(value, "rename"))
|
||||
object_creation_mode = OBJECT_CREATION_USES_RENAMES;
|
||||
else if (!strcmp(value, "link"))
|
||||
object_creation_mode = OBJECT_CREATION_USES_HARDLINKS;
|
||||
else
|
||||
die(_("invalid mode for object creation: %s"), value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.sparsecheckout")) {
|
||||
core_apply_sparse_checkout = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.sparsecheckoutcone")) {
|
||||
core_sparse_checkout_cone = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.precomposeunicode")) {
|
||||
precomposed_unicode = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.protecthfs")) {
|
||||
protect_hfs = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.protectntfs")) {
|
||||
protect_ntfs = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.maxtreedepth")) {
|
||||
max_allowed_tree_depth = git_config_int(var, value, ctx->kvi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config.adoc. */
|
||||
return platform_core_config(var, value, ctx, cb);
|
||||
}
|
||||
|
||||
static int git_default_sparse_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "sparse.expectfilesoutsideofpatterns")) {
|
||||
sparse_expect_files_outside_of_patterns = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config/sparse.adoc. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int git_default_i18n_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "i18n.commitencoding")) {
|
||||
FREE_AND_NULL(git_commit_encoding);
|
||||
return git_config_string(&git_commit_encoding, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "i18n.logoutputencoding")) {
|
||||
FREE_AND_NULL(git_log_output_encoding);
|
||||
return git_config_string(&git_log_output_encoding, var, value);
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config.adoc. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int git_default_branch_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "branch.autosetupmerge")) {
|
||||
if (value && !strcmp(value, "always")) {
|
||||
git_branch_track = BRANCH_TRACK_ALWAYS;
|
||||
return 0;
|
||||
} else if (value && !strcmp(value, "inherit")) {
|
||||
git_branch_track = BRANCH_TRACK_INHERIT;
|
||||
return 0;
|
||||
} else if (value && !strcmp(value, "simple")) {
|
||||
git_branch_track = BRANCH_TRACK_SIMPLE;
|
||||
return 0;
|
||||
}
|
||||
git_branch_track = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "branch.autosetuprebase")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
else if (!strcmp(value, "never"))
|
||||
autorebase = AUTOREBASE_NEVER;
|
||||
else if (!strcmp(value, "local"))
|
||||
autorebase = AUTOREBASE_LOCAL;
|
||||
else if (!strcmp(value, "remote"))
|
||||
autorebase = AUTOREBASE_REMOTE;
|
||||
else if (!strcmp(value, "always"))
|
||||
autorebase = AUTOREBASE_ALWAYS;
|
||||
else
|
||||
return error(_("malformed value for %s"), var);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config.adoc. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int git_default_push_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "push.default")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
else if (!strcmp(value, "nothing"))
|
||||
push_default = PUSH_DEFAULT_NOTHING;
|
||||
else if (!strcmp(value, "matching"))
|
||||
push_default = PUSH_DEFAULT_MATCHING;
|
||||
else if (!strcmp(value, "simple"))
|
||||
push_default = PUSH_DEFAULT_SIMPLE;
|
||||
else if (!strcmp(value, "upstream"))
|
||||
push_default = PUSH_DEFAULT_UPSTREAM;
|
||||
else if (!strcmp(value, "tracking")) /* deprecated */
|
||||
push_default = PUSH_DEFAULT_UPSTREAM;
|
||||
else if (!strcmp(value, "current"))
|
||||
push_default = PUSH_DEFAULT_CURRENT;
|
||||
else {
|
||||
error(_("malformed value for %s: %s"), var, value);
|
||||
return error(_("must be one of nothing, matching, simple, "
|
||||
"upstream or current"));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config.adoc. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int git_default_mailmap_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "mailmap.file")) {
|
||||
FREE_AND_NULL(git_mailmap_file);
|
||||
return git_config_pathname(&git_mailmap_file, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "mailmap.blob")) {
|
||||
FREE_AND_NULL(git_mailmap_blob);
|
||||
return git_config_string(&git_mailmap_blob, var, value);
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config.adoc. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int git_default_attr_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "attr.tree")) {
|
||||
FREE_AND_NULL(git_attr_tree);
|
||||
return git_config_string(&git_attr_tree, var, value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add other attribute related config variables here and to
|
||||
* Documentation/config/attr.adoc.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
int git_default_config(const char *var, const char *value,
|
||||
const struct config_context *ctx, void *cb)
|
||||
{
|
||||
if (starts_with(var, "core."))
|
||||
return git_default_core_config(var, value, ctx, cb);
|
||||
|
||||
if (starts_with(var, "user.") ||
|
||||
starts_with(var, "author.") ||
|
||||
starts_with(var, "committer."))
|
||||
return git_ident_config(var, value, ctx, cb);
|
||||
|
||||
if (starts_with(var, "i18n."))
|
||||
return git_default_i18n_config(var, value);
|
||||
|
||||
if (starts_with(var, "branch."))
|
||||
return git_default_branch_config(var, value);
|
||||
|
||||
if (starts_with(var, "push."))
|
||||
return git_default_push_config(var, value);
|
||||
|
||||
if (starts_with(var, "mailmap."))
|
||||
return git_default_mailmap_config(var, value);
|
||||
|
||||
if (starts_with(var, "attr."))
|
||||
return git_default_attr_config(var, value);
|
||||
|
||||
if (starts_with(var, "advice.") || starts_with(var, "color.advice"))
|
||||
return git_default_advice_config(var, value);
|
||||
|
||||
if (!strcmp(var, "pager.color") || !strcmp(var, "color.pager")) {
|
||||
pager_use_color = git_config_bool(var,value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "pack.packsizelimit")) {
|
||||
pack_size_limit_cfg = git_config_ulong(var, value, ctx->kvi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "pack.compression")) {
|
||||
int level = git_config_int(var, value, ctx->kvi);
|
||||
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;
|
||||
pack_compression_seen = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (starts_with(var, "sparse."))
|
||||
return git_default_sparse_config(var, value);
|
||||
|
||||
/* Add other config variables here and to Documentation/config.adoc. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* All source specific fields in the union, die_on_error, name and the callbacks
|
||||
* fgetc, ungetc, ftell of top need to be initialized before calling
|
||||
@@ -2125,13 +1612,13 @@ int config_with_options(config_fn_t fn, void *data,
|
||||
|
||||
static void configset_iter(struct config_set *set, config_fn_t fn, void *data)
|
||||
{
|
||||
int i, value_index;
|
||||
int value_index;
|
||||
struct string_list *values;
|
||||
struct config_set_element *entry;
|
||||
struct configset_list *list = &set->list;
|
||||
struct config_context ctx = CONFIG_CONTEXT_INIT;
|
||||
|
||||
for (i = 0; i < list->nr; i++) {
|
||||
for (size_t i = 0; i < list->nr; i++) {
|
||||
entry = list->items[i].e;
|
||||
value_index = list->items[i].value_index;
|
||||
values = &entry->value_list;
|
||||
@@ -2748,7 +2235,7 @@ void git_die_config(struct repository *r, const char *key, const char *err, ...)
|
||||
}
|
||||
|
||||
/*
|
||||
* Find all the stuff for git_config_set() below.
|
||||
* Find all the stuff for repo_config_set() below.
|
||||
*/
|
||||
|
||||
struct config_store_data {
|
||||
@@ -2981,10 +2468,11 @@ static ssize_t write_pair(int fd, const char *key, const char *value,
|
||||
*/
|
||||
static void maybe_remove_section(struct config_store_data *store,
|
||||
size_t *begin_offset, size_t *end_offset,
|
||||
int *seen_ptr)
|
||||
unsigned *seen_ptr)
|
||||
{
|
||||
size_t begin;
|
||||
int i, seen, section_seen = 0;
|
||||
int section_seen = 0;
|
||||
unsigned int i, seen;
|
||||
|
||||
/*
|
||||
* First, ensure that this is the first key, and that there are no
|
||||
@@ -3227,7 +2715,8 @@ int repo_config_set_multivar_in_file_gently(struct repository *r,
|
||||
} else {
|
||||
struct stat st;
|
||||
size_t copy_begin, copy_end;
|
||||
int i, new_line = 0;
|
||||
unsigned i;
|
||||
int new_line = 0;
|
||||
struct config_options opts;
|
||||
|
||||
if (!value_pattern)
|
||||
|
||||
Reference in New Issue
Block a user