Merge "Fix DiffFormatter NPEs for DiffEntry without content change" into stable-3.0

This commit is contained in:
Matthias Sohn 2013-05-16 18:41:52 -04:00 committed by Gerrit Code Review @ Eclipse.org
commit 84ad4957c6
2 changed files with 36 additions and 2 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2010, Google Inc.
* Copyright (C) 2010, 2013 Google Inc.
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@ -256,6 +256,35 @@ public void testCreateFileHeader_GitLink() throws Exception {
assertEquals(0, hh.toEditList().size());
}
@Test
public void testCreateFileHeaderWithoutIndexLine() throws Exception {
DiffEntry m = DiffEntry.modify(PATH_A);
m.oldMode = FileMode.REGULAR_FILE;
m.newMode = FileMode.EXECUTABLE_FILE;
FileHeader fh = df.toFileHeader(m);
String expected = DIFF + "a/src/a b/src/a\n" + //
"old mode 100644\n" + //
"new mode 100755\n";
assertEquals(expected, fh.getScriptText());
}
@Test
public void testCreateFileHeaderForRenameWithoutContentChange() throws Exception {
DiffEntry a = DiffEntry.delete(PATH_A, ObjectId.zeroId());
DiffEntry b = DiffEntry.add(PATH_B, ObjectId.zeroId());
DiffEntry m = DiffEntry.pair(ChangeType.RENAME, a, b, 100);
m.oldId = null;
m.newId = null;
FileHeader fh = df.toFileHeader(m);
String expected = DIFF + "a/src/a b/src/b\n" + //
"similarity index 100%\n" + //
"rename from src/a\n" + //
"rename to src/b\n";
assertEquals(expected, fh.getScriptText());
}
@Test
public void testDiff() throws Exception {
write(new File(db.getDirectory().getParent(), "test.txt"), "test");

View File

@ -912,6 +912,11 @@ private FormatResult createFormatResult(DiffEntry ent) throws IOException,
editList = new EditList();
type = PatchType.UNIFIED;
} else if (ent.getOldId() == null || ent.getNewId() == null) {
// Content not changed (e.g. only mode, pure rename)
editList = new EditList();
type = PatchType.UNIFIED;
} else {
assertHaveRepository();
@ -1106,7 +1111,7 @@ private void formatHeader(ByteArrayOutputStream o, DiffEntry ent)
o.write('\n');
}
if (!ent.getOldId().equals(ent.getNewId())) {
if (ent.getOldId() != null && !ent.getOldId().equals(ent.getNewId())) {
formatIndexLine(o, ent);
}
}