summaryrefslogtreecommitdiff
path: root/fetch-pack.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2015-03-28 09:33:08 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2015-03-28 09:33:08 -0700
commit591a1daa7cdfd40ce76d0afcca05a7a648e73f3d (patch)
tree3a7233ef14b8c784526b2b2c497ae1ede1ac1ae7 /fetch-pack.c
parentMerge branch 'tg/fix-check-order-with-split-index' into maint (diff)
parentfetch-pack: remove dead assignment to ref->new_sha1 (diff)
downloadtgif-591a1daa7cdfd40ce76d0afcca05a7a648e73f3d.tar.xz
Merge branch 'jk/fetch-pack' into maint
"git fetch" that fetches a commit using the allow-tip-sha1-in-want extension could have failed to fetch all the requested refs. * jk/fetch-pack: fetch-pack: remove dead assignment to ref->new_sha1 fetch_refs_via_pack: free extra copy of refs filter_ref: make a copy of extra "sought" entries filter_ref: avoid overwriting ref->old_sha1 with garbage
Diffstat (limited to 'fetch-pack.c')
-rw-r--r--fetch-pack.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fetch-pack.c b/fetch-pack.c
index 655ee64256..48526aa54b 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -544,16 +544,19 @@ static void filter_refs(struct fetch_pack_args *args,
/* Append unmatched requests to the list */
if (allow_tip_sha1_in_want) {
for (i = 0; i < nr_sought; i++) {
+ unsigned char sha1[20];
+
ref = sought[i];
if (ref->matched)
continue;
- if (get_sha1_hex(ref->name, ref->old_sha1))
+ if (get_sha1_hex(ref->name, sha1) ||
+ ref->name[40] != '\0' ||
+ hashcmp(sha1, ref->old_sha1))
continue;
ref->matched = 1;
- *newtail = ref;
- ref->next = NULL;
- newtail = &ref->next;
+ *newtail = copy_ref(ref);
+ newtail = &(*newtail)->next;
}
}
*refs = newlist;
@@ -625,7 +628,6 @@ static int everything_local(struct fetch_pack_args *args,
for (retval = 1, ref = *refs; ref ; ref = ref->next) {
const unsigned char *remote = ref->old_sha1;
- unsigned char local[20];
struct object *o;
o = lookup_object(remote);
@@ -638,8 +640,6 @@ static int everything_local(struct fetch_pack_args *args,
ref->name);
continue;
}
-
- hashcpy(ref->new_sha1, local);
if (!args->verbose)
continue;
fprintf(stderr,