gitk: Make "show origin of this line" work on fake commits
commitfc4977e1b989503c6dcfbc527cda2458d63d0400
authorPaul Mackerras <paulus@samba.org>
Tue, 4 Nov 2008 01:57:44 +0000 (4 12:57 +1100)
committerPaul Mackerras <paulus@samba.org>
Tue, 4 Nov 2008 01:57:44 +0000 (4 12:57 +1100)
tree4417becbd6e41cbbc5f725d3e56e6e9002a3e971
parent8b07dca18a498c5900edc717d216e841d6c15dc9
gitk: Make "show origin of this line" work on fake commits

This makes the "Show origin of this line" menu item work correctly
on the fake commits that gitk shows for local uncommitted changes.
With the fake commit for changes that aren't checked in to the index,
we can actually get a 3-way diff shown, which means we might have to
blame either the parent or the commit being merged in (which we get
from .git/MERGE_HEAD).

If the parent is the fake commit which shows the changes that have
been checked in to the index, then we need to get the SHA1 of the blob
for the version of the file that is in the index, then use git cat-file
blob to get the contents of the blob, and give that to git blame with --contents - so that git blame will do the blame on the index version
of the file.  In that case, we might get the all-zeroes SHA1 back from
git blame, meaning that the line is new in the index version of the
file, so then we have to use $nullid2 (the pseudo-SHA1 of the fake
commit for the checked-in changes).

Signed-off-by: Paul Mackerras <paulus@samba.org>
gitk