Be more careful tangling object chains while marking commits.
Also Johannes noticed we use parse_object to look up if we know that object already -- we should just ask the in-core object registry with lookup_object() for that. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
d6a73596e7
commit
f1f0a2be9f
14
fetch-pack.c
14
fetch-pack.c
@ -35,9 +35,12 @@ static int find_common(int fd[2], unsigned char *result_sha1,
|
|||||||
* local ref), we tell them we have it but do not have to
|
* local ref), we tell them we have it but do not have to
|
||||||
* tell them about its ancestors, which they already know
|
* tell them about its ancestors, which they already know
|
||||||
* about.
|
* about.
|
||||||
|
*
|
||||||
|
* We use lookup_object here because we are only
|
||||||
|
* interested in the case we *know* the object is
|
||||||
|
* reachable and we have already scanned it.
|
||||||
*/
|
*/
|
||||||
if (has_sha1_file(remote) &&
|
if (((o = lookup_object(remote)) != NULL) &&
|
||||||
((o = parse_object(remote)) != NULL) &&
|
|
||||||
(o->flags & COMPLETE)) {
|
(o->flags & COMPLETE)) {
|
||||||
struct commit_list *p;
|
struct commit_list *p;
|
||||||
struct commit *commit =
|
struct commit *commit =
|
||||||
@ -120,10 +123,13 @@ static int mark_complete(const char *path, const unsigned char *sha1)
|
|||||||
struct object *o = parse_object(sha1);
|
struct object *o = parse_object(sha1);
|
||||||
|
|
||||||
while (o && o->type == tag_type) {
|
while (o && o->type == tag_type) {
|
||||||
|
struct tag *t = (struct tag *) o;
|
||||||
|
if (!t->tagged)
|
||||||
|
break; /* broken repository */
|
||||||
o->flags |= COMPLETE;
|
o->flags |= COMPLETE;
|
||||||
o = parse_object(((struct tag *)o)->tagged->sha1);
|
o = parse_object(t->tagged->sha1);
|
||||||
}
|
}
|
||||||
if (o->type == commit_type) {
|
if (o && o->type == commit_type) {
|
||||||
struct commit *commit = (struct commit *)o;
|
struct commit *commit = (struct commit *)o;
|
||||||
commit->object.flags |= COMPLETE;
|
commit->object.flags |= COMPLETE;
|
||||||
insert_by_date(commit, &complete);
|
insert_by_date(commit, &complete);
|
||||||
|
Loading…
Reference in New Issue
Block a user