You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2022/07/06 15:23:19 UTC

[maven-scm] 01/01: [SCM-991] GitDiffConsumer cannot parse moved files

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch SCM-991
in repository https://gitbox.apache.org/repos/asf/maven-scm.git

commit 07d51d34ec386d527ecc584e67514ff862caca1e
Author: Jean-Noël Rouvignac <jn...@gmail.com>
AuthorDate: Wed Jul 6 17:22:17 2022 +0200

    [SCM-991] GitDiffConsumer cannot parse moved files
    
    This closes #151
---
 .../provider/git/command/diff/GitDiffConsumer.java | 16 ++++++++
 .../git/command/diff/GitDiffConsumerTest.java      | 48 ++++++++++++++++++++++
 .../src/test/resources/git/diff/git-diff3.log      |  4 ++
 .../src/test/resources/git/diff/git-diff4.log      | 14 +++++++
 4 files changed, 82 insertions(+)

diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffConsumer.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffConsumer.java
index d452a4e88..b39410cb0 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffConsumer.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffConsumer.java
@@ -73,6 +73,12 @@ public class GitDiffConsumer
 
     private static final String INDEX_LINE_TOKEN = "index ";
 
+    private static final String SIMILARITY_INDEX_LINE_TOKEN = "similarity index ";
+
+    private static final String RENAME_FROM_LINE_TOKEN = "rename from ";
+
+    private static final String RENAME_TO_LINE_TOKEN = "rename to ";
+
     private static final String NEW_FILE_MODE_TOKEN = "new file mode ";
 
     private static final String DELETED_FILE_MODE_TOKEN = "deleted file mode ";
@@ -149,6 +155,16 @@ public class GitDiffConsumer
             // skip, though could parse to verify filename, end revision
             patch.append( line ).append( "\n" );
         }
+        else if ( line.startsWith( SIMILARITY_INDEX_LINE_TOKEN ) )
+        {
+            // skip
+            patch.append( line ).append( "\n" );
+        }
+        else if ( line.startsWith( RENAME_FROM_LINE_TOKEN ) || line.startsWith( RENAME_TO_LINE_TOKEN ) )
+        {
+            // skip, though could parse to verify filename
+            patch.append( line ).append( "\n" );
+        }
         else if ( line.startsWith( ADDED_LINE_TOKEN ) || line.startsWith( REMOVED_LINE_TOKEN )
             || line.startsWith( UNCHANGED_LINE_TOKEN ) || line.startsWith( CHANGE_SEPARATOR_TOKEN )
             || line.equals( NO_NEWLINE_TOKEN ) )
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/command/diff/GitDiffConsumerTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/command/diff/GitDiffConsumerTest.java
index e43222bba..7b4e9e3f9 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/command/diff/GitDiffConsumerTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/command/diff/GitDiffConsumerTest.java
@@ -108,6 +108,54 @@ public class GitDiffConsumerTest
         assertTrue( addDiffs.indexOf( "+maven-scm git provider works fine :-)" ) >= 0 );
     }
 
+    @Test
+    public void testLog3Consumer()
+            throws Exception
+    {
+        GitDiffConsumer consumer = new GitDiffConsumer( null );
+
+        File f = getTestFile( "src/test/resources/git/diff/git-diff3.log" );
+
+        ConsumerUtils.consumeFile( f, consumer );
+
+        List<ScmFile> changedFiles = consumer.getChangedFiles();
+
+        assertEquals( 1, changedFiles.size() );
+
+        testScmFile( changedFiles.get( 0 ), "pom.xml", ScmFileStatus.MODIFIED );
+
+        Map<String,CharSequence> differences = consumer.getDifferences();
+        assertNotNull( differences );
+
+        CharSequence addDiffs = differences.get( "pom.xml" );
+        assertNotNull( addDiffs );
+        assertEquals( "", addDiffs.toString() );
+    }
+
+    @Test
+    public void testLog4Consumer()
+            throws Exception
+    {
+        GitDiffConsumer consumer = new GitDiffConsumer( null );
+
+        File f = getTestFile( "src/test/resources/git/diff/git-diff4.log" );
+
+        ConsumerUtils.consumeFile( f, consumer );
+
+        List<ScmFile> changedFiles = consumer.getChangedFiles();
+
+        assertEquals( 1, changedFiles.size() );
+
+        testScmFile( changedFiles.get( 0 ), "pom.xml", ScmFileStatus.MODIFIED );
+
+        Map<String,CharSequence> differences = consumer.getDifferences();
+        assertNotNull( differences );
+
+        StringBuilder addDiffs = new StringBuilder( differences.get( "pom.xml" ) );
+        assertNotNull( addDiffs );
+        assertTrue( addDiffs.indexOf( "+  <!-- test -->" ) >= 0 );
+    }
+
     private void testScmFile( ScmFile fileToTest, String expectedFilePath, ScmFileStatus expectedStatus )
     {
         assertEquals( expectedFilePath, fileToTest.getPath() );
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/git/diff/git-diff3.log b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/git/diff/git-diff3.log
new file mode 100644
index 000000000..8b75613d7
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/git/diff/git-diff3.log
@@ -0,0 +1,4 @@
+diff --git a/pom.xml b/pom_moved.xml
+similarity index 100%
+rename from pom.xml
+rename to pom_moved.xml
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/git/diff/git-diff4.log b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/git/diff/git-diff4.log
new file mode 100644
index 000000000..5f3054516
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/git/diff/git-diff4.log
@@ -0,0 +1,14 @@
+diff --git a/pom.xml b/pom_moved.xml
+similarity index 99%
+rename from pom.xml
+rename to pom_moved.xml
+index 122a94d8..1e5a80ce 100644
+--- a/pom.xml
++++ b/pom_moved.xml
+@@ -585,5 +585,5 @@
+       </snapshots>
+     </repository>
+   </repositories>
+-
++  <!-- test -->
+ </project>