Browse Source

Fix diff for added and removed submodule

Since If13f7b406, submodule difference are shown as a hunk. The issue
was that added and removed submodule were considered as Edit.REPLACE
instead of Edit.INSERT and Edit.DELETE in the DiffFormatter result.

Change-Id: I4330c2aa3f10e29d7d6b0b2e5286e59293a06239
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
stable-4.1
Hugo Arès 9 years ago
parent
commit
df904a4227
  1. 62
      org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java
  2. 3
      org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java

62
org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java

@ -259,6 +259,68 @@ public class DiffFormatterTest extends RepositoryTestCase {
assertEquals(1, hh.toEditList().size());
}
@Test
public void testCreateFileHeader_AddGitLink() throws Exception {
ObjectId adId = blob("a\nd\n");
DiffEntry ent = DiffEntry.add("FOO", adId);
ent.newMode = FileMode.GITLINK;
FileHeader fh = df.toFileHeader(ent);
String diffHeader = "diff --git a/FOO b/FOO\n" //
+ "new file mode " + GITLINK + "\n"
+ "index "
+ ObjectId.zeroId().abbreviate(8).name()
+ ".."
+ adId.abbreviate(8).name() + "\n" //
+ "--- /dev/null\n"//
+ "+++ b/FOO\n";
assertEquals(diffHeader, RawParseUtils.decode(fh.getBuffer()));
assertEquals(1, fh.getHunks().size());
HunkHeader hh = fh.getHunks().get(0);
EditList el = hh.toEditList();
assertEquals(1, el.size());
Edit e = el.get(0);
assertEquals(0, e.getBeginA());
assertEquals(0, e.getEndA());
assertEquals(0, e.getBeginB());
assertEquals(1, e.getEndB());
assertEquals(Edit.Type.INSERT, e.getType());
}
@Test
public void testCreateFileHeader_DeleteGitLink() throws Exception {
ObjectId adId = blob("a\nd\n");
DiffEntry ent = DiffEntry.delete("FOO", adId);
ent.oldMode = FileMode.GITLINK;
FileHeader fh = df.toFileHeader(ent);
String diffHeader = "diff --git a/FOO b/FOO\n" //
+ "deleted file mode " + GITLINK + "\n"
+ "index "
+ adId.abbreviate(8).name()
+ ".."
+ ObjectId.zeroId().abbreviate(8).name() + "\n" //
+ "--- a/FOO\n"//
+ "+++ /dev/null\n";
assertEquals(diffHeader, RawParseUtils.decode(fh.getBuffer()));
assertEquals(1, fh.getHunks().size());
HunkHeader hh = fh.getHunks().get(0);
EditList el = hh.toEditList();
assertEquals(1, el.size());
Edit e = el.get(0);
assertEquals(0, e.getBeginA());
assertEquals(1, e.getEndA());
assertEquals(0, e.getBeginB());
assertEquals(0, e.getEndB());
assertEquals(Edit.Type.DELETE, e.getType());
}
@Test
public void testCreateFileHeaderWithoutIndexLine() throws Exception {
DiffEntry m = DiffEntry.modify(PATH_A);

3
org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java

@ -666,6 +666,9 @@ public class DiffFormatter implements AutoCloseable {
}
private static byte[] writeGitLinkText(AbbreviatedObjectId id) {
if (id.toObjectId().equals(ObjectId.zeroId())) {
return EMPTY;
}
return encodeASCII("Subproject commit " + id.name() //$NON-NLS-1$
+ "\n"); //$NON-NLS-1$
}

Loading…
Cancel
Save