You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by st...@apache.org on 2009/11/15 20:05:40 UTC

svn commit: r836393 - in /maven/release/trunk: maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ maven-release-manager/src/main/mdo/ maven-release-plug...

Author: struberg
Date: Sun Nov 15 19:05:39 2009
New Revision: 836393

URL: http://svn.apache.org/viewvc?rev=836393&view=rev
Log:
[MRELEASE-501] add the localCheckout option to the release-plugin and the release-manager

This enables us to do a local checkout instead of cloning over the network for distributed SCMs.
usage: mvn release:perform -DlocalCheckout=true


Modified:
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
    maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java
    maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo
    maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java?rev=836393&r1=836392&r2=836393&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java Sun Nov 15 19:05:39 2009
@@ -93,6 +93,7 @@
         mergeInto.setDefaultDevelopmentVersion( mergeOverride( mergeInto.getDefaultDevelopmentVersion(),
                                                                toBeMerged.getDefaultDevelopmentVersion() ) );
         mergeInto.setRemoteTagging( toBeMerged.isRemoteTagging() );
+        mergeInto.setLocalCheckout( toBeMerged.isLocalCheckout() );
         
         // If the user specifies versions, these should be override the existing versions 
         if ( toBeMerged.getReleaseVersions() != null )

Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java?rev=836393&r1=836392&r2=836393&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java (original)
+++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java Sun Nov 15 19:05:39 2009
@@ -68,6 +68,18 @@
         ScmRepository repository;
         ScmProvider provider;
 
+        if ( releaseDescriptor.isLocalCheckout() )
+        {
+            // in the release phase we have to change the checkout URL
+            // to do a local checkout instead of going over the network.
+            
+            // the first step is a bit tricky, we need to know which provider! like e.g. "scm:jgit:http://"
+            // the offset of 4 is because 'scm:' has 4 characters...
+            String providerPart = releaseDescriptor.getScmSourceUrl().substring( 0, releaseDescriptor.getScmSourceUrl().indexOf( ':', 4 ) );
+            releaseDescriptor.setScmSourceUrl( providerPart + ":file://" + releaseDescriptor.getWorkingDirectory() );
+            getLogger().info( "Performing a LOCAL checkout from " + releaseDescriptor.getScmSourceUrl() );
+        }
+        
         try
         {
             repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );

Modified: maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo?rev=836393&r1=836392&r2=836393&view=diff
==============================================================================
--- maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo (original)
+++ maven/release/trunk/maven-release-manager/src/main/mdo/release-descriptor.mdo Sun Nov 15 19:05:39 2009
@@ -407,6 +407,17 @@
           </description>
         </field>   
         <field>
+          <name>localCheckout</name>
+          <version>2.0.0+</version>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+          <description>
+            If the scm provider should use local checkouts via file://${basedir} 
+            instead of doing a clean checkout over the network.
+            This is very helpful for releasing large projects!
+          </description>
+        </field>
+        <field>
           <name>rootProjectPath</name>
           <version>2.0.0+</version>
           <type>String</type>

Modified: maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java?rev=836393&r1=836392&r2=836393&view=diff
==============================================================================
--- maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java (original)
+++ maven/release/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java Sun Nov 15 19:05:39 2009
@@ -166,11 +166,23 @@
     protected String mavenExecutorId;
 
     /**
+     * Use a local checkout instead of doing a checkout from the upstream repository.
+     * ATTENTION: This will only work with distributed SCMs which support the file:// protocol
+     * like e.g. git, jgit or hg!  
+     * 
+     * TODO: we should think about having the defaults for the various SCM providers provided via modello!
+     * 
+     * @parameter expression="${localCheckout}" default-value="false"
+     */
+    private boolean localCheckout;
+    
+    /**
      * The SCM manager.
      * 
      * @component
      */
     private ScmManager scmManager;
+    
 
     /**
      * Gets the enviroment settings configured for this release.
@@ -225,6 +237,8 @@
         descriptor.setWorkingDirectory( basedir.getAbsolutePath() );
 
         descriptor.setPomFileName( pomFileName );
+        
+        descriptor.setLocalCheckout( localCheckout );
 
         List profiles = project.getActiveProfiles();