Author: evenisse
Date: Fri Apr 6 00:17:39 2007
New Revision: 526078
URL: http://svn.apache.org/viewvc?view=rev&rev=526078
Log:
[MRELEASE-208] Support for ClearCase, and other SCMs that do checkout projects
to subdirectories of the checkout directory
Submitted by: Arne Degenring
Added:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
(with props)
Modified:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
Modified:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
URL:
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java?view=diff&rev=526078&r1=526077&r2=526078
==============================================================================
---
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
(original)
+++
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
Fri Apr 6 00:17:39 2007
@@ -431,7 +431,8 @@
try
{
- mavenExecutor.executeGoals( checkoutDirectory, goals,
config.isInteractive(), additionalArguments,
+ File workingDirectory =
determineWorkingDirectory(checkoutDirectory,
scmResult.getRelativePathProjectDirectory());
+ mavenExecutor.executeGoals( workingDirectory, goals,
config.isInteractive(), additionalArguments,
config.getPomFileName(), result );
}
catch ( MavenExecutorException e )
@@ -448,6 +449,30 @@
updateListener( listener, "cleanup", PHASE_END );
updateListener( listener, "perform", GOAL_END );
+ }
+
+ /**
+ * Determines the path of the working directory. By default, this is the
+ * checkout directory. For some SCMs, the project root directory is not the
+ * checkout directory itself, but a SCM-specific subdirectory.
+ *
+ * @param checkoutDirectory
+ * The checkout directory as java.io.File
+ * @param relativePathProjectDirectory
+ * The relative path of the project directory within the
checkout
+ * directory or ""
+ * @return The working directory
+ */
+ protected File determineWorkingDirectory( File checkoutDirectory, String
relativePathProjectDirectory)
+ {
+ if ( StringUtils.isNotEmpty( relativePathProjectDirectory ) )
+ {
+ return new File( checkoutDirectory, relativePathProjectDirectory );
+ }
+ else
+ {
+ return checkoutDirectory;
+ }
}
private ReleaseDescriptor loadReleaseDescriptor( ReleaseDescriptor
releaseDescriptor,
Added:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
URL:
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java?view=auto&rev=526078
==============================================================================
---
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
(added)
+++
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
Fri Apr 6 00:17:39 2007
@@ -0,0 +1,46 @@
+package org.apache.maven.shared.release.scm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * ClearCase tag translator.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Arne Degenring</a>
+ */
+public class ClearCaseScmTranslator
+ implements ScmTranslator
+{
+ public String translateTagUrl( String url, String tag, String tagBase )
+ {
+ return url;
+ }
+
+ public String resolveTag( String tag )
+ {
+ if ( !"HEAD".equals( tag ) )
+ {
+ return tag;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
Propchange:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified:
maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml
URL:
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=526078&r1=526077&r2=526078
==============================================================================
---
maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml
(original)
+++
maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml
Fri Apr 6 00:17:39 2007
@@ -266,6 +266,11 @@
<implementation>org.apache.maven.shared.release.scm.CvsScmTranslator</implementation>
</component>
<component>
+ <role>org.apache.maven.shared.release.scm.ScmTranslator</role>
+ <role-hint>clearcase</role-hint>
+
<implementation>org.apache.maven.shared.release.scm.ClearCaseScmTranslator</implementation>
+ </component>
+ <component>
<role>org.apache.maven.shared.release.exec.MavenExecutor</role>
<implementation>org.apache.maven.shared.release.exec.ForkedMavenExecutor</implementation>
<requirements>
Modified:
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
URL:
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java?view=diff&rev=526078&r1=526077&r2=526078
==============================================================================
---
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
(original)
+++
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
Fri Apr 6 00:17:39 2007
@@ -43,6 +43,7 @@
import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
import org.jmock.Mock;
import org.jmock.core.Constraint;
import org.jmock.core.constraint.IsAnything;
@@ -762,4 +763,28 @@
}
}
+ public void testDetermineWorkingDirectory()
+ throws Exception
+ {
+ DefaultReleaseManager defaultReleaseManager = new
DefaultReleaseManager();
+
+ File checkoutDir = getTestFile( "target/checkout" );
+ FileUtils.forceDelete( checkoutDir );
+ checkoutDir.mkdirs();
+
+ File projectDir = getTestFile( "target/checkout/my/project" );
+ projectDir.mkdirs();
+
+ // only checkout dir
+ assertEquals( checkoutDir,
defaultReleaseManager.determineWorkingDirectory( checkoutDir, "" ) );
+ assertEquals( checkoutDir,
defaultReleaseManager.determineWorkingDirectory( checkoutDir, null ) );
+
+ // checkout dir and relative path project dir
+ assertEquals( projectDir,
defaultReleaseManager.determineWorkingDirectory( checkoutDir, "my/project" ) );
+ assertEquals( projectDir,
defaultReleaseManager.determineWorkingDirectory( checkoutDir, "my/project/" ) );
+ assertEquals( projectDir,
defaultReleaseManager.determineWorkingDirectory( checkoutDir, "my"
+ + File.separator + "project" ) );
+
+ FileUtils.forceDelete( checkoutDir);
+ }
}