[PATCH 6/6] push, send-pack: use same rules as git-rev-parse to resolve refspecs
- From
Steffen Prohaska <prohaska@zib.de>
- Date
- Oct 14, 2007, 08:54 UTC
- Message-ID
- <11923520862307-git-send-email-prohaska@zib.de>
- In-Reply-To
- <11923520853014-git-send-email-prohaska@zib.de>
This commit changes the rules for resolving refspecs to match the rules for resolving refs in rev-parse. git-rev-parse uses clear rules to resolve a short ref to its full name, which are well documented. The rules for resolving refspecs documented in git-send-pack were less strict and harder to understand. This commit replaces them by the rules of git-rev-parse.
The unified rules are easier to understand and better resolve ambiguous cases. You can now push from a repository containing several branches ending on the same short name.
Note, this breaks existing setups. For example "master" will no longer resolve to "origin/master".
TODO: this patch does not yet include a modified documentation of git-send-pack. I prefer to wait for some comments first.
Signed-off-by: Steffen Prohaska <prohaska@zib.de> --- remote.c | 5 +---- t/t5516-fetch-push.sh | 12 +++++++++++- 2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/remote.c b/remote.c index 58bc019..09cb611 100644 --- a/remote.c +++ b/remote.c @@ -383,10 +383,7 @@ static int count_refspec_match(const char *pattern, char *name = refs->name; int namelen = strlen(name); - if (namelen < patlen || - memcmp(name + namelen - patlen, pattern, patlen)) - continue; - if (namelen != patlen && name[namelen - patlen - 1] != '/') + if (ref_cmp_full_short(name, pattern)) continue; /* A match is "weak" if it is with refs outside diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index 97a032e..2664060 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -175,11 +175,21 @@ test_expect_success 'push with no ambiguity (1)' ' test_expect_success 'push with no ambiguity (2)' ' mk_test remotes/origin/master && - git push testrepo master:master && + git push testrepo master:origin/master && check_push_result $the_commit remotes/origin/master ' +test_expect_success 'push with colon-less refspec, no ambiguity' ' + + mk_test heads/master heads/t/master && + git branch -f t/master master && + git push testrepo master && + check_push_result $the_commit heads/master && + check_push_result $the_first_commit heads/t/master + +' + test_expect_success 'push with weak ambiguity (1)' ' mk_test heads/master remotes/origin/master &&
-- 1.5.3.4.224.gc6b84