remote: add get-url subcommand
Expanding `insteadOf` is a part of ls-remote --url and there is no way to expand `pushInsteadOf` as well. Add a get-url subcommand to be able to query both as well as a way to get all configured urls. Signed-off-by: Ben Boeckel <mathstuf@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
a17c56c056
commit
96f78d3998
|
@ -15,6 +15,7 @@ SYNOPSIS
|
||||||
'git remote remove' <name>
|
'git remote remove' <name>
|
||||||
'git remote set-head' <name> (-a | --auto | -d | --delete | <branch>)
|
'git remote set-head' <name> (-a | --auto | -d | --delete | <branch>)
|
||||||
'git remote set-branches' [--add] <name> <branch>...
|
'git remote set-branches' [--add] <name> <branch>...
|
||||||
|
'git remote get-url' [--push] [--all] <name>
|
||||||
'git remote set-url' [--push] <name> <newurl> [<oldurl>]
|
'git remote set-url' [--push] <name> <newurl> [<oldurl>]
|
||||||
'git remote set-url --add' [--push] <name> <newurl>
|
'git remote set-url --add' [--push] <name> <newurl>
|
||||||
'git remote set-url --delete' [--push] <name> <url>
|
'git remote set-url --delete' [--push] <name> <url>
|
||||||
|
@ -131,6 +132,15 @@ The named branches will be interpreted as if specified with the
|
||||||
With `--add`, instead of replacing the list of currently tracked
|
With `--add`, instead of replacing the list of currently tracked
|
||||||
branches, adds to that list.
|
branches, adds to that list.
|
||||||
|
|
||||||
|
'get-url'::
|
||||||
|
|
||||||
|
Retrieves the URLs for a remote. Configurations for `insteadOf` and
|
||||||
|
`pushInsteadOf` are expanded here. By default, only the first URL is listed.
|
||||||
|
+
|
||||||
|
With '--push', push URLs are queried rather than fetch URLs.
|
||||||
|
+
|
||||||
|
With '--all', all URLs for the remote will be listed.
|
||||||
|
|
||||||
'set-url'::
|
'set-url'::
|
||||||
|
|
||||||
Changes URLs for the remote. Sets first URL for remote <name> that matches
|
Changes URLs for the remote. Sets first URL for remote <name> that matches
|
||||||
|
|
|
@ -18,6 +18,7 @@ static const char * const builtin_remote_usage[] = {
|
||||||
N_("git remote prune [-n | --dry-run] <name>"),
|
N_("git remote prune [-n | --dry-run] <name>"),
|
||||||
N_("git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"),
|
N_("git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"),
|
||||||
N_("git remote set-branches [--add] <name> <branch>..."),
|
N_("git remote set-branches [--add] <name> <branch>..."),
|
||||||
|
N_("git remote get-url [--push] [--all] <name>"),
|
||||||
N_("git remote set-url [--push] <name> <newurl> [<oldurl>]"),
|
N_("git remote set-url [--push] <name> <newurl> [<oldurl>]"),
|
||||||
N_("git remote set-url --add <name> <newurl>"),
|
N_("git remote set-url --add <name> <newurl>"),
|
||||||
N_("git remote set-url --delete <name> <url>"),
|
N_("git remote set-url --delete <name> <url>"),
|
||||||
|
@ -65,6 +66,11 @@ static const char * const builtin_remote_update_usage[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char * const builtin_remote_geturl_usage[] = {
|
||||||
|
N_("git remote get-url [--push] [--all] <name>"),
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
static const char * const builtin_remote_seturl_usage[] = {
|
static const char * const builtin_remote_seturl_usage[] = {
|
||||||
N_("git remote set-url [--push] <name> <newurl> [<oldurl>]"),
|
N_("git remote set-url [--push] <name> <newurl> [<oldurl>]"),
|
||||||
N_("git remote set-url --add <name> <newurl>"),
|
N_("git remote set-url --add <name> <newurl>"),
|
||||||
|
@ -1497,6 +1503,57 @@ static int set_branches(int argc, const char **argv)
|
||||||
return set_remote_branches(argv[0], argv + 1, add_mode);
|
return set_remote_branches(argv[0], argv + 1, add_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_url(int argc, const char **argv)
|
||||||
|
{
|
||||||
|
int i, push_mode = 0, all_mode = 0;
|
||||||
|
const char *remotename = NULL;
|
||||||
|
struct remote *remote;
|
||||||
|
const char **url;
|
||||||
|
int url_nr;
|
||||||
|
struct option options[] = {
|
||||||
|
OPT_BOOL('\0', "push", &push_mode,
|
||||||
|
N_("query push URLs rather than fetch URLs")),
|
||||||
|
OPT_BOOL('\0', "all", &all_mode,
|
||||||
|
N_("return all URLs")),
|
||||||
|
OPT_END()
|
||||||
|
};
|
||||||
|
argc = parse_options(argc, argv, NULL, options, builtin_remote_geturl_usage, 0);
|
||||||
|
|
||||||
|
if (argc != 1)
|
||||||
|
usage_with_options(builtin_remote_geturl_usage, options);
|
||||||
|
|
||||||
|
remotename = argv[0];
|
||||||
|
|
||||||
|
if (!remote_is_configured(remotename))
|
||||||
|
die(_("No such remote '%s'"), remotename);
|
||||||
|
remote = remote_get(remotename);
|
||||||
|
|
||||||
|
url_nr = 0;
|
||||||
|
if (push_mode) {
|
||||||
|
url = remote->pushurl;
|
||||||
|
url_nr = remote->pushurl_nr;
|
||||||
|
}
|
||||||
|
/* else fetch mode */
|
||||||
|
|
||||||
|
/* Use the fetch URL when no push URLs were found or requested. */
|
||||||
|
if (!url_nr) {
|
||||||
|
url = remote->url;
|
||||||
|
url_nr = remote->url_nr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!url_nr)
|
||||||
|
die(_("no URLs configured for remote '%s'"), remotename);
|
||||||
|
|
||||||
|
if (all_mode) {
|
||||||
|
for (i = 0; i < url_nr; i++)
|
||||||
|
printf_ln("%s", url[i]);
|
||||||
|
} else {
|
||||||
|
printf_ln("%s", *url);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int set_url(int argc, const char **argv)
|
static int set_url(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
int i, push_mode = 0, add_mode = 0, delete_mode = 0;
|
int i, push_mode = 0, add_mode = 0, delete_mode = 0;
|
||||||
|
@ -1606,6 +1663,8 @@ int cmd_remote(int argc, const char **argv, const char *prefix)
|
||||||
result = set_head(argc, argv);
|
result = set_head(argc, argv);
|
||||||
else if (!strcmp(argv[0], "set-branches"))
|
else if (!strcmp(argv[0], "set-branches"))
|
||||||
result = set_branches(argc, argv);
|
result = set_branches(argc, argv);
|
||||||
|
else if (!strcmp(argv[0], "get-url"))
|
||||||
|
result = get_url(argc, argv);
|
||||||
else if (!strcmp(argv[0], "set-url"))
|
else if (!strcmp(argv[0], "set-url"))
|
||||||
result = set_url(argc, argv);
|
result = set_url(argc, argv);
|
||||||
else if (!strcmp(argv[0], "show"))
|
else if (!strcmp(argv[0], "show"))
|
||||||
|
|
|
@ -919,6 +919,19 @@ test_expect_success 'new remote' '
|
||||||
cmp expect actual
|
cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
get_url_test () {
|
||||||
|
cat >expect &&
|
||||||
|
git remote get-url "$@" >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success 'get-url on new remote' '
|
||||||
|
echo foo | get_url_test someremote &&
|
||||||
|
echo foo | get_url_test --all someremote &&
|
||||||
|
echo foo | get_url_test --push someremote &&
|
||||||
|
echo foo | get_url_test --push --all someremote
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'remote set-url bar' '
|
test_expect_success 'remote set-url bar' '
|
||||||
git remote set-url someremote bar &&
|
git remote set-url someremote bar &&
|
||||||
echo bar >expect &&
|
echo bar >expect &&
|
||||||
|
@ -961,6 +974,13 @@ test_expect_success 'remote set-url --push zot' '
|
||||||
cmp expect actual
|
cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'get-url with different urls' '
|
||||||
|
echo baz | get_url_test someremote &&
|
||||||
|
echo baz | get_url_test --all someremote &&
|
||||||
|
echo zot | get_url_test --push someremote &&
|
||||||
|
echo zot | get_url_test --push --all someremote
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'remote set-url --push qux zot' '
|
test_expect_success 'remote set-url --push qux zot' '
|
||||||
git remote set-url --push someremote qux zot &&
|
git remote set-url --push someremote qux zot &&
|
||||||
echo qux >expect &&
|
echo qux >expect &&
|
||||||
|
@ -995,6 +1015,14 @@ test_expect_success 'remote set-url --push --add aaa' '
|
||||||
cmp expect actual
|
cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'get-url on multi push remote' '
|
||||||
|
echo foo | get_url_test --push someremote &&
|
||||||
|
get_url_test --push --all someremote <<-\EOF
|
||||||
|
foo
|
||||||
|
aaa
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'remote set-url --push bar aaa' '
|
test_expect_success 'remote set-url --push bar aaa' '
|
||||||
git remote set-url --push someremote bar aaa &&
|
git remote set-url --push someremote bar aaa &&
|
||||||
echo foo >expect &&
|
echo foo >expect &&
|
||||||
|
@ -1039,6 +1067,14 @@ test_expect_success 'remote set-url --add bbb' '
|
||||||
cmp expect actual
|
cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'get-url on multi fetch remote' '
|
||||||
|
echo baz | get_url_test someremote &&
|
||||||
|
get_url_test --all someremote <<-\EOF
|
||||||
|
baz
|
||||||
|
bbb
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'remote set-url --delete .*' '
|
test_expect_success 'remote set-url --delete .*' '
|
||||||
test_must_fail git remote set-url --delete someremote .\* &&
|
test_must_fail git remote set-url --delete someremote .\* &&
|
||||||
echo "YYY" >expect &&
|
echo "YYY" >expect &&
|
||||||
|
@ -1108,6 +1144,7 @@ test_extra_arg rename origin newname
|
||||||
test_extra_arg remove origin
|
test_extra_arg remove origin
|
||||||
test_extra_arg set-head origin master
|
test_extra_arg set-head origin master
|
||||||
# set-branches takes any number of args
|
# set-branches takes any number of args
|
||||||
|
test_extra_arg get-url origin newurl
|
||||||
test_extra_arg set-url origin newurl oldurl
|
test_extra_arg set-url origin newurl oldurl
|
||||||
# show takes any number of args
|
# show takes any number of args
|
||||||
# prune takes any number of args
|
# prune takes any number of args
|
||||||
|
|
Loading…
Reference in New Issue