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 2012/02/18 00:20:49 UTC
svn commit: r1245806 - in /maven/release/trunk:
maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java
maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
Author: struberg
Date: Fri Feb 17 23:20:48 2012
New Revision: 1245806
URL: http://svn.apache.org/viewvc?rev=1245806&view=rev
Log:
MRELEASE-740 fix sparse release:perform with localCheckout
Modified:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckoutProjectFromScm.java
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/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=1245806&r1=1245805&r2=1245806&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 Fri Feb 17 23:20:48 2012
@@ -61,15 +61,9 @@ public class CheckoutProjectFromScm
public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
List<MavenProject> reactorProjects )
- throws ReleaseExecutionException, ReleaseFailureException
+ throws ReleaseExecutionException, ReleaseFailureException
{
- ReleaseResult result = new ReleaseResult();
-
- logInfo( result, "Checking out the project to perform the release ..." );
-
- ScmRepository repository;
- ScmProvider provider;
-
+ ReleaseResult releaseResult = null;
if ( releaseDescriptor.isLocalCheckout() )
{
@@ -78,15 +72,83 @@ public class CheckoutProjectFromScm
// 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 ) );
+ String providerPart = releaseDescriptor.getScmSourceUrl()
+ .substring(0, releaseDescriptor.getScmSourceUrl().indexOf(':', 4));
+
+ String scmPath = releaseDescriptor.getWorkingDirectory();
+
+ // now we iteratively try to checkout.
+ // if the local checkout fails, then we might be in a subdirectory
+ // and need to walk a few directories up.
+ do
+ {
+ try
+ {
+ String scmUrl = providerPart + ":file://" + scmPath;
+ releaseDescriptor.setScmSourceUrl( scmUrl );
+ getLogger().info( "Performing a LOCAL checkout from " + releaseDescriptor.getScmSourceUrl() );
- //X TODO: also check the information from releaseDescriptor.getScmRelativePathProjectDirectory()
- //X TODO: in case our toplevel git directory has no pom.
+ releaseResult = performCheckout( releaseDescriptor, releaseEnvironment, reactorProjects );
+ }
+ catch ( ScmException scmEx)
+ {
+ // the checkout from _this_ directory failed
+ releaseResult = null;
+ }
- releaseDescriptor.setScmSourceUrl( providerPart + ":file://" + releaseDescriptor.getWorkingDirectory() );
- getLogger().info( "Performing a LOCAL checkout from " + releaseDescriptor.getScmSourceUrl() );
+ if ( releaseResult == null || releaseResult.getResultCode() == ReleaseResult.ERROR )
+ {
+ // this means that there is no SCM repo in this directory
+ // thus we try to step one directory up
+ releaseResult = null;
+
+ // remove last sub-directory path
+ int lastSlashPos = scmPath.lastIndexOf( "/" );
+ if ( lastSlashPos > 0 )
+ {
+ scmPath = scmPath.substring( 0, lastSlashPos );
+ }
+ else
+ {
+ throw new ReleaseExecutionException( "could not perform a local checkout" );
+ }
+ }
+ }
+ while ( releaseResult == null );
}
+ else
+ {
+ // when there is no localCheckout, then we just do a standard SCM checkout.
+ try
+ {
+ releaseResult = performCheckout( releaseDescriptor, releaseEnvironment, reactorProjects );
+ }
+ catch ( ScmException e )
+ {
+ releaseResult = new ReleaseResult();
+ releaseResult.setResultCode( ReleaseResult.ERROR );
+ logError( releaseResult, e.getMessage() );
+
+ throw new ReleaseExecutionException( "An error is occurred in the checkout process: "
+ + e.getMessage(), e );
+ }
+
+ }
+
+ return releaseResult;
+ }
+
+
+ public ReleaseResult performCheckout( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+ List<MavenProject> reactorProjects )
+ throws ReleaseExecutionException, ReleaseFailureException, ScmException
+ {
+ ReleaseResult result = new ReleaseResult();
+
+ logInfo( result, "Checking out the project to perform the release ..." );
+
+ ScmRepository repository;
+ ScmProvider provider;
try
{
@@ -142,17 +204,14 @@ public class CheckoutProjectFromScm
CheckOutScmResult scmResult;
- try
- {
- scmResult = provider.checkOut( repository, new ScmFileSet( checkoutDirectory ),
- new ScmTag( releaseDescriptor.getScmReleaseLabel() ) );
- }
- catch ( ScmException e )
- {
- result.setResultCode( ReleaseResult.ERROR );
- logError( result, e.getMessage() );
+ scmResult = provider.checkOut( repository, new ScmFileSet( checkoutDirectory ),
+ new ScmTag( releaseDescriptor.getScmReleaseLabel() ) );
- throw new ReleaseExecutionException( "An error is occurred in the checkout process: " + e.getMessage(), e );
+ if ( releaseDescriptor.isLocalCheckout() && !scmResult.isSuccess() )
+ {
+ // this is not beautiful but needed to indicate that the execute() method
+ // should continue in the parent directory
+ return null;
}
String scmRelativePathProjectDirectory = scmResult.getRelativePathProjectDirectory();
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=1245806&r1=1245805&r2=1245806&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 Fri Feb 17 23:20:48 2012
@@ -281,7 +281,7 @@ public abstract class AbstractReleaseMoj
descriptor.setPushChanges( pushChanges );
@SuppressWarnings("unchecked")
- List<Profile> profiles = project.getActiveProfiles();
+ List<Profile> profiles = project.getActiveProfiles();
String arguments = this.arguments;
if ( profiles != null && !profiles.isEmpty() )