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 2018/08/19 21:03:02 UTC

[maven-scm] branch SCM-835 updated (81068f7 -> 13775da)

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

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


 discard 81068f7  [SCM-835] includes directive doesn't work correctly when other files in directory changes
     new 13775da  [SCM-835] includes directive doesn't work correctly when other files in directory changes

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (81068f7)
            \
             N -- N -- N   refs/heads/SCM-835 (13775da)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../scm/provider/git/gitexe/command/status/GitStatusConsumer.java      | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)


[maven-scm] 01/01: [SCM-835] includes directive doesn't work correctly when other files in directory changes

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 13775da2dbb30e7fc553d449672bb74dd8d02a14
Author: Eli Shvartsman <el...@shvar.com>
AuthorDate: Thu Jul 7 11:02:53 2016 +0300

    [SCM-835] includes directive doesn't work correctly when other files in directory changes
    
    This closes #51
---
 .../gitexe/command/checkin/GitCheckInCommand.java  |  2 +-
 .../gitexe/command/status/GitStatusConsumer.java   | 73 +++++++++++++++++++++-
 .../command/checkin/GitCheckInCommandTest.java     | 35 +++++++++++
 .../command/status/GitStatusConsumerTest.java      | 33 ++++++++++
 4 files changed, 141 insertions(+), 2 deletions(-)

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 30d6c70..d970485 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
@@ -129,7 +129,7 @@ public class GitCheckInCommand
             Commandline clStatus = GitStatusCommand.createCommandLine( repository, fileSet );
 
             GitStatusConsumer statusConsumer =
-                new GitStatusConsumer( getLogger(), fileSet.getBasedir(), relativeRepositoryPath );
+                new GitStatusConsumer( getLogger(), fileSet.getBasedir(), relativeRepositoryPath, fileSet );
             exitCode = GitCommandLineUtils.execute( clStatus, statusConsumer, stderr, getLogger() );
             if ( exitCode != 0 )
             {
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 00a1ef3..01395dd 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
@@ -31,6 +31,7 @@ import java.util.regex.Pattern;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.log.ScmLogger;
 import org.codehaus.plexus.util.cli.StreamConsumer;
 
@@ -65,6 +66,8 @@ public class GitStatusConsumer
 
     private File workingDirectory;
 
+    private ScmFileSet scmFileSet;
+
     /**
      * Entries are relative to working directory, not to the repositoryroot
      */
@@ -107,6 +110,46 @@ public class GitStatusConsumer
         this.relativeRepositoryPath = relativeRepositoryPath;
     }
 
+    /**
+     * Assuming that you have to discover the repositoryRoot, this is how you can get the
+     * <code>relativeRepositoryPath</code>
+     * <pre>
+     * URI.create( repositoryRoot ).relativize( fileSet.getBasedir().toURI() )
+     * </pre>
+     *
+     * @param logger the logger
+     * @param workingDirectory the working directory
+     * @param scmFileSet fileset with includes and excludes
+     * @since 1.11.0
+     * @see GitStatusCommand#createRevparseShowToplevelCommand(org.apache.maven.scm.ScmFileSet)
+     */
+    public GitStatusConsumer( ScmLogger logger, File workingDirectory, ScmFileSet scmFileSet )
+    {
+        this( logger, workingDirectory );
+        this.scmFileSet = scmFileSet;
+    }
+
+    /**
+     * Assuming that you have to discover the repositoryRoot, this is how you can get the
+     * <code>relativeRepositoryPath</code>
+     * <pre>
+     * URI.create( repositoryRoot ).relativize( fileSet.getBasedir().toURI() )
+     * </pre>
+     *
+     * @param logger the logger
+     * @param workingDirectory the working directory
+     * @param relativeRepositoryPath the working directory relative to the repository root
+     * @param scmFileSet fileset with includes and excludes
+     * @since 1.11.0
+     * @see GitStatusCommand#createRevparseShowToplevelCommand(org.apache.maven.scm.ScmFileSet)
+     */
+    public GitStatusConsumer( ScmLogger logger, File workingDirectory, URI relativeRepositoryPath,
+                              ScmFileSet scmFileSet )
+    {
+        this( logger, workingDirectory, scmFileSet );
+        this.relativeRepositoryPath = relativeRepositoryPath;
+    }
+
     // ----------------------------------------------------------------------
     // StreamConsumer Implementation
     // ----------------------------------------------------------------------
@@ -205,11 +248,39 @@ public class GitStatusConsumer
 
             for ( String file : files )
             {
-                changedFiles.add( new ScmFile( file, status ) );
+                if ( this.scmFileSet != null && !isFileNameInFileList( this.scmFileSet.getFileList(), file ) )
+                {
+                    // skip adding this file
+                }
+                else
+                {
+                    changedFiles.add( new ScmFile( file, status ) );
+                }
             }
         }
     }
 
