You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2013/03/17 18:36:46 UTC
[2/2] git commit: [SCM-709] REGRESSION: git status doesn't work if
repository root is not the working directory
Updated Branches:
refs/heads/master 0c152cd94 -> 10099c042
[SCM-709] REGRESSION: git status doesn't work if repository root is not the working directory
Project: http://git-wip-us.apache.org/repos/asf/maven-scm/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-scm/commit/10099c04
Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/10099c04
Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/10099c04
Branch: refs/heads/master
Commit: 10099c04216fa6513983a48d188905d07a1652ad
Parents: 43bc132
Author: rfscholte <rf...@apache.org>
Authored: Sun Mar 17 18:35:58 2013 +0100
Committer: rfscholte <rf...@apache.org>
Committed: Sun Mar 17 18:35:58 2013 +0100
----------------------------------------------------------------------
.../git/gitexe/command/add/GitAddCommand.java | 31 ++++++++++-
.../gitexe/command/checkin/GitCheckInCommand.java | 25 +++++++++-
.../gitexe/command/status/GitStatusCommand.java | 41 +++++++++++++--
.../command/status/GitStatusConsumerTest.java | 29 ++++++++++-
4 files changed, 116 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-scm/blob/10099c04/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/add/GitAddCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/add/GitAddCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/add/GitAddCommand.java
index 9a0bec5..59bc521 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/add/GitAddCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/add/GitAddCommand.java
@@ -37,6 +37,7 @@ import org.codehaus.plexus.util.cli.CommandLineUtils;
import org.codehaus.plexus.util.cli.Commandline;
import java.io.File;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -68,15 +69,39 @@ public class GitAddCommand
{
return result;
}
+
+ // SCM-709: statusCommand uses repositoryRoot instead of workingDirectory, adjust it with relativeRepositoryPath
+ Commandline clRevparse = GitStatusCommand.createRevparseShowToplevelCommand( fileSet );
+
+ CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ String relativeRepositoryPath = null;
+
+ int exitCode;
+
+ exitCode = GitCommandLineUtils.execute( clRevparse, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ // git-status returns non-zero if nothing to do
+ if ( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "Could not resolve toplevel" );
+ }
+ }
+ else
+ {
+ relativeRepositoryPath = URI.create( stdout.getOutput().trim() ).relativize( fileSet.getBasedir().toURI() ).getPath();
+ }
// git-add doesn't show single files, but only summary :/
// so we must run git-status and consume the output
// borrow a few things from the git-status command
Commandline clStatus = GitStatusCommand.createCommandLine( repository, fileSet );
- GitStatusConsumer statusConsumer = new GitStatusConsumer( getLogger(), fileSet.getBasedir() );
- CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
- int exitCode = GitCommandLineUtils.execute( clStatus, statusConsumer, stderr, getLogger() );
+ GitStatusConsumer statusConsumer = new GitStatusConsumer( getLogger(), fileSet.getBasedir(), relativeRepositoryPath );
+ stderr = new CommandLineUtils.StringStreamConsumer();
+ exitCode = GitCommandLineUtils.execute( clStatus, statusConsumer, stderr, getLogger() );
if ( exitCode != 0 )
{
// git-status returns non-zero if nothing to do
http://git-wip-us.apache.org/repos/asf/maven-scm/blob/10099c04/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
index 37628c9..f00db3b 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
@@ -43,6 +43,7 @@ import org.codehaus.plexus.util.cli.Commandline;
import java.io.File;
import java.io.IOException;
+import java.net.URI;
import java.util.ArrayList;
import java.util.List;
@@ -96,13 +97,35 @@ public class GitCheckInCommand
}
}
+
+ // SCM-709: statusCommand uses repositoryRoot instead of workingDirectory, adjust it with relativeRepositoryPath
+ Commandline clRevparse = GitStatusCommand.createRevparseShowToplevelCommand( fileSet );
+
+ stdout = new CommandLineUtils.StringStreamConsumer();
+ stderr = new CommandLineUtils.StringStreamConsumer();
+
+ String relativeRepositoryPath = null;
+
+ exitCode = GitCommandLineUtils.execute( clRevparse, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ // git-status returns non-zero if nothing to do
+ if ( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "Could not resolve toplevel" );
+ }
+ }
+ else
+ {
+ relativeRepositoryPath = URI.create( stdout.getOutput().trim() ).relativize( fileSet.getBasedir().toURI() ).getPath();
+ }
// git-commit doesn't show single files, but only summary :/
// so we must run git-status and consume the output
// borrow a few things from the git-status command
Commandline clStatus = GitStatusCommand.createCommandLine( repository, fileSet );
- GitStatusConsumer statusConsumer = new GitStatusConsumer( getLogger(), fileSet.getBasedir() );
+ GitStatusConsumer statusConsumer = new GitStatusConsumer( getLogger(), fileSet.getBasedir(), relativeRepositoryPath );
exitCode = GitCommandLineUtils.execute( clStatus, statusConsumer, stderr, getLogger() );
if ( exitCode != 0 )
{
http://git-wip-us.apache.org/repos/asf/maven-scm/blob/10099c04/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusCommand.java
index 426c977..2689a49 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusCommand.java
@@ -19,14 +19,17 @@ package org.apache.maven.scm.provider.git.gitexe.command.status;
* under the License.
*/
+import java.io.File;
+import java.net.URI;
+
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.command.status.AbstractStatusCommand;
import org.apache.maven.scm.command.status.StatusScmResult;
import org.apache.maven.scm.provider.ScmProviderRepository;
import org.apache.maven.scm.provider.git.command.GitCommand;
-import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
import org.codehaus.plexus.util.cli.CommandLineUtils;
import org.codehaus.plexus.util.cli.Commandline;
@@ -42,14 +45,35 @@ public class GitStatusCommand
protected StatusScmResult executeStatusCommand( ScmProviderRepository repo, ScmFileSet fileSet )
throws ScmException
{
- Commandline cl = createCommandLine( (GitScmProviderRepository) repo, fileSet );
-
- GitStatusConsumer consumer = new GitStatusConsumer( getLogger(), fileSet.getBasedir() );
-
+ Commandline clRevparse = createRevparseShowToplevelCommand(fileSet);
+
+ CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+ String relativeRepositoryPath = null;
+
int exitCode;
+ exitCode = GitCommandLineUtils.execute( clRevparse, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ // git-status returns non-zero if nothing to do
+ if ( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "Could not resolve toplevel" );
+ }
+ }
+ else
+ {
+ relativeRepositoryPath = URI.create( stdout.getOutput().trim() ).relativize( fileSet.getBasedir().toURI() ).getPath();
+ }
+
+ Commandline cl = createCommandLine( (GitScmProviderRepository) repo, fileSet );
+
+ GitStatusConsumer consumer = new GitStatusConsumer( getLogger(), fileSet.getBasedir(), relativeRepositoryPath );
+
+ stderr = new CommandLineUtils.StringStreamConsumer();
+
exitCode = GitCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
if ( exitCode != 0 )
{
@@ -73,4 +97,11 @@ public class GitStatusCommand
cl.addArguments( new String[] { "--porcelain", "." } );
return cl;
}
+
+ public static Commandline createRevparseShowToplevelCommand( ScmFileSet fileSet )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "rev-parse" );
+ cl.addArguments( new String[] { "--show-toplevel" } );
+ return cl;
+ }
}
http://git-wip-us.apache.org/repos/asf/maven-scm/blob/10099c04/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumerTest.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumerTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumerTest.java
index 2f56ca3..9d9b924 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumerTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumerTest.java
@@ -42,7 +42,13 @@ public class GitStatusConsumerTest
private List<ScmFile> getChangedFiles( File gitlog )
throws IOException
{
- GitStatusConsumer consumer = new GitStatusConsumer( new DefaultLog(), null );
+ return getChangedFiles( gitlog, null );
+ }
+
+ private List<ScmFile> getChangedFiles( File gitlog, String relativeRepoPath )
+ throws IOException
+ {
+ GitStatusConsumer consumer = new GitStatusConsumer( new DefaultLog(), null, relativeRepoPath );
BufferedReader r = new BufferedReader( new FileReader( gitlog ) );
@@ -279,6 +285,27 @@ public class GitStatusConsumerTest
ScmFileStatus.MODIFIED );
}
+ public void testLog3Consumer()
+ throws Exception
+ {
+ List<ScmFile> changedFiles = getChangedFiles( getTestFile( "/src/test/resources/git/status/gitstatus2.gitlog" ), "maven-scm-provider-gitexe" );
+
+ assertEquals( 4, changedFiles.size() );
+
+ testScmFile( changedFiles.get( 0 ),
+ "src/main/java/org/apache/maven/scm/provider/git/gitexe/command/add/GitAddCommand.java",
+ ScmFileStatus.MODIFIED );
+ testScmFile( changedFiles.get( 1 ),
+ "src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java",
+ ScmFileStatus.MODIFIED );
+ testScmFile( changedFiles.get( 2 ),
+ "src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInConsumer.java",
+ ScmFileStatus.DELETED );
+ testScmFile( changedFiles.get( 3 ),
+ "src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumer.java",
+ ScmFileStatus.MODIFIED );
+ }
+
// SCM-709
public void testResolvePath()
{