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


Reply via email to