Fix PatchListLoader for submodules
Submodule SHA-1s don't exist in the repo, so this was throwing MissingObjectExceptions trying to load the PatchListEntry. Ensure the object is blob before attempting to read its size, and treat non-blobs as size 0 for the purposes of computing a size delta. Change-Id: I239329e1bdede7db2b436628cd78967392dca164
This commit is contained in:
@@ -196,15 +196,16 @@ public class PatchListLoader implements Callable<PatchList> {
|
||||
entries.add(newCommitMessage(cmp, reader,
|
||||
againstParent ? null : aCommit, b));
|
||||
for (int i = 0; i < cnt; i++) {
|
||||
DiffEntry diffEntry = diffEntries.get(i);
|
||||
if (paths == null || paths.contains(diffEntry.getNewPath())
|
||||
|| paths.contains(diffEntry.getOldPath())) {
|
||||
DiffEntry e = diffEntries.get(i);
|
||||
if (paths == null || paths.contains(e.getNewPath())
|
||||
|| paths.contains(e.getOldPath())) {
|
||||
|
||||
FileHeader fh = toFileHeader(key, df, diffEntry);
|
||||
long sizeDelta =
|
||||
getFileSize(repo, reader, diffEntry.getNewPath(), bTree)
|
||||
- getFileSize(repo, reader, diffEntry.getOldPath(), aTree);
|
||||
entries.add(newEntry(aTree, fh, sizeDelta));
|
||||
FileHeader fh = toFileHeader(key, df, e);
|
||||
long oldSize =
|
||||
getFileSize(repo, reader, e.getOldMode(), e.getOldPath(), aTree);
|
||||
long newSize =
|
||||
getFileSize(repo, reader, e.getNewMode(), e.getNewPath(), bTree);
|
||||
entries.add(newEntry(aTree, fh, newSize - oldSize));
|
||||
}
|
||||
}
|
||||
return new PatchList(a, b, againstParent,
|
||||
@@ -213,7 +214,10 @@ public class PatchListLoader implements Callable<PatchList> {
|
||||
}
|
||||
|
||||
private static long getFileSize(Repository repo, ObjectReader reader,
|
||||
String path, RevTree t) throws IOException {
|
||||
FileMode mode, String path, RevTree t) throws IOException {
|
||||
if (!isBlob(mode)) {
|
||||
return 0;
|
||||
}
|
||||
try (TreeWalk tw = TreeWalk.forPath(reader, path, t)) {
|
||||
return tw != null
|
||||
? repo.open(tw.getObjectId(0), OBJ_BLOB).getSize()
|
||||
@@ -221,6 +225,11 @@ public class PatchListLoader implements Callable<PatchList> {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isBlob(FileMode mode) {
|
||||
int t = mode.getBits() & FileMode.TYPE_MASK;
|
||||
return t == FileMode.TYPE_FILE || t == FileMode.TYPE_SYMLINK;
|
||||
}
|
||||
|
||||
private FileHeader toFileHeader(PatchListKey key,
|
||||
final DiffFormatter diffFormatter, final DiffEntry diffEntry)
|
||||
throws IOException {
|
||||
|
||||
Reference in New Issue
Block a user