remote.c: fix "git push" weak match disambiguation
commit6125796f7d6e8b84431f92c13d7e79bd30f94f53
authorJunio C Hamano <gitster@pobox.com>
Sat, 9 Jun 2007 08:23:53 +0000 (9 01:23 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 9 Jun 2007 18:53:01 +0000 (9 11:53 -0700)
treedded805dbe76e3b3f932f204a9bc61d9c74e85bb
parent3c8b7df1ba6dd2093672afc460fd5de0e755f162
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>
remote.c
t/t5516-fetch-push.sh