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

[1/2] git commit: [SCM-709] REGRESSION: git status doesn't work if repository root is not the working directory

[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/43bc1325
Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/43bc1325
Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/43bc1325

Branch: refs/heads/master
Commit: 43bc13254dc6de2f921e2e946f1a3ead5f0f8c80
Parents: 0c152cd
Author: rfscholte <rf...@apache.org>
Authored: Sun Mar 17 18:05:48 2013 +0100
Committer: rfscholte <rf...@apache.org>
Committed: Sun Mar 17 18:05:48 2013 +0100

----------------------------------------------------------------------
 .../gitexe/command/status/GitStatusConsumer.java   |   36 ++++++++++++---
 .../command/status/GitStatusConsumerTest.java      |   13 +++++
 2 files changed, 43 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-scm/blob/43bc1325/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumer.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/GitStatusConsumer.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/GitStatusConsumer.java
index cf37c08..2ee90a8 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/GitStatusConsumer.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/GitStatusConsumer.java
@@ -20,6 +20,7 @@ package org.apache.maven.scm.provider.git.gitexe.command.status;
  */
 
 import java.io.File;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -62,8 +63,13 @@ public class GitStatusConsumer
 
     private File workingDirectory;
 
+    /**
+     * Entries are relative to working directory, not to the repositoryroot
+     */
     private List<ScmFile> changedFiles = new ArrayList<ScmFile>();
 
+    private String relativeRepositoryPath;
+    
     // ----------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------
@@ -74,6 +80,12 @@ public class GitStatusConsumer
         this.workingDirectory = workingDirectory;
     }
 
+    public GitStatusConsumer( ScmLogger logger, File workingDirectory, String relativeRepositoryPath )
+    {
+        this( logger, workingDirectory );
+        this.relativeRepositoryPath = relativeRepositoryPath;
+    }
+
     // ----------------------------------------------------------------------
     // StreamConsumer Implementation
     // ----------------------------------------------------------------------
@@ -100,23 +112,23 @@ public class GitStatusConsumer
         if ( ( matcher = addedRegexp.matcher( line ) ).find() )
         {
             status = ScmFileStatus.ADDED;
-            files.add( matcher.group( 1 ) );
+            files.add( resolvePath( matcher.group( 1 ), relativeRepositoryPath ) );
         }
         else if ( ( matcher = modifiedRegexp.matcher( line ) ).find() )
         {
             status = ScmFileStatus.MODIFIED;
-            files.add( matcher.group( 1 ) );
+            files.add( resolvePath( matcher.group( 1 ), relativeRepositoryPath ) );
         }
         else if ( ( matcher = deletedRegexp.matcher( line ) ) .find() )
         {
             status = ScmFileStatus.DELETED;
-            files.add( matcher.group( 1 ) );
+            files.add( resolvePath( matcher.group( 1 ), relativeRepositoryPath ) );
         }
         else if ( ( matcher = renamedRegexp.matcher( line ) ).find() )
         {
             status = ScmFileStatus.RENAMED;
-            files.add( matcher.group( 1 ) );
-            files.add( matcher.group( 2 ) );
+            files.add( resolvePath( matcher.group( 1 ), relativeRepositoryPath ) );
+            files.add( resolvePath( matcher.group( 2 ), relativeRepositoryPath ) );
             logger.debug( "RENAMED status for line '" + line + "' files added '" + matcher.group( 1 ) + "' '"
                               + matcher.group( 2 ) );
         }
@@ -184,7 +196,19 @@ public class GitStatusConsumer
     private boolean isFile( String file )
     {
         return new File( workingDirectory, file ).isFile();
-//        return !file.endsWith( "/" );
+    }
+
+    protected static String resolvePath( String fileEntry, String path )
+    {
+        if ( path != null )
+        {
+            
+            return URI.create( path ).relativize( URI.create( fileEntry ) ).getPath();
+        }
+        else
+        {
+            return fileEntry;
+        }
     }
 
     public List<ScmFile> getChangedFiles()

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/43bc1325/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 dab9829..2f56ca3 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
@@ -279,6 +279,19 @@ public class GitStatusConsumerTest
                      ScmFileStatus.MODIFIED );
     }
 
+    // SCM-709
+    public void testResolvePath()
+    {
+        File repositoryRoot = getTestFile( "repo" );
+        File workingDirectory = getTestFile( "repo/work" );
+
+        String path = repositoryRoot.toURI().relativize( workingDirectory.toURI() ).getPath();
+
+        assertEquals( "work", path );
+
+        assertEquals( "pom.xml", GitStatusConsumer.resolvePath( "work/pom.xml", path ) );
+        assertEquals( "work/pom.xml", GitStatusConsumer.resolvePath( "work/pom.xml", null ) );
+    }
 
     private void testScmFile( ScmFile fileToTest, String expectedFilePath, ScmFileStatus expectedStatus )
     {