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 231b8ab20..d8429a4cd 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java @@ -212,33 +212,8 @@ public void format(List entries) throws IOException { * be written to. */ public void format(DiffEntry ent) throws IOException { - writeDiffHeader(out, ent); - - if (ent.getOldMode() == GITLINK || ent.getNewMode() == GITLINK) { - writeGitLinkDiffText(out, ent); - } else { - if (db == null) - throw new IllegalStateException( - JGitText.get().repositoryIsRequired); - - ObjectReader reader = db.newObjectReader(); - byte[] aRaw, bRaw; - try { - aRaw = open(reader, ent.getOldMode(), ent.getOldId()); - bRaw = open(reader, ent.getNewMode(), ent.getNewId()); - } finally { - reader.release(); - } - - if (RawText.isBinary(aRaw) || RawText.isBinary(bRaw)) { - out.write(encodeASCII("Binary files differ\n")); - - } else { - RawText a = rawTextFactory.create(aRaw); - RawText b = rawTextFactory.create(bRaw); - formatEdits(a, b, new MyersDiff(a, b).getEdits()); - } - } + FormatResult res = createFormatResult(ent); + format(res.header, res.a, res.b); } private void writeGitLinkDiffText(OutputStream o, DiffEntry ent) @@ -406,8 +381,8 @@ public void format(final FileHeader head, final RawText a, final RawText b) if (!head.getHunks().isEmpty()) end = head.getHunks().get(0).getStartOffset(); out.write(head.getBuffer(), start, end - start); - - formatEdits(a, b, head.toEditList()); + if (head.getPatchType() == PatchType.UNIFIED) + formatEdits(a, b, head.toEditList()); } /** @@ -603,6 +578,20 @@ protected void writeLine(final char prefix, final RawText text, */ public FileHeader createFileHeader(DiffEntry ent) throws IOException, CorruptObjectException, MissingObjectException { + return createFormatResult(ent).header; + } + + private static class FormatResult { + FileHeader header; + + RawText a; + + RawText b; + } + + private FormatResult createFormatResult(DiffEntry ent) throws IOException, + CorruptObjectException, MissingObjectException { + final FormatResult res = new FormatResult(); ByteArrayOutputStream buf = new ByteArrayOutputStream(); final EditList editList; final FileHeader.PatchType type; @@ -631,14 +620,15 @@ public FileHeader createFileHeader(DiffEntry ent) throws IOException, editList = new EditList(); type = PatchType.BINARY; } else { - RawText a = rawTextFactory.create(aRaw); - RawText b = rawTextFactory.create(bRaw); - editList = new MyersDiff(a, b).getEdits(); + res.a = rawTextFactory.create(aRaw); + res.b = rawTextFactory.create(bRaw); + editList = new MyersDiff(res.a, res.b).getEdits(); type = PatchType.UNIFIED; } } - return new FileHeader(buf.toByteArray(), editList, type); + res.header = new FileHeader(buf.toByteArray(), editList, type); + return res; } private int findCombinedEnd(final List edits, final int i) {