Browse Source

Merge "Show submodule difference as a hunk"

stable-4.1
Matthias Sohn 9 years ago committed by Gerrit Code Review @ Eclipse.org
parent
commit
6715c36100
  1. 5
      org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java
  2. 31
      org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java

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

@ -241,8 +241,7 @@ public class DiffFormatterTest extends RepositoryTestCase {
ObjectId bId = blob("b\n");
String diffHeader = makeDiffHeaderModeChange(PATH_A, PATH_A, aId, bId,
GITLINK, REGULAR_FILE)
+ "-Subproject commit " + aId.name() + "\n";
GITLINK, REGULAR_FILE);
DiffEntry ad = DiffEntry.delete(PATH_A, aId);
ad.oldMode = FileMode.GITLINK;
@ -257,7 +256,7 @@ public class DiffFormatterTest extends RepositoryTestCase {
assertEquals(1, fh.getHunks().size());
HunkHeader hh = fh.getHunks().get(0);
assertEquals(0, hh.toEditList().size());
assertEquals(1, hh.toEditList().size());
}
@Test

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

@ -665,16 +665,10 @@ public class DiffFormatter implements AutoCloseable {
format(res.header, res.a, res.b);
}
private static void writeGitLinkDiffText(OutputStream o, DiffEntry ent)
private static byte[] writeGitLinkText(AbbreviatedObjectId id)
throws IOException {
if (ent.getOldMode() == GITLINK) {
o.write(encodeASCII("-Subproject commit " + ent.getOldId().name() //$NON-NLS-1$
+ "\n")); //$NON-NLS-1$
}
if (ent.getNewMode() == GITLINK) {
o.write(encodeASCII("+Subproject commit " + ent.getNewId().name() //$NON-NLS-1$
+ "\n")); //$NON-NLS-1$
}
return encodeASCII("Subproject commit " + id.name() //$NON-NLS-1$
+ "\n");
}
private String format(AbbreviatedObjectId id) {
@ -938,13 +932,7 @@ public class DiffFormatter implements AutoCloseable {
formatHeader(buf, ent);
if (ent.getOldMode() == GITLINK || ent.getNewMode() == GITLINK) {
formatOldNewPaths(buf, ent);
writeGitLinkDiffText(buf, ent);
editList = new EditList();
type = PatchType.UNIFIED;
} else if (ent.getOldId() == null || ent.getNewId() == null) {
if (ent.getOldId() == null || ent.getNewId() == null) {
// Content not changed (e.g. only mode, pure rename)
editList = new EditList();
type = PatchType.UNIFIED;
@ -952,8 +940,15 @@ public class DiffFormatter implements AutoCloseable {
} else {
assertHaveRepository();
byte[] aRaw = open(OLD, ent);
byte[] bRaw = open(NEW, ent);
byte[] aRaw, bRaw;
if (ent.getOldMode() == GITLINK || ent.getNewMode() == GITLINK) {
aRaw = writeGitLinkText(ent.getOldId());
bRaw = writeGitLinkText(ent.getNewId());
} else {
aRaw = open(OLD, ent);
bRaw = open(NEW, ent);
}
if (aRaw == BINARY || bRaw == BINARY //
|| RawText.isBinary(aRaw) || RawText.isBinary(bRaw)) {

Loading…
Cancel
Save