+    private boolean isFileNameInFileList( List<File> fileList, String fileName )
+    {
+        if ( relativeRepositoryPath == null )
+        {
+          return fileList.contains( new File( fileName ) );
+        }
+        else
+        {
+            for ( File f : fileList )
+            {
+                File file = new File( relativeRepositoryPath.getPath(), fileName );
+                if ( file.getPath().endsWith( f.getName() ) )
+                {
+                    return true;
+                }
+            }
+            return fileList.isEmpty();
+        }
+
+    }
+
     private boolean isFile( String file )
     {
         File targetFile = new File( workingDirectory, file );
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/checkin/GitCheckInCommandTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandTest.java
index d30e4b1..8f26a0a 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandTest.java
@@ -132,6 +132,41 @@ public class GitCheckInCommandTest
         assertTrue("Renamed file has not been commited !", checkInScmResult.getCheckedInFiles().size() != 0);
     }
 
+    // Test FileSet in configuration
+    public void testCheckinWithFileSet() throws Exception {
+        File repo = getRepositoryRoot();
+        File checkedOutRepo = getWorkingCopy();
+
+        GitScmTestUtils.initRepo( "src/test/resources/repository/", getRepositoryRoot(), getWorkingDirectory() );
+
+        ScmRepository scmRepository = getScmManager().makeScmRepository(
+            "scm:git:" + repo.toPath().toAbsolutePath().toUri().toASCIIString() );
+        checkoutRepoInto( checkedOutRepo, scmRepository );
+
+        // Creating beer.xml and whiskey.xml
+        File beerFile = new File( checkedOutRepo.getAbsolutePath(), "beer.xml" );
+        FileUtils.fileWrite( beerFile.getAbsolutePath(), "1/2 litre" );
+        File whiskeyFile = new File( checkedOutRepo.getAbsolutePath(), "whiskey.xml" );
+        FileUtils.fileWrite( whiskeyFile.getAbsolutePath(), "700 ml" );
+
+
+        // Adding and commiting beer and whiskey
+        AddScmResult addResult = getScmManager().add( scmRepository, new ScmFileSet( checkedOutRepo, "beer.xml,whiskey.xml" ) );
+        assertResultIsSuccess( addResult );
+        CheckInScmResult checkInScmResult = getScmManager().checkIn( scmRepository,
+            new ScmFileSet( checkedOutRepo, "beer.xml,whiskey.xml" ), "Created beer file" );
+        assertResultIsSuccess( checkInScmResult );
+
+        // Editing beer and commiting whiskey, should commit nothingi, but succeed
+        FileUtils.fileWrite( beerFile.getAbsolutePath(), "1 litre" );
+
+        addResult = getScmManager().add( scmRepository, new ScmFileSet( checkedOutRepo, "whiskey.xml" ) );
+        assertResultIsSuccess( addResult );
+        checkInScmResult = getScmManager().checkIn( scmRepository,
+            new ScmFileSet( checkedOutRepo, "whiskey.xml" ), "Checking beer file");
+        assertResultIsSuccess( checkInScmResult );
+    }
+
     // ----------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------
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 512d2ef..d610d51 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
@@ -30,6 +30,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.log.DefaultLog;
 import org.codehaus.plexus.PlexusTestCase;
 
@@ -88,6 +89,15 @@ public class GitStatusConsumerTest
         return consumer.getChangedFiles();
     }
 
+    private List<ScmFile> getChangedFiles( String line, File workingDirectory, URI relativeRepoPath, ScmFileSet scmFileSet )
+    {
+        GitStatusConsumer consumer = new GitStatusConsumer( new DefaultLog(), workingDirectory, relativeRepoPath, scmFileSet );
+
+        consumer.consumeLine( line );
+
+        return consumer.getChangedFiles();
+    }
+
     public void testConsumerUntrackedFile()
     {
         List<ScmFile> changedFiles = getChangedFiles( "?? project.xml", null );
@@ -195,6 +205,29 @@ public class GitStatusConsumerTest
         assertEquals( path, u.getPath() );
     }
 
+    public void testConsumerWithFileSet()
+        throws IOException
+    {
+        File dir = createTempDirectory();
+        FileUtils.write( new File( dir, "project.xml" ), "data" );
+        FileUtils.write( new File( dir, "pom.xml" ), "more data" );
+        File subdir = new File( dir.getAbsolutePath(), "subDir" );
+        subdir.mkdir();
+        FileUtils.write( new File( subdir, "something.xml" ), "data" );
+
+        ScmFileSet scmFileSet = new ScmFileSet( dir, null, "project.xml" );
+        List<ScmFile> changedFiles = getChangedFiles( "M project.xml", dir, null, scmFileSet );
+        assertEquals( 0, changedFiles.size() );
+
+        scmFileSet = new ScmFileSet( dir, "pom.xml" );
+        changedFiles = getChangedFiles( "M pom.xml", dir, null, scmFileSet );
+        assertEquals( 1, changedFiles.size() );
+
+        scmFileSet = new ScmFileSet( subdir, "something.xml", "pom.xml" );
+        changedFiles = getChangedFiles( "M subDir/something.xml", dir, dir.toURI(), scmFileSet );
+        assertEquals( 1, changedFiles.size() );
+    }
+
 	// SCM-740
 	public void testConsumerModifiedFileInComplexDirectorySetup() throws IOException {