]> source.dussan.org Git - jgit.git/commitdiff
Fix diff for added and removed submodule 03/65903/2
authorHugo Arès <hugo.ares@ericsson.com>
Thu, 4 Feb 2016 13:55:20 +0000 (08:55 -0500)
committerHugo Arès <hugo.ares@ericsson.com>
Thu, 4 Feb 2016 15:27:50 +0000 (10:27 -0500)
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>
org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java
org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java

index 24b0f8141e93ffe8a198f6890ec40816c95464b5..58348d51178a8d5f8090777fd057ef71b8a33e1c 100644 (file)
@@ -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);
index 4c0ed386e88f39d75a056ce97697c5dbca2f29d9..fc701f3a54044678f725fae1add0cd3354b2283f 100644 (file)
@@ -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$
        }