fix and add test case for diff command

Project: http://git-wip-us.apache.org/repos/asf/maven-scm/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-scm/commit/148f6251
Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/148f6251
Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/148f6251

Branch: refs/heads/master
Commit: 148f6251296c48f60f590254f96fc7f719e7d14b
Parents: d327618
Author: imod <d...@fortysix.ch>
Authored: Fri Jul 12 21:23:42 2013 +0200
Committer: imod <d...@fortysix.ch>
Committed: Fri Jul 12 21:23:42 2013 +0200

----------------------------------------------------------------------
 .../git/jgit/command/diff/JGitDiffCommand.java  | 33 +++++++++++---------
 .../command/diff/JGitDiffCommandTckTest.java    | 16 ++++++++++
 2 files changed, 35 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-scm/blob/148f6251/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
----------------------------------------------------------------------
diff --git 
a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
 
b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
index 0d17e9b..e792390 100644
--- 
a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
+++ 
b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommand.java
@@ -19,9 +19,12 @@ package org.apache.maven.scm.provider.git.jgit.command.diff;
  * under the License.
  */
 
+import java.io.BufferedWriter;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.StringWriter;
+import java.io.Writer;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -36,7 +39,9 @@ import org.apache.maven.scm.command.diff.AbstractDiffCommand;
 import org.apache.maven.scm.command.diff.DiffScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.command.diff.GitDiffConsumer;
 import org.apache.maven.scm.provider.git.jgit.command.JGitUtils;
+import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 import org.eclipse.jgit.api.DiffCommand;
 import org.eclipse.jgit.api.Git;
@@ -48,6 +53,7 @@ import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.treewalk.AbstractTreeIterator;
 import org.eclipse.jgit.treewalk.CanonicalTreeParser;
+import org.eclipse.jgit.treewalk.filter.TreeFilter;
 
 /**
  * @author Dominik Bartholdi (imod)
@@ -78,6 +84,7 @@ public class JGitDiffCommand
     public DiffScmResult callDiff( Git git, ScmVersion startRevision, 
ScmVersion endRevision )
         throws IOException, GitAPIException, ScmException
     {
+        
         AbstractTreeIterator oldTree = null;
         if ( startRevision != null && StringUtils.isNotEmpty( 
startRevision.getName().trim() ) )
         {
@@ -94,22 +101,20 @@ public class JGitDiffCommand
 
         OutputStream out = new ByteArrayOutputStream();
 
-        DiffCommand diff = git.diff().setOutputStream( out ).setOldTree( 
oldTree ).setNewTree( newTree );
-        List<DiffEntry> entries = diff.call();
-        List<ScmFile> changedFiles = new ArrayList<ScmFile>();
+        git.diff().setOutputStream( out ).setOldTree( oldTree ).setNewTree( 
newTree ).setCached(false).call();
+        git.diff().setOutputStream( out ).setOldTree( oldTree ).setNewTree( 
newTree ).setCached(true).call();
 
-        // TODO get differences (but actually these are captured in the out
-        // already...)
-        Map<String, CharSequence> differences = new HashMap<String, 
CharSequence>();
-
-        for ( DiffEntry diffEntry : entries )
-        {
-            changedFiles.add(
-                new ScmFile( diffEntry.getNewPath(), 
JGitUtils.getScmFileStatus( diffEntry.getChangeType() ) ) );
+        out.flush();
+        
+        GitDiffConsumer consumer = new GitDiffConsumer(getLogger(), null);
+        String fullDiff = out.toString();
+        String[] lines = fullDiff.split(System.getProperty("line.separator"));
+        for (String aLine : lines) {
+            consumer.consumeLine(aLine);
         }
-
-        return new DiffScmResult( changedFiles, differences, out.toString(),
-                                  new ScmResult( "JGit diff", "diff", null, 
true ) );
+        
+        return new DiffScmResult( "JGit diff", consumer.getChangedFiles(), 
consumer.getDifferences(),
+                consumer.getPatch() );
     }
 
     private AbstractTreeIterator getTreeIterator( Repository repo, String name 
)

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/148f6251/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommandTckTest.java
----------------------------------------------------------------------
diff --git 
a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommandTckTest.java
 
b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommandTckTest.java
new file mode 100644
index 0000000..7055bf2
--- /dev/null
+++ 
b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/diff/JGitDiffCommandTckTest.java
@@ -0,0 +1,16 @@
+package org.apache.maven.scm.provider.git.jgit.command.diff;
+
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
+import org.apache.maven.scm.provider.git.command.diff.GitDiffCommandTckTest;
+
+public class JGitDiffCommandTckTest extends GitDiffCommandTckTest {
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getScmUrl()
+        throws Exception
+    {
+        return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "jgit" );
+    }
+}

Reply via email to