Merge branch 'fl/config'
* fl/config: config: add support for --bool and --int while setting valuesmaint
commit
cd5ada993d
|
@ -9,9 +9,9 @@ git-config - Get and set repository or global options
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'git-config' [--system | --global] [-z|--null] name [value [value_regex]]
|
'git-config' [--system | --global] [type] [-z|--null] name [value [value_regex]]
|
||||||
'git-config' [--system | --global] --add name value
|
'git-config' [--system | --global] [type] --add name value
|
||||||
'git-config' [--system | --global] --replace-all name [value [value_regex]]
|
'git-config' [--system | --global] [type] --replace-all name [value [value_regex]]
|
||||||
'git-config' [--system | --global] [type] [-z|--null] --get name [value_regex]
|
'git-config' [--system | --global] [type] [-z|--null] --get name [value_regex]
|
||||||
'git-config' [--system | --global] [type] [-z|--null] --get-all name [value_regex]
|
'git-config' [--system | --global] [type] [-z|--null] --get-all name [value_regex]
|
||||||
'git-config' [--system | --global] [type] [-z|--null] --get-regexp name_regex [value_regex]
|
'git-config' [--system | --global] [type] [-z|--null] --get-regexp name_regex [value_regex]
|
||||||
|
@ -37,8 +37,7 @@ prepend a single exclamation mark in front (see also <<EXAMPLES>>).
|
||||||
The type specifier can be either '--int' or '--bool', which will make
|
The type specifier can be either '--int' or '--bool', which will make
|
||||||
'git-config' ensure that the variable(s) are of the given type and
|
'git-config' ensure that the variable(s) are of the given type and
|
||||||
convert the value to the canonical form (simple decimal number for int,
|
convert the value to the canonical form (simple decimal number for int,
|
||||||
a "true" or "false" string for bool). Type specifiers currently only
|
a "true" or "false" string for bool). If no type specifier is passed,
|
||||||
take effect for reading operations. If no type specifier is passed,
|
|
||||||
no checks or transformations are performed on the value.
|
no checks or transformations are performed on the value.
|
||||||
|
|
||||||
This command will fail if:
|
This command will fail if:
|
||||||
|
|
|
@ -138,9 +138,33 @@ free_strings:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
|
return normalized;
|
||||||
|
}
|
||||||
|
|
||||||
int cmd_config(int argc, const char **argv, const char *prefix)
|
int cmd_config(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
int nongit = 0;
|
int nongit = 0;
|
||||||
|
char* value;
|
||||||
setup_git_directory_gently(&nongit);
|
setup_git_directory_gently(&nongit);
|
||||||
|
|
||||||
while (1 < argc) {
|
while (1 < argc) {
|
||||||
|
@ -217,9 +241,10 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
||||||
use_key_regexp = 1;
|
use_key_regexp = 1;
|
||||||
do_all = 1;
|
do_all = 1;
|
||||||
return get_value(argv[2], NULL);
|
return get_value(argv[2], NULL);
|
||||||
} else
|
} else {
|
||||||
|
value = normalize_value(argv[1], argv[2]);
|
||||||
return git_config_set(argv[1], argv[2]);
|
return git_config_set(argv[1], value);
|
||||||
|
}
|
||||||
case 4:
|
case 4:
|
||||||
if (!strcmp(argv[1], "--unset"))
|
if (!strcmp(argv[1], "--unset"))
|
||||||
return git_config_set_multivar(argv[2], NULL, argv[3], 0);
|
return git_config_set_multivar(argv[2], NULL, argv[3], 0);
|
||||||
|
@ -235,17 +260,21 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
||||||
use_key_regexp = 1;
|
use_key_regexp = 1;
|
||||||
do_all = 1;
|
do_all = 1;
|
||||||
return get_value(argv[2], argv[3]);
|
return get_value(argv[2], argv[3]);
|
||||||
} else if (!strcmp(argv[1], "--add"))
|
} else if (!strcmp(argv[1], "--add")) {
|
||||||
return git_config_set_multivar(argv[2], argv[3], "^$", 0);
|
value = normalize_value(argv[2], argv[3]);
|
||||||
else if (!strcmp(argv[1], "--replace-all"))
|
return git_config_set_multivar(argv[2], value, "^$", 0);
|
||||||
|
} else if (!strcmp(argv[1], "--replace-all")) {
|
||||||
return git_config_set_multivar(argv[2], argv[3], NULL, 1);
|
value = normalize_value(argv[2], argv[3]);
|
||||||
else
|
return git_config_set_multivar(argv[2], value, NULL, 1);
|
||||||
|
} else {
|
||||||
return git_config_set_multivar(argv[1], argv[2], argv[3], 0);
|
value = normalize_value(argv[1], argv[2]);
|
||||||
|
return git_config_set_multivar(argv[1], value, argv[3], 0);
|
||||||
|
}
|
||||||
case 5:
|
case 5:
|
||||||
if (!strcmp(argv[1], "--replace-all"))
|
if (!strcmp(argv[1], "--replace-all")) {
|
||||||
return git_config_set_multivar(argv[2], argv[3], argv[4], 1);
|
value = normalize_value(argv[2], argv[3]);
|
||||||
|
return git_config_set_multivar(argv[2], value, argv[4], 1);
|
||||||
|
}
|
||||||
case 1:
|
case 1:
|
||||||
default:
|
default:
|
||||||
usage(git_config_set_usage);
|
usage(git_config_set_usage);
|
||||||
|
|
|
@ -471,11 +471,57 @@ test_expect_success bool '
|
||||||
done &&
|
done &&
|
||||||
cmp expect result'
|
cmp expect result'
|
||||||
|
|
||||||
test_expect_failure 'invalid bool' '
|
test_expect_failure 'invalid bool (--get)' '
|
||||||
|
|
||||||
git-config bool.nobool foobar &&
|
git-config bool.nobool foobar &&
|
||||||
git-config --bool --get bool.nobool'
|
git-config --bool --get bool.nobool'
|
||||||
|
|
||||||
|
test_expect_failure 'invalid bool (set)' '
|
||||||
|
|
||||||
|
git-config --bool bool.nobool foobar'
|
||||||
|
|
||||||
|
rm .git/config
|
||||||
|
|
||||||
|
cat > expect <<\EOF
|
||||||
|
[bool]
|
||||||
|
true1 = true
|
||||||
|
true2 = true
|
||||||
|
true3 = true
|
||||||
|
true4 = true
|
||||||
|
false1 = false
|
||||||
|
false2 = false
|
||||||
|
false3 = false
|
||||||
|
false4 = false
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'set --bool' '
|
||||||
|
|
||||||
|
git-config --bool bool.true1 01 &&
|
||||||
|
git-config --bool bool.true2 -1 &&
|
||||||
|
git-config --bool bool.true3 YeS &&
|
||||||
|
git-config --bool bool.true4 true &&
|
||||||
|
git-config --bool bool.false1 000 &&
|
||||||
|
git-config --bool bool.false2 "" &&
|
||||||
|
git-config --bool bool.false3 nO &&
|
||||||
|
git-config --bool bool.false4 FALSE &&
|
||||||
|
cmp expect .git/config'
|
||||||
|
|
||||||
|
rm .git/config
|
||||||
|
|
||||||
|
cat > expect <<\EOF
|
||||||
|
[int]
|
||||||
|
val1 = 1
|
||||||
|
val2 = -1
|
||||||
|
val3 = 5242880
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'set --int' '
|
||||||
|
|
||||||
|
git-config --int int.val1 01 &&
|
||||||
|
git-config --int int.val2 -1 &&
|
||||||
|
git-config --int int.val3 5m &&
|
||||||
|
cmp expect .git/config'
|
||||||
|
|
||||||
rm .git/config
|
rm .git/config
|
||||||
|
|
||||||
git-config quote.leading " test"
|
git-config quote.leading " test"
|
||||||
|
|
|
@ -38,7 +38,7 @@ echo >empty &&
|
||||||
git commit -q -m "First Commit" &&
|
git commit -q -m "First Commit" &&
|
||||||
git clone -q --local --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
|
git clone -q --local --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
|
||||||
GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
|
GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
|
||||||
GIT_DIR="$SERVERDIR" git config --bool gitcvs.logfile "$SERVERDIR/gitcvs.log" ||
|
GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log" ||
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
# note that cvs doesn't accept absolute pathnames
|
# note that cvs doesn't accept absolute pathnames
|
||||||
|
@ -255,7 +255,7 @@ rm -fr "$SERVERDIR"
|
||||||
cd "$WORKDIR" &&
|
cd "$WORKDIR" &&
|
||||||
git clone -q --local --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
|
git clone -q --local --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
|
||||||
GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
|
GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
|
||||||
GIT_DIR="$SERVERDIR" git config --bool gitcvs.logfile "$SERVERDIR/gitcvs.log" ||
|
GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log" ||
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
test_expect_success 'cvs update (create new file)' \
|
test_expect_success 'cvs update (create new file)' \
|
||||||
|
|
Loading…
Reference in New Issue