On Fri, Jan 15, 2010 at 12:17:45PM -0500, Jeff King wrote: > The patch below is squash-able, but note that the final test, "git push > -u HEAD" is marked as broken. We should probably support that. I suspect > is is an issue of dereferencing symrefs before doing the > prefixcmp("refs/heads/", ...) but I haven't checked yet. The patch below fixes it, but I am not 100% happy with it. Calling resolve_ref means we actually bother to look up the ref again, which is wasted effort. The ref struct has a "symref" field which should contain this information, but for some reason it is not recorded. So we can probably do better by simply recording the information properly when we resolve the ref in the first place. Unfortunately, I don't have time to look at it anymore right now, so it will have to wait. diff --git a/t/t5523-push-upstream.sh b/t/t5523-push-upstream.sh index e977553..d43473f 100755 --- a/t/t5523-push-upstream.sh +++ b/t/t5523-push-upstream.sh @@ -39,7 +39,7 @@ test_expect_success 'push -u --all' ' check_config all2 upstream refs/heads/all2 ' -test_expect_failure 'push -u HEAD' ' +test_expect_success 'push -u HEAD' ' git checkout -b headbranch && git push -u upstream HEAD && check_config headbranch upstream refs/heads/headbranch diff --git a/transport.c b/transport.c index 956d2ed..01ff364 100644 --- a/transport.c +++ b/transport.c @@ -140,6 +140,7 @@ static void set_upstreams(struct transport *trans, struct ref *refs) { struct ref *i; for (i = refs; i; i = i->next) { + const char *branch; /* * Check suitability for tracking. Must be successful / * alreay up-to-date ref create/modify (not delete) and @@ -152,14 +153,20 @@ static void set_upstreams(struct transport *trans, struct ref *refs) continue; if (!i->new_sha1 || is_null_sha1(i->new_sha1)) continue; - if (prefixcmp(i->peer_ref->name, "refs/heads/")) - continue; if (prefixcmp(i->name, "refs/heads/")) continue; + if (!prefixcmp(i->peer_ref->name, "refs/heads/")) + branch = i->peer_ref->name; + else { + unsigned char sha1[20]; + branch = resolve_ref(i->peer_ref->name, sha1, 1, NULL); + if (!branch || prefixcmp(branch, "refs/heads/")) + continue; + } + install_branch_config(BRANCH_CONFIG_VERBOSE, - i->peer_ref->name + 11, trans->remote->name, - i->name); + branch + 11, trans->remote->name, i->name); } } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html