On Fri, Jul 07, 2017 at 05:14:07AM -0400, Jeff King wrote:

> @@ -3132,7 +3132,10 @@ static struct commit *get_revision_1(struct rev_info 
> *revs)
>                       if (revs->max_age != -1 &&
>                           (commit->date < revs->max_age))
>                               continue;
> -                     if (add_parents_to_list(revs, commit, &revs->commits, 
> NULL) < 0) {
> +
> +                     if (revs->reflog_info)
> +                             try_to_simplify_commit(revs, commit);
> +                     else if (add_parents_to_list(revs, commit, 
> &revs->commits, NULL) < 0) {
>                               if (!revs->ignore_missing_links)
>                                       die("Failed to traverse parents of 
> commit %s",
>                                               
> oid_to_hex(&commit->object.oid));

There's one other subtle change from v1 here. In my original, we called
try_to_simplify_commit() much later, and then we had to check whether it
marked the commit as TREESAME. That felt really hacky to me, and the
reason is because I was using the function wrong. The intent is for
try_to_simplify to be called earlier (i.e., here), when we start looking
at the commit's parents. And then the TREESAME flag it sets is later
picked up by get_commit_action(), which is called by simplify_commit(),
which is used later in get_revision_1().

So by calling try_to_simplify here, where it would normally be called
for a non-reflog walk, that's all we have to do. I don't think the
original patch had any visible bugs, but this way is much cleaner and
more future-proof.

-Peff

Reply via email to