[PATCH 5/5] remote: use exact HEAD lookup if it is available
- From
Jeff King <peff@peff.net>
- Date
- Feb 15, 2009, 06:18 UTC
- Message-ID
- <20090215061818.GE30414@coredump.intra.peff.net>
- In-Reply-To
- <20090215060815.GA7473@coredump.intra.peff.net>
Our usual method for determining the ref pointed to by HEAD is to compare HEAD's sha1 to the sha1 of all refs, trying to find a unique match.
However, some transports actually get to look at HEAD directly; we should make use of that information when it is available. Currently, only http remotes support this feature.
Signed-off-by: Jeff King <peff@peff.net> --- A possible 6/5 would be to do something similar for local repos (or resurrecting the HEAD proposal).
remote.c | 10 ++++++++++ t/t5550-http-fetch.sh | 11 +++++++++++ 2 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/remote.c b/remote.c index 7ba1bff..a96a910 100644 --- a/remote.c +++ b/remote.c @@ -1395,6 +1395,16 @@ struct ref *guess_remote_head(const struct ref *head, if (!head) return NULL; + /* + * Some transports support directly peeking at + * where HEAD points; if that is the case, then + * we don't have to guess. + */ + if (head->symref) { + r = find_ref_by_name(refs, head->symref); + return r ? copy_ref_with_peer(r) : NULL; + } + /* If refs/heads/master could be right, it is. */ if (!all) { const struct ref *m; diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh index b6e6ec9..05b1b62 100755 --- a/t/t5550-http-fetch.sh +++ b/t/t5550-http-fetch.sh @@ -42,5 +42,16 @@ test_expect_success 'fetch changes via http' ' test_cmp file clone/file ' +test_expect_success 'http remote detects correct HEAD' ' + git push public master:other && + (cd clone && + git remote set-head origin -d && + git remote set-head origin -a && + git symbolic-ref refs/remotes/origin/HEAD > output && + echo refs/remotes/origin/master > expect && + test_cmp expect output + ) +' + stop_httpd test_done
-- 1.6.2.rc0.256.gf004c.dirty