You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm-commits@maven.apache.org by ol...@apache.org on 2010/03/11 23:30:56 UTC

svn commit: r922043 - in /maven/scm/trunk: maven-scm-api/src/main/java/org/apache/maven/scm/provider/ maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/ap...

Author: olamy
Date: Thu Mar 11 22:30:56 2010
New Revision: 922043

URL: http://svn.apache.org/viewvc?rev=922043&view=rev
Log:
[SCM-444] Git provider does 'git push' during 'mvn release:prepare' which causes unwanted problems
Add a parameter to be able to disable push (parameter is true per default)
Submitted by Hiram Chirino

Modified:
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
    maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java
    maven/scm/trunk/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
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java?rev=922043&r1=922042&r2=922043&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java Thu Mar 11 22:30:56 2010
@@ -33,6 +33,11 @@ public abstract class ScmProviderReposit
     private boolean persistCheckout = false;
 
     /**
+     * @since 1.4
+     */
+    private boolean pushChanges = true;
+
+    /**
      * @return The user.
      */
     public String getUser()
@@ -69,6 +74,27 @@ public abstract class ScmProviderReposit
     }
 
     /**
+     * Should distributed changes be pushed to the central repository?
+     * For many distributed SCMs like Git, a change like a commit 
+     * is only stored in your local copy of the repository.  Pushing
+     * the change allows your to more easily share it with other users.
+     * @since 1.4
+     */
+    public boolean isPushChanges() 
+    {
+        return pushChanges;
+    }
+
+    /**
+     * @since 1.4
+     * @param pushChanges
+     */
+    public void setPushChanges(boolean pushChanges) 
+    {
+        this.pushChanges = pushChanges;
+    }
+
+    /**
      * Will checkouts using this repository be persisted so they can
      * be refreshed in the future?  This property is of concern to SCMs
      * like Perforce and Clearcase where the server must track where a

Modified: maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java?rev=922043&r1=922042&r2=922043&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java (original)
+++ maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java Thu Mar 11 22:30:56 2010
@@ -163,6 +163,16 @@ public abstract class AbstractScmMojo
      * @parameter
      */
     private Map providerImplementations;
+    
+    /**
+     * Should distributed changes be pushed to the central repository?
+     * For many distributed SCMs like Git, a change like a commit 
+     * is only stored in your local copy of the repository.  Pushing
+     * the change allows your to more easily share it with other users.
+     * 
+     * @parameter expression="${pushChanges}" default-value="true"
+     */
+    private boolean pushChanges;
 
     /** {@inheritDoc} */
     public void execute()
@@ -271,6 +281,8 @@ public abstract class AbstractScmMojo
             repository = getScmManager().makeScmRepository( getConnectionUrl() );
 
             ScmProviderRepository providerRepo = repository.getProviderRepository();
+            
+            providerRepo.setPushChanges(pushChanges);
 
             if ( !StringUtils.isEmpty( username ) )
             {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java?rev=922043&r1=922042&r2=922043&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java Thu Mar 11 22:30:56 2010
@@ -74,13 +74,16 @@ public class GitBranchCommand
             return new BranchScmResult( cl.toString(), "The git-branch command failed.", stderr.getOutput(), false );
         }
 
-        // and now push the branch to the origin repository
-        Commandline clPush = createPushCommandLine( repository, fileSet, branch );
-
-        exitCode = GitCommandLineUtils.execute( clPush, stdout, stderr, getLogger() );
-        if ( exitCode != 0 )
+        if( repo.isPushChanges() ) 
         {
-            return new BranchScmResult( clPush.toString(), "The git-push command failed.", stderr.getOutput(), false );
+            // and now push the branch to the origin repository
+            Commandline clPush = createPushCommandLine( repository, fileSet, branch );
+
+            exitCode = GitCommandLineUtils.execute( clPush, stdout, stderr, getLogger() );
+            if ( exitCode != 0 )
+            {
+                return new BranchScmResult( clPush.toString(), "The git-push command failed.", stderr.getOutput(), false );
+            }
         }
 
         // as last action we search for the branched files

Modified: maven/scm/trunk/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
URL: http://svn.apache.org/viewvc/maven/scm/trunk/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?rev=922043&r1=922042&r2=922043&view=diff
==============================================================================
--- maven/scm/trunk/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 (original)
+++ maven/scm/trunk/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 Thu Mar 11 22:30:56 2010
@@ -122,12 +122,15 @@ public class GitCheckInCommand
                                              false );
             }
 
-            Commandline cl = createPushCommandLine( getLogger(), repository, fileSet, version );
-
-            exitCode = GitCommandLineUtils.execute( cl, stdout, stderr, getLogger() );
-            if ( exitCode != 0 )
+            if( repo.isPushChanges() ) 
             {
-                return new CheckInScmResult( cl.toString(), "The git-push command failed.", stderr.getOutput(), false );
+                Commandline cl = createPushCommandLine( getLogger(), repository, fileSet, version );
+
+                exitCode = GitCommandLineUtils.execute( cl, stdout, stderr, getLogger() );
+                if ( exitCode != 0 )
+                {
+                    return new CheckInScmResult( cl.toString(), "The git-push command failed.", stderr.getOutput(), false );
+                }                
             }
 
             List checkedInFiles = new ArrayList( statusConsumer.getChangedFiles().size() );
@@ -156,7 +159,7 @@ public class GitCheckInCommand
                 }
             }
 
-            return new CheckInScmResult( cl.toString(), checkedInFiles );
+            return new CheckInScmResult( clCommit.toString(), checkedInFiles );
         }
         finally
         {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java?rev=922043&r1=922042&r2=922043&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java Thu Mar 11 22:30:56 2010
@@ -99,15 +99,18 @@ public class GitTagCommand
                 return new TagScmResult( clTag.toString(), "The git-tag command failed.", stderr.getOutput(), false );
             }
 
-            // and now push the tag to the origin repository
-            Commandline clPush = createPushCommandLine( repository, fileSet, tag );
-
-            exitCode = GitCommandLineUtils.execute( clPush, stdout, stderr, getLogger() );
-            if ( exitCode != 0 )
+            if( repo.isPushChanges() ) 
             {
-                return new TagScmResult( clPush.toString(), "The git-push command failed.", stderr.getOutput(), false );
+                // and now push the tag to the origin repository
+                Commandline clPush = createPushCommandLine( repository, fileSet, tag );
+    
+                exitCode = GitCommandLineUtils.execute( clPush, stdout, stderr, getLogger() );
+                if ( exitCode != 0 )
+                {
+                    return new TagScmResult( clPush.toString(), "The git-push command failed.", stderr.getOutput(), false );
+                }
             }
-
+            
             // plus search for the tagged files
             GitListConsumer listConsumer = new GitListConsumer( getLogger(), fileSet.getBasedir(), ScmFileStatus.TAGGED );