]> source.dussan.org Git - jgit.git/commit
blame: Un-break isFile check in tree walk 54/27754/2
authorJonathan Nieder <jrn@google.com>
Mon, 2 Jun 2014 19:03:45 +0000 (12:03 -0700)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 4 Jun 2014 14:26:01 +0000 (10:26 -0400)
commit9b46a47fb7eb68967f1a2550c5393f54d1e255ad
treeb85b3cce65cafe0734258654da4265808ed639d0
parent386dff22716ab33e724ceb9e2de287f43bd88447
blame: Un-break isFile check in tree walk

Originally, blame's walk to find a scapegoat to blame for a file
walking backward from a commit used the test

treeWalk.getFileMode(0).getObjectType() != OBJ_BLOB

to throw out gitlink (submodule) entries.  Later, 52500d3264d2 (blame:
Micro optimize blob lookup in tree, 2014-04-17) changed that test to

(treeWalk.getRawMode(0) & TYPE_FILE) != TYPE_FILE

These checks are not the same, though: the older test accepts files
and symlinks, while the newer one accepts files, symlinks, and gitlink
(submodule) entries.  This is particularly broken in the submodule
case --- trying to parse the referred-to commit as a blob produces

caught an exception: GET /gerrit/+blame/master/plugins/reviewnotes HTTP/1.1
org.eclipse.jgit.errors.MissingObjectException: Missing blob 61702414c046dd6b811c9137b765f9db422f83db

Stick to just (possibly executable) files instead.  Symlinks are not
line-oriented data so blame on a symlink is not likely to be useful.

A quick grep for '& TYPE_' doesn't find any other instances of this
bug.

Change-Id: Iebcc91f1bee3c91adda51dccd6372e8302bf23fe
Signed-off-by: Jonathan Nieder <jrn@google.com>
org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java