Jeff King <peff@xxxxxxxx> writes: > So I'd be tempted to just ditch the whole thing and teach > get_revision_1() to just walk through the list of logs, rather than this > weird "add a pending commit and then try to figure out which reflog it > referred to". For instance, right now: > > git log -g HEAD $(git symbolic-ref HEAD) > > only shows _one_ reflog. The patch below is the direction I'm thinking. > It fails two tests, but haven't dug yet. > > --- > reflog-walk.c | 112 +++++++++-------------------------- > reflog-walk.h | 4 +- > revision.c | 24 ++++---- > 3 files changed, 43 insertions(+), 97 deletions(-) Yeah, I agree with the "we now show diffs with true parents" reasoning, and I like the above code reduction, obviously ;-) > @@ -3114,18 +3112,20 @@ static void track_linear(struct rev_info *revs, struct commit *commit) > > static struct commit *get_revision_1(struct rev_info *revs) > { > + if (revs->reflog_info) { > + struct commit *commit = next_reflog_entry(revs->reflog_info); > + if (commit) { > + commit->object.flags &= ~(ADDED | SEEN | SHOWN); > + return commit; > + } > + } > + > if (!revs->commits) > return NULL; > > do { > struct commit *commit = pop_commit(&revs->commits); > > - if (revs->reflog_info) { > - save_parents(revs, commit); > - fake_reflog_parent(revs->reflog_info, commit); > - commit->object.flags &= ~(ADDED | SEEN | SHOWN); > - } > - > /* > * If we haven't done the list limiting, we need to look at > * the parents here. We also need to do the date-based limiting This part of the patch I can 100% agree with ;-) I do not think command line parser does not allow "log -g maint..master" so all the "limited" processing the remainder of get_revision_1() does shouldn't matter. I however think pathspec will affect simplify_commit() and suspect that "git log -g -20 HEAD path" will behave differently. Perhaps the difference is "it used to use path in an unexplainable way, now it ignores", in which case this is an improvement. Thanks.