diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2016-02-10 00:44:58 +0100 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2016-02-10 00:45:18 +0100 |
commit | 26012958a35d85639fe44fdbd4690cb58ec3b836 (patch) | |
tree | 8a4f43a6f0d0491a281cb1d21291194f0b71b860 | |
parent | 4e5255c59a6e26975bb95fa35a85ae2563fb0769 (diff) | |
parent | df904a4227360741635bf7aa6a6ad5e39057b343 (diff) | |
download | jgit-26012958a35d85639fe44fdbd4690cb58ec3b836.tar.gz jgit-26012958a35d85639fe44fdbd4690cb58ec3b836.zip |
Merge branch 'stable-4.1' into stable-4.2
* stable-4.1:
Fix diff for added and removed submodule
Change-Id: I37dd71ed19b06e9bbcffe37370081ab875c6d8d4
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java | 62 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java | 3 |
2 files changed, 65 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java index 81a4c6a607..638a163757 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java @@ -260,6 +260,68 @@ public class DiffFormatterTest extends RepositoryTestCase { } @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); m.oldMode = FileMode.REGULAR_FILE; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java index 4c0ed386e8..fc701f3a54 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java +++ b/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$ } |