summaryrefslogtreecommitdiff
path: root/walker.c
diff options
context:
space:
mode:
authorDaniel Barkalow <barkalow@iabervon.org>2008-04-26 15:53:09 -0400
committerJunio C Hamano <gitster@pobox.com>2008-04-26 17:36:17 -0700
commitc13b2633f49e3e61b37973204793a4d9ef981175 (patch)
tree54f173438e506190b6bbc02f574ec0ab6b8339d7 /walker.c
parent36c79d2bf893b9957688a6c8c13cc0bf0589e596 (diff)
downloadgit-c13b2633f49e3e61b37973204793a4d9ef981175.tar.gz
Make walker.fetch_ref() take a struct ref.
This simplifies a few things, makes a few things slightly more complicated, but, more importantly, allows that, when struct ref can represent a symref, http_fetch_ref() can return one. Incidentally makes the string that http_fetch_ref() gets include "refs/" (if appropriate), because that's how the name field of struct ref works. As far as I can tell, the usage in walker:interpret_target() wouldn't have worked previously, if it ever would have been used, which it wouldn't (since the fetch process uses the hash instead of the name of the ref there). Signed-off-by: Daniel Barkalow <barkalow@iabervon.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'walker.c')
-rw-r--r--walker.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/walker.c b/walker.c
index c10eca8826..fa96a7c7d2 100644
--- a/walker.c
+++ b/walker.c
@@ -190,9 +190,14 @@ static int interpret_target(struct walker *walker, char *target, unsigned char *
if (!get_sha1_hex(target, sha1))
return 0;
if (!check_ref_format(target)) {
- if (!walker->fetch_ref(walker, target, sha1)) {
+ struct ref *ref = alloc_ref(strlen(target));
+ strcpy(ref->name, target);
+ if (!walker->fetch_ref(walker, ref)) {
+ hashcpy(sha1, ref->old_sha1);
+ free(ref);
return 0;
}
+ free(ref);
}
return -1;
}