From 6ebc477c0b6a209ec9bd1a8bcce796d04ca66966 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 10 May 2012 00:19:04 +0200 Subject: [PATCH] Make output stream optional in DiffCommand Use the NullOutputStream.INSTANCE value when the configured output stream is null or the command is configured to only show name and status. Also only set the context and prefix options if formatting is actually being performed. Bug: 377157 Change-Id: I333cfcc82ee746f3c6a8e94c09dcc803ffbb4b3a Signed-off-by: Matthias Sohn --- .../org/eclipse/jgit/api/DiffCommandTest.java | 19 +++++++++++++++ .../src/org/eclipse/jgit/api/DiffCommand.java | 24 +++++++++++-------- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/DiffCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/DiffCommandTest.java index 16a3d608f..1aa74e891 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/DiffCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/DiffCommandTest.java @@ -43,6 +43,8 @@ package org.eclipse.jgit.api; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.io.ByteArrayOutputStream; import java.io.File; @@ -222,6 +224,23 @@ public void testDiffWithNegativeLineCount() throws Exception { assertEquals(expected.toString(), actual); } + @Test + public void testNoOutputStreamSet() throws Exception { + File file = writeTrashFile("test.txt", "a"); + assertTrue(file.setLastModified(file.lastModified() - 5000)); + Git git = new Git(db); + git.add().addFilepattern(".").call(); + write(file, "b"); + + List diffs = git.diff().call(); + assertNotNull(diffs); + assertEquals(1, diffs.size()); + DiffEntry diff = diffs.get(0); + assertEquals(ChangeType.MODIFY, diff.getChangeType()); + assertEquals("test.txt", diff.getOldPath()); + assertEquals("test.txt", diff.getNewPath()); + } + private AbstractTreeIterator getTreeIterator(String name) throws IOException { final ObjectId id = db.resolve(name); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java index 3a50c7a63..e82b0486a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java @@ -64,6 +64,7 @@ import org.eclipse.jgit.treewalk.CanonicalTreeParser; import org.eclipse.jgit.treewalk.FileTreeIterator; import org.eclipse.jgit.treewalk.filter.TreeFilter; +import org.eclipse.jgit.util.io.NullOutputStream; /** * Show changes between commits, commit and working tree, etc. @@ -108,8 +109,11 @@ protected DiffCommand(Repository repo) { * @return a DiffEntry for each path which is different */ public List call() throws GitAPIException, IOException { - final DiffFormatter diffFmt = new DiffFormatter( - new BufferedOutputStream(out)); + final DiffFormatter diffFmt; + if (out != null && !showNameAndStatusOnly) + diffFmt = new DiffFormatter(new BufferedOutputStream(out)); + else + diffFmt = new DiffFormatter(NullOutputStream.INSTANCE); diffFmt.setRepository(repo); diffFmt.setProgressMonitor(monitor); try { @@ -136,17 +140,17 @@ public List call() throws GitAPIException, IOException { } diffFmt.setPathFilter(pathFilter); - if (contextLines >= 0) - diffFmt.setContext(contextLines); - if (destinationPrefix != null) - diffFmt.setNewPrefix(destinationPrefix); - if (sourcePrefix != null) - diffFmt.setOldPrefix(sourcePrefix); List result = diffFmt.scan(oldTree, newTree); - if (showNameAndStatusOnly) { + if (showNameAndStatusOnly) return result; - } else { + else { + if (contextLines >= 0) + diffFmt.setContext(contextLines); + if (destinationPrefix != null) + diffFmt.setNewPrefix(destinationPrefix); + if (sourcePrefix != null) + diffFmt.setOldPrefix(sourcePrefix); diffFmt.format(result); diffFmt.flush(); return result;