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()
     {