builtin/config: introduce "rename-section" subcommand
Introduce a new "rename-section" subcommand to git-config(1). Please refer to preceding commits regarding the motivation behind this change. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
95ea69c67b
commit
3418e96f37
|
@ -13,7 +13,7 @@ SYNOPSIS
|
||||||
'git config get' [<file-option>] [<display-option>] [--includes] [--all] [--regexp=<regexp>] [--value=<value>] [--fixed-value] [--default=<default>] <name>
|
'git config get' [<file-option>] [<display-option>] [--includes] [--all] [--regexp=<regexp>] [--value=<value>] [--fixed-value] [--default=<default>] <name>
|
||||||
'git config set' [<file-option>] [--type=<type>] [--all] [--value=<value>] [--fixed-value] <name> <value>
|
'git config set' [<file-option>] [--type=<type>] [--all] [--value=<value>] [--fixed-value] <name> <value>
|
||||||
'git config unset' [<file-option>] [--all] [--value=<value>] [--fixed-value] <name> <value>
|
'git config unset' [<file-option>] [--all] [--value=<value>] [--fixed-value] <name> <value>
|
||||||
'git config' [<file-option>] --rename-section <old-name> <new-name>
|
'git config rename-section' [<file-option>] <old-name> <new-name>
|
||||||
'git config' [<file-option>] --remove-section <name>
|
'git config' [<file-option>] --remove-section <name>
|
||||||
'git config' [<file-option>] --get-colorbool <name> [<stdout-is-tty>]
|
'git config' [<file-option>] --get-colorbool <name> [<stdout-is-tty>]
|
||||||
'git config' [<file-option>] -e | --edit
|
'git config' [<file-option>] -e | --edit
|
||||||
|
@ -92,6 +92,9 @@ unset::
|
||||||
multi-valued config options, whereas `--value` will unset all config
|
multi-valued config options, whereas `--value` will unset all config
|
||||||
options whose values match the given pattern.
|
options whose values match the given pattern.
|
||||||
|
|
||||||
|
rename-section::
|
||||||
|
Rename the given section to a new name.
|
||||||
|
|
||||||
[[OPTIONS]]
|
[[OPTIONS]]
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
|
@ -192,9 +195,6 @@ See also <<FILES>>.
|
||||||
--remove-section::
|
--remove-section::
|
||||||
Remove the given section from the configuration file.
|
Remove the given section from the configuration file.
|
||||||
|
|
||||||
--rename-section::
|
|
||||||
Rename the given section to a new name.
|
|
||||||
|
|
||||||
--fixed-value::
|
--fixed-value::
|
||||||
When used with the `value-pattern` argument, treat `value-pattern` as
|
When used with the `value-pattern` argument, treat `value-pattern` as
|
||||||
an exact string instead of a regular expression. This will restrict
|
an exact string instead of a regular expression. This will restrict
|
||||||
|
@ -330,6 +330,9 @@ recommended to migrate to the new syntax.
|
||||||
--unset-all <name> [<value-pattern>]::
|
--unset-all <name> [<value-pattern>]::
|
||||||
Replaced by `git config unset [--value=<pattern>] --all <name>`.
|
Replaced by `git config unset [--value=<pattern>] --all <name>`.
|
||||||
|
|
||||||
|
--rename-section <old-name> <new-name>::
|
||||||
|
Replaced by `git config rename-section <old-name> <new-name>`.
|
||||||
|
|
||||||
CONFIGURATION
|
CONFIGURATION
|
||||||
-------------
|
-------------
|
||||||
`pager.config` is only respected when listing configuration, i.e., when
|
`pager.config` is only respected when listing configuration, i.e., when
|
||||||
|
|
|
@ -20,6 +20,7 @@ static const char *const builtin_config_usage[] = {
|
||||||
N_("git config get [<file-option>] [<display-option>] [--includes] [--all] [--regexp=<regexp>] [--value=<value>] [--fixed-value] [--default=<default>] <name>"),
|
N_("git config get [<file-option>] [<display-option>] [--includes] [--all] [--regexp=<regexp>] [--value=<value>] [--fixed-value] [--default=<default>] <name>"),
|
||||||
N_("git config set [<file-option>] [--type=<type>] [--all] [--value=<value>] [--fixed-value] <name> <value>"),
|
N_("git config set [<file-option>] [--type=<type>] [--all] [--value=<value>] [--fixed-value] <name> <value>"),
|
||||||
N_("git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] <name> <value>"),
|
N_("git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] <name> <value>"),
|
||||||
|
N_("git config rename-section [<file-option>] <old-name> <new-name>"),
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -43,6 +44,11 @@ static const char *const builtin_config_unset_usage[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *const builtin_config_rename_section_usage[] = {
|
||||||
|
N_("git config rename-section [<file-option>] <old-name> <new-name>"),
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
static char *key;
|
static char *key;
|
||||||
static regex_t *key_regexp;
|
static regex_t *key_regexp;
|
||||||
static const char *value_pattern;
|
static const char *value_pattern;
|
||||||
|
@ -949,11 +955,37 @@ static int cmd_config_unset(int argc, const char **argv, const char *prefix)
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cmd_config_rename_section(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
struct option opts[] = {
|
||||||
|
CONFIG_LOCATION_OPTIONS,
|
||||||
|
OPT_END(),
|
||||||
|
};
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
argc = parse_options(argc, argv, prefix, opts, builtin_config_rename_section_usage,
|
||||||
|
PARSE_OPT_STOP_AT_NON_OPTION);
|
||||||
|
check_write();
|
||||||
|
check_argc(argc, 2, 2);
|
||||||
|
|
||||||
|
handle_config_location(prefix);
|
||||||
|
|
||||||
|
ret = git_config_rename_section_in_file(given_config_source.file,
|
||||||
|
argv[0], argv[1]);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
else if (!ret)
|
||||||
|
die(_("no such section: %s"), argv[0]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct option builtin_subcommand_options[] = {
|
static struct option builtin_subcommand_options[] = {
|
||||||
OPT_SUBCOMMAND("list", &subcommand, cmd_config_list),
|
OPT_SUBCOMMAND("list", &subcommand, cmd_config_list),
|
||||||
OPT_SUBCOMMAND("get", &subcommand, cmd_config_get),
|
OPT_SUBCOMMAND("get", &subcommand, cmd_config_get),
|
||||||
OPT_SUBCOMMAND("set", &subcommand, cmd_config_set),
|
OPT_SUBCOMMAND("set", &subcommand, cmd_config_set),
|
||||||
OPT_SUBCOMMAND("unset", &subcommand, cmd_config_unset),
|
OPT_SUBCOMMAND("unset", &subcommand, cmd_config_unset),
|
||||||
|
OPT_SUBCOMMAND("rename-section", &subcommand, cmd_config_rename_section),
|
||||||
OPT_END(),
|
OPT_END(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -699,7 +699,7 @@ weird
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
test_expect_success 'rename section' '
|
test_expect_success 'rename section' '
|
||||||
git config --rename-section branch.eins branch.zwei
|
git config ${mode_prefix}rename-section branch.eins branch.zwei
|
||||||
'
|
'
|
||||||
|
|
||||||
cat > expect << EOF
|
cat > expect << EOF
|
||||||
|
@ -718,7 +718,7 @@ test_expect_success 'rename succeeded' '
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'rename non-existing section' '
|
test_expect_success 'rename non-existing section' '
|
||||||
test_must_fail git config --rename-section \
|
test_must_fail git config ${mode_prefix}rename-section \
|
||||||
branch."world domination" branch.drei
|
branch."world domination" branch.drei
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -727,7 +727,7 @@ test_expect_success 'rename succeeded' '
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'rename another section' '
|
test_expect_success 'rename another section' '
|
||||||
git config --rename-section branch."1 234 blabl/a" branch.drei
|
git config ${mode_prefix}rename-section branch."1 234 blabl/a" branch.drei
|
||||||
'
|
'
|
||||||
|
|
||||||
cat > expect << EOF
|
cat > expect << EOF
|
||||||
|
@ -750,7 +750,7 @@ cat >> .git/config << EOF
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
test_expect_success 'rename a section with a var on the same line' '
|
test_expect_success 'rename a section with a var on the same line' '
|
||||||
git config --rename-section branch.vier branch.zwei
|
git config ${mode_prefix}rename-section branch.vier branch.zwei
|
||||||
'
|
'
|
||||||
|
|
||||||
cat > expect << EOF
|
cat > expect << EOF
|
||||||
|
@ -771,11 +771,11 @@ test_expect_success 'rename succeeded' '
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'renaming empty section name is rejected' '
|
test_expect_success 'renaming empty section name is rejected' '
|
||||||
test_must_fail git config --rename-section branch.zwei ""
|
test_must_fail git config ${mode_prefix}rename-section branch.zwei ""
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'renaming to bogus section is rejected' '
|
test_expect_success 'renaming to bogus section is rejected' '
|
||||||
test_must_fail git config --rename-section branch.zwei "bogus name"
|
test_must_fail git config ${mode_prefix}rename-section branch.zwei "bogus name"
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'renaming a section with a long line' '
|
test_expect_success 'renaming a section with a long line' '
|
||||||
|
@ -784,7 +784,7 @@ test_expect_success 'renaming a section with a long line' '
|
||||||
printf " c = d %1024s [a] e = f\\n" " " &&
|
printf " c = d %1024s [a] e = f\\n" " " &&
|
||||||
printf "[a] g = h\\n"
|
printf "[a] g = h\\n"
|
||||||
} >y &&
|
} >y &&
|
||||||
git config -f y --rename-section a xyz &&
|
git config ${mode_prefix}rename-section -f y a xyz &&
|
||||||
test_must_fail git config -f y b.e
|
test_must_fail git config -f y b.e
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -794,7 +794,7 @@ test_expect_success 'renaming an embedded section with a long line' '
|
||||||
printf " c = d %1024s [a] [foo] e = f\\n" " " &&
|
printf " c = d %1024s [a] [foo] e = f\\n" " " &&
|
||||||
printf "[a] g = h\\n"
|
printf "[a] g = h\\n"
|
||||||
} >y &&
|
} >y &&
|
||||||
git config -f y --rename-section a xyz &&
|
git config ${mode_prefix}rename-section -f y a xyz &&
|
||||||
test_must_fail git config -f y foo.e
|
test_must_fail git config -f y foo.e
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -804,7 +804,7 @@ test_expect_success 'renaming a section with an overly-long line' '
|
||||||
printf " c = d %525000s e" " " &&
|
printf " c = d %525000s e" " " &&
|
||||||
printf "[a] g = h\\n"
|
printf "[a] g = h\\n"
|
||||||
} >y &&
|
} >y &&
|
||||||
test_must_fail git config -f y --rename-section a xyz 2>err &&
|
test_must_fail git config ${mode_prefix}rename-section -f y a xyz 2>err &&
|
||||||
grep "refusing to work with overly long line in .y. on line 2" err
|
grep "refusing to work with overly long line in .y. on line 2" err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -2112,7 +2112,7 @@ test_expect_success POSIXPERM,PERL 'preserves existing permissions' '
|
||||||
git config imap.pass Hunter2 &&
|
git config imap.pass Hunter2 &&
|
||||||
perl -e \
|
perl -e \
|
||||||
"die q(badset) if ((stat(q(.git/config)))[2] & 07777) != 0600" &&
|
"die q(badset) if ((stat(q(.git/config)))[2] & 07777) != 0600" &&
|
||||||
git config --rename-section imap pop &&
|
git config ${mode_prefix}rename-section imap pop &&
|
||||||
perl -e \
|
perl -e \
|
||||||
"die q(badrename) if ((stat(q(.git/config)))[2] & 07777) != 0600"
|
"die q(badrename) if ((stat(q(.git/config)))[2] & 07777) != 0600"
|
||||||
'
|
'
|
||||||
|
@ -2601,7 +2601,7 @@ test_expect_success 'refuse --fixed-value for incompatible actions' '
|
||||||
test_must_fail git config --file=config --fixed-value --add dev.null bogus &&
|
test_must_fail git config --file=config --fixed-value --add dev.null bogus &&
|
||||||
test_must_fail git config --file=config --fixed-value --get-urlmatch dev.null bogus &&
|
test_must_fail git config --file=config --fixed-value --get-urlmatch dev.null bogus &&
|
||||||
test_must_fail git config --file=config --fixed-value --get-urlmatch dev.null bogus &&
|
test_must_fail git config --file=config --fixed-value --get-urlmatch dev.null bogus &&
|
||||||
test_must_fail git config --file=config --fixed-value --rename-section dev null &&
|
test_must_fail git config ${mode_prefix}rename-section --file=config --fixed-value dev null &&
|
||||||
test_must_fail git config --file=config --fixed-value --remove-section dev &&
|
test_must_fail git config --file=config --fixed-value --remove-section dev &&
|
||||||
test_must_fail git config ${mode_prefix}list --file=config --fixed-value &&
|
test_must_fail git config ${mode_prefix}list --file=config --fixed-value &&
|
||||||
test_must_fail git config --file=config --fixed-value --get-color dev.null &&
|
test_must_fail git config --file=config --fixed-value --get-color dev.null &&
|
||||||
|
|
Loading…
Reference in New Issue