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