summaryrefslogtreecommitdiff
path: root/remote.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-06-09 08:23:53 (GMT)
committerJunio C Hamano <gitster@pobox.com>2007-06-09 18:53:01 (GMT)
commit6125796f7d6e8b84431f92c13d7e79bd30f94f53 (patch)
treedded805dbe76e3b3f932f204a9bc61d9c74e85bb /remote.c
parent3c8b7df1ba6dd2093672afc460fd5de0e755f162 (diff)
downloadgit-6125796f7d6e8b84431f92c13d7e79bd30f94f53.zip
git-6125796f7d6e8b84431f92c13d7e79bd30f94f53.tar.gz
git-6125796f7d6e8b84431f92c13d7e79bd30f94f53.tar.bz2
remote.c: fix "git push" weak match disambiguation
When "git push A:B" is given, and A (or B) is not a full refname that begins with refs/, we require an unambiguous match with an existing ref. For this purpose, a match with a local branch or a tag (i.e. refs/heads/A and refs/tags/A) is called a "strong match", and any other match is called a "weak match". A partial refname is unambiguous when there is only one strong match with any number of weak matches, or when there is only one weak match and no other match. However, as reported by Sparse with Ramsay Jones recently, count_refspec_match() function had a bug where a variable in an inner block masked a different variable of the same name, which caused the weak matches to be ignored. This fixes it, and adds tests for the fix. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'remote.c')
-rw-r--r--remote.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/remote.c b/remote.c
index 30abdbb..120df36 100644
--- a/remote.c
+++ b/remote.c
@@ -333,7 +333,6 @@ static int count_refspec_match(const char *pattern,
for (weak_match = match = 0; refs; refs = refs->next) {
char *name = refs->name;
int namelen = strlen(name);
- int weak_match;
if (namelen < patlen ||
memcmp(name + namelen - patlen, pattern, patlen))