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" ); + } +}