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 );