Skip to content
  • Thomas Rast's avatar
    log: use true parents for diff when walking reflogs · 838f9a15
    Thomas Rast authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The reflog walking logic (git log -g) replaces the true parent list
    with the preceding commit in the reflog.  This results in bogus commit
    diffs when combined with options such as -p; the diff is against the
    reflog predecessor, not the parent of the commit.
    
    Save the true parents on the side, extending the functions from the
    previous commit.  The diff logic picks them up and uses them to show
    the correct diffs.
    
    We do have to be somewhat careful about repeated calling of
    save_parents(), since the reflog may list a commit more than once.  We
    now store (commit_list*)-1 to distinguish the "not saved yet" and
    "root commit" cases.  This lets us preserve an empty parent list even
    if save_parents() is repeatedly called.
    
    Suggested-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarThomas Rast <trast@inf.ethz.ch>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    838f9a15