Jeff King <[email protected]> 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.