builtin-remote: Show push urls as well

Teach builtin remote to show push urls also when asked to
"show" a specific remote.

This improves upon the standard display mode: multiple specified "url"s
mean that the first one is for fetching, all are used for pushing. We
make this clearer now by displaying the first one prefixed with "Fetch
URL", and all "url"s (or, if present, all "pushurl"s) prefixed with
"Push  URL".

Example with "one" having one url, "two" two urls, "three" one url and
one pushurl (URL part only):

* remote one
  Fetch URL: hostone.com:/somepath/repoone.git
  Push  URL: hostone.com:/somepath/repoone.git
* remote two
  Fetch URL: hosttwo.com:/somepath/repotwo.git
  Push  URL: hosttwo.com:/somepath/repotwo.git
  Push  URL: hosttwobackup.com:/somewheresafe/repotwo.git
* remote three
  Fetch URL: http://hostthree.com/otherpath/repothree.git
  Push  URL: hostthree.com:/pathforpushes/repothree.git

Also, adjust t5505 accordingly and make it test for the new output.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael J Gruber 2009-06-13 18:29:10 +02:00 committed by Junio C Hamano
parent 056724c624
commit 857f8c30d7
2 changed files with 22 additions and 8 deletions

View file

@ -1002,15 +1002,25 @@ static int show(int argc, const char **argv)
info.list = &info_list; info.list = &info_list;
for (; argc; argc--, argv++) { for (; argc; argc--, argv++) {
int i; int i;
const char **url;
int url_nr;
get_remote_ref_states(*argv, &states, query_flag); get_remote_ref_states(*argv, &states, query_flag);
printf("* remote %s\n", *argv); printf("* remote %s\n", *argv);
if (states.remote->url_nr) { printf(" Fetch URL: %s\n", states.remote->url_nr > 0 ?
for (i=0; i < states.remote->url_nr; i++) states.remote->url[0] : "(no URL)");
printf(" URL: %s\n", states.remote->url[i]); if (states.remote->pushurl_nr) {
} else url = states.remote->pushurl;
printf(" URL: %s\n", "(no URL)"); url_nr = states.remote->pushurl_nr;
} else {
url = states.remote->url;
url_nr = states.remote->url_nr;
}
for (i=0; i < url_nr; i++)
printf(" Push URL: %s\n", url[i]);
if (!i)
printf(" Push URL: %s\n", "(no URL)");
if (no_query) if (no_query)
printf(" HEAD branch: (not queried)\n"); printf(" HEAD branch: (not queried)\n");
else if (!states.heads.nr) else if (!states.heads.nr)

View file

@ -135,7 +135,8 @@ EOF
cat > test/expect << EOF cat > test/expect << EOF
* remote origin * remote origin
URL: $(pwd)/one Fetch URL: $(pwd)/one
Push URL: $(pwd)/one
HEAD branch: master HEAD branch: master
Remote branches: Remote branches:
master new (next fetch will store in remotes/origin) master new (next fetch will store in remotes/origin)
@ -151,7 +152,8 @@ cat > test/expect << EOF
master pushes to master (local out of date) master pushes to master (local out of date)
master pushes to upstream (create) master pushes to upstream (create)
* remote two * remote two
URL: ../two Fetch URL: ../two
Push URL: ../three
HEAD branch (remote HEAD is ambiguous, may be one of the following): HEAD branch (remote HEAD is ambiguous, may be one of the following):
another another
master master
@ -173,6 +175,7 @@ test_expect_success 'show' '
git branch --track rebase origin/master && git branch --track rebase origin/master &&
git branch -d -r origin/master && git branch -d -r origin/master &&
git config --add remote.two.url ../two && git config --add remote.two.url ../two &&
git config --add remote.two.pushurl ../three &&
git config branch.rebase.rebase true && git config branch.rebase.rebase true &&
git config branch.octopus.merge "topic-a topic-b topic-c" && git config branch.octopus.merge "topic-a topic-b topic-c" &&
(cd ../one && (cd ../one &&
@ -191,7 +194,8 @@ test_expect_success 'show' '
cat > test/expect << EOF cat > test/expect << EOF
* remote origin * remote origin
URL: $(pwd)/one Fetch URL: $(pwd)/one
Push URL: $(pwd)/one
HEAD branch: (not queried) HEAD branch: (not queried)
Remote branches: (status not queried) Remote branches: (status not queried)
master master