fetch: describe new refs based on where it came from

update_local_ref() used to say "[new branch]" when we stored a new ref
outside refs/tags/ hierarchy, but the message is more about what we
fetched, so use the refname at the origin to make that decision.

Also, only call a new ref a "branch" if it's under refs/heads/.

Signed-off-by: Marc Branchaud <marcnarc@xiplink.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Marc Branchaud 2012-04-16 18:08:50 -04:00 committed by Junio C Hamano
parent 6da618d5c2
commit 0997adaa74
2 changed files with 41 additions and 3 deletions

View File

@ -294,16 +294,24 @@ static int update_local_ref(struct ref *ref,
const char *msg; const char *msg;
const char *what; const char *what;
int r; int r;
if (!strncmp(ref->name, "refs/tags/", 10)) { /*
* Nicely describe the new ref we're fetching.
* Base this on the remote's ref name, as it's
* more likely to follow a standard layout.
*/
const char *name = remote_ref ? remote_ref->name : "";
if (!prefixcmp(name, "refs/tags/")) {
msg = "storing tag"; msg = "storing tag";
what = _("[new tag]"); what = _("[new tag]");
} } else if (!prefixcmp(name, "refs/heads/")) {
else {
msg = "storing head"; msg = "storing head";
what = _("[new branch]"); what = _("[new branch]");
if ((recurse_submodules != RECURSE_SUBMODULES_OFF) && if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
(recurse_submodules != RECURSE_SUBMODULES_ON)) (recurse_submodules != RECURSE_SUBMODULES_ON))
check_for_new_submodule_commits(ref->new_sha1); check_for_new_submodule_commits(ref->new_sha1);
} else {
msg = "storing ref";
what = _("[new ref]");
} }
r = s_update_ref(msg, ref, 0); r = s_update_ref(msg, ref, 0);

View File

@ -162,6 +162,36 @@ test_expect_success 'fetch following tags' '
' '
test_expect_success 'fetch uses remote ref names to describe new refs' '
cd "$D" &&
git init descriptive &&
(
cd descriptive &&
git config remote.o.url .. &&
git config remote.o.fetch "refs/heads/*:refs/crazyheads/*" &&
git config --add remote.o.fetch "refs/others/*:refs/heads/*" &&
git fetch o
) &&
git tag -a -m "Descriptive tag" descriptive-tag &&
git branch descriptive-branch &&
git checkout descriptive-branch &&
echo "Nuts" >crazy &&
git add crazy &&
git commit -a -m "descriptive commit" &&
git update-ref refs/others/crazy HEAD &&
(
cd descriptive &&
git fetch o 2>actual &&
grep " -> refs/crazyheads/descriptive-branch$" actual |
test_i18ngrep "new branch" &&
grep " -> descriptive-tag$" actual |
test_i18ngrep "new tag" &&
grep " -> crazy$" actual |
test_i18ngrep "new ref"
) &&
git checkout master
'
test_expect_success 'fetch must not resolve short tag name' ' test_expect_success 'fetch must not resolve short tag name' '
cd "$D" && cd "$D" &&