]> source.dussan.org Git - jgit.git/commitdiff
Make output stream optional in DiffCommand 08/5908/2
authorKevin Sawicki <kevin@github.com>
Wed, 9 May 2012 22:19:04 +0000 (00:19 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 9 May 2012 22:19:04 +0000 (00:19 +0200)
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>
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/DiffCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java

index 16a3d608f012430952cf9a37318e6858b6689628..1aa74e89142b8e3138da5c33f8a59404c9720d06 100644 (file)
@@ -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);
index 3a50c7a6315c11b57420cbe4793feca3cb1b15ec..e82b0486a64113d816e042966b761320dd51dfc3 100644 (file)
@@ -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;