upload-pack: make reachable() more generic

In anticipation of moving the reachable() method to commit-reach.c,
modify the prototype to be more generic to flags known outside of
upload-pack.c. Also rename 'want' to 'from' to make the statement
more clear outside of the context of haves/wants negotiation.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee 2018-07-20 16:33:09 +00:00 committed by Junio C Hamano
parent 920f93ca1c
commit f044bb49ad

View File

@ -336,17 +336,18 @@ static int got_oid(const char *hex, struct object_id *oid)
return 0; return 0;
} }
static int reachable(struct commit *want) static int reachable(struct commit *from, unsigned int with_flag,
unsigned int assign_flag)
{ {
struct prio_queue work = { compare_commits_by_commit_date }; struct prio_queue work = { compare_commits_by_commit_date };
prio_queue_put(&work, want); prio_queue_put(&work, from);
while (work.nr) { while (work.nr) {
struct commit_list *list; struct commit_list *list;
struct commit *commit = prio_queue_get(&work); struct commit *commit = prio_queue_get(&work);
if (commit->object.flags & THEY_HAVE) { if (commit->object.flags & with_flag) {
want->object.flags |= COMMON_KNOWN; from->object.flags |= assign_flag;
break; break;
} }
if (!commit->object.parsed) if (!commit->object.parsed)
@ -362,10 +363,10 @@ static int reachable(struct commit *want)
prio_queue_put(&work, parent); prio_queue_put(&work, parent);
} }
} }
want->object.flags |= REACHABLE; from->object.flags |= REACHABLE;
clear_commit_marks(want, REACHABLE); clear_commit_marks(from, REACHABLE);
clear_prio_queue(&work); clear_prio_queue(&work);
return (want->object.flags & COMMON_KNOWN); return (from->object.flags & assign_flag);
} }
static int ok_to_give_up(void) static int ok_to_give_up(void)
@ -390,7 +391,7 @@ static int ok_to_give_up(void)
want_obj.objects[i].item->flags |= COMMON_KNOWN; want_obj.objects[i].item->flags |= COMMON_KNOWN;
continue; continue;
} }
if (!reachable((struct commit *)want)) if (!reachable((struct commit *)want, THEY_HAVE, COMMON_KNOWN))
return 0; return 0;
} }
return 1; return 1;