summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Sawicki <kevin@github.com>2012-05-10 00:19:04 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2012-05-10 00:19:04 +0200
commit6ebc477c0b6a209ec9bd1a8bcce796d04ca66966 (patch)
treeb2edc4fc3c525eaa126300567688bd4d60025a22
parentc403d0b1873c96782eb0dbe02a14c34b82f7fce3 (diff)
downloadjgit-6ebc477c0b6a209ec9bd1a8bcce796d04ca66966.tar.gz
jgit-6ebc477c0b6a209ec9bd1a8bcce796d04ca66966.zip
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 <matthias.sohn@sap.com>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/DiffCommandTest.java19
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java24
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 16a3d608f0..1aa74e8914 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 class DiffCommandTest extends RepositoryTestCase {
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<DiffEntry> 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 3a50c7a631..e82b0486a6 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.AbstractTreeIterator;
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 @@ public class DiffCommand extends GitCommand<List<DiffEntry>> {
* @return a DiffEntry for each path which is different
*/
public List<DiffEntry> 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 class DiffCommand extends GitCommand<List<DiffEntry>> {
}
diffFmt.setPathFilter(pathFilter);
- if (contextLines >= 0)
- diffFmt.setContext(contextLines);
- if (destinationPrefix != null)
- diffFmt.setNewPrefix(destinationPrefix);
- if (sourcePrefix != null)
- diffFmt.setOldPrefix(sourcePrefix);
List<DiffEntry> 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;