Re: [PATCH 1/3] commit-reach: implement get_reachable_subset
- From
Derrick Stolee <stolee@gmail.com>
- Date
- Oct 31, 2018, 11:54 UTC
- Message-ID
- <d42eceda-0178-ce48-1ccd-7a1842e897ed@gmail.com>
- In-Reply-To
- <CABPp-BHbOWXsnUSdcptyQ_Cn_PnqH4On+Q3zWNZQV4QHgYhqpg@mail.gmail.com>
On 10/31/2018 2:07 AM, Elijah Newren wrote:
Show 33 quoted lines
> On Tue, Oct 30, 2018 at 7:16 AM Derrick Stolee via GitGitGadget
> <gitgitgadget@gmail.com> wrote:
>> --- a/commit-reach.c
>> +++ b/commit-reach.c
>> @@ -688,3 +688,73 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
>> object_array_clear(&from_objs);
>> return result;
>> }
>> +
>> +struct commit_list *get_reachable_subset(struct commit **from, int nr_from,
>> + struct commit **to, int nr_to,
>> + int reachable_flag)
>> +{
>> + struct commit **item;
>> + struct commit *current;
>> + struct commit_list *found_commits = NULL;
>> + struct commit **to_last = to + nr_to;
>> + struct commit **from_last = from + nr_from;
>> + uint32_t min_generation = GENERATION_NUMBER_INFINITY;
>> + int num_to_find = 0;
>> +
>> + struct prio_queue queue = { compare_commits_by_gen_then_commit_date };
>> +
>> + for (item = to; item < to_last; item++) {
>> + struct commit *c = *item;
>> +
>> + parse_commit(c);
>> + if (c->generation < min_generation)
>> + min_generation = c->generation;
> So, when we don't have a commit-graph, is c->generation just going to
> be 0, making min_generation also be 0? (meaning we get no possible
> speed benefit from the commit-graph, since we just don't have that
> information available)?If we don't have a commit-graph, then we can only terminate the loop early if we discover all of the commits (num_to_find == 0).Otherwise, we need to walk the entire graph in order to determine non-reachability. This relates to Junio's point about in_merge_bases_many(), which I'll respond to his message in more detail about that.
Thanks, -Stolee