Author: rfscholte
Date: Sat Jun 23 15:45:39 2012
New Revision: 1353151

URL: http://svn.apache.org/viewvc?rev=1353151&view=rev
Log:
Fix MRELEASE-619: release:branch doesn't work as expected with flat layout 
multi-module projects
Added tests based on ScmTagPhaseTest which also covers this issue

Added:
    
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchEquals.java
    
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java
    
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java
      - copied, changed from r1351084, 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParamtersEquals.java
    
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.java
    
maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.xml
Removed:
    
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParamtersEquals.java
Modified:
    
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java
    
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java

Modified: 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java?rev=1353151&r1=1353150&r2=1353151&view=diff
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java
 (original)
+++ 
maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java
 Sat Jun 23 15:45:39 2012
@@ -36,6 +36,7 @@ import org.apache.maven.shared.release.e
 import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
 import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
+import org.apache.maven.shared.release.util.ReleaseUtil;
 
 import java.io.File;
 import java.util.List;
@@ -61,19 +62,22 @@ public class ScmBranchPhase
         throws ReleaseExecutionException, ReleaseFailureException
     {
         ReleaseResult relResult = new ReleaseResult();
-
+       ReleaseDescriptor basedirAlignedReleaseDescriptor = 
+            ReleaseUtil.createBasedirAlignedReleaseDescriptor( 
releaseDescriptor, reactorProjects );
         validateConfiguration( releaseDescriptor );
 
-        logInfo( relResult, "Branching release with the label " + 
releaseDescriptor.getScmReleaseLabel() + "..." );
+        logInfo( relResult, "Branching release with the label " + 
basedirAlignedReleaseDescriptor.getScmReleaseLabel() + "..." );
 
         ScmRepository repository;
         ScmProvider provider;
         try
         {
             repository =
-                scmRepositoryConfigurator.getConfiguredRepository( 
releaseDescriptor, releaseEnvironment.getSettings() );
+                scmRepositoryConfigurator.getConfiguredRepository( 
basedirAlignedReleaseDescriptor.getScmSourceUrl(),
+                                                                   
releaseDescriptor,
+                                                                   
releaseEnvironment.getSettings() );
 
-            repository.getProviderRepository().setPushChanges( 
releaseDescriptor.isPushChanges() );
+            
repository.getProviderRepository().setPushChanges(releaseDescriptor.isPushChanges()
 );
 
             provider = scmRepositoryConfigurator.getRepositoryProvider( 
repository );
             
@@ -90,7 +94,7 @@ public class ScmBranchPhase
         BranchScmResult result;
         try
         {
-            ScmFileSet fileSet = new ScmFileSet( new File( 
releaseDescriptor.getWorkingDirectory() ) );
+            ScmFileSet fileSet = new ScmFileSet( new File( 
basedirAlignedReleaseDescriptor.getWorkingDirectory() ) );
             String branchName = releaseDescriptor.getScmReleaseLabel();
 
             ScmBranchParameters scmBranchParameters = new 
ScmBranchParameters();
@@ -122,8 +126,10 @@ public class ScmBranchPhase
         ReleaseResult result = new ReleaseResult();
 
         validateConfiguration( releaseDescriptor );
+       ReleaseDescriptor basedirAlignedReleaseDescriptor =
+            ReleaseUtil.createBasedirAlignedReleaseDescriptor( 
releaseDescriptor, reactorProjects );
 
-        logInfo( result, "Full run would be branching " + 
releaseDescriptor.getWorkingDirectory() );
+        logInfo( result, "Full run would be branching " + 
basedirAlignedReleaseDescriptor.getWorkingDirectory() );
         if ( releaseDescriptor.getScmBranchBase() != null )
         {
             logInfo( result, "  To SCM URL: " + 
releaseDescriptor.getScmBranchBase() );

Added: 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchEquals.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchEquals.java?rev=1353151&view=auto
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchEquals.java
 (added)
+++ 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchEquals.java
 Sat Jun 23 15:45:39 2012
@@ -0,0 +1,46 @@
+package org.apache.maven.shared.release.phase;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmBranch;
+import org.mockito.ArgumentMatcher;
+
+/**
+ * JMock constraint to compare tags since it has no equals method.
+ *
+ * @author <a href="mailto:[email protected]";>Brett Porter</a>
+ */
+public class IsScmBranchEquals extends ArgumentMatcher<ScmBranch>
+{
+    private final ScmBranch branch;
+
+    public IsScmBranchEquals( ScmBranch branch )
+    {
+        this.branch = branch;
+    }
+
+    @Override
+    public boolean matches( Object argument )
+    {
+        ScmBranch sb = (ScmBranch) argument;
+
+        return sb.getName().equals( this.branch.getName() );
+    }
+}
\ No newline at end of file

Added: 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java?rev=1353151&view=auto
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java
 (added)
+++ 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmBranchParametersEquals.java
 Sat Jun 23 15:45:39 2012
@@ -0,0 +1,46 @@
+package org.apache.maven.shared.release.phase;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmBranchParameters;
+
+import org.mockito.ArgumentMatcher;
+
+/**
+ * @author <a href="mailto:[email protected]";>olamy</a>
+ */
+public class IsScmBranchParametersEquals extends 
ArgumentMatcher<ScmBranchParameters>
+{
+    private final ScmBranchParameters scmBranchParameters;
+
+    public IsScmBranchParametersEquals( ScmBranchParameters 
scmBranchParameters )
+    {
+        this.scmBranchParameters = scmBranchParameters;
+    }
+
+    @Override
+    public boolean matches( Object argument )
+    {
+        ScmBranchParameters sbp = (ScmBranchParameters) argument;
+        return sbp.getMessage().equals( this.scmBranchParameters.getMessage() )
+            //&& stp.isRemoteTagging() == 
this.scmBranchParameters.isRemoteTagging()
+            ;
+    }
+}

Copied: 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java
 (from r1351084, 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParamtersEquals.java)
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java?p2=maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java&p1=maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParamtersEquals.java&r1=1351084&r2=1353151&rev=1353151&view=diff
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParamtersEquals.java
 (original)
+++ 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java
 Sat Jun 23 15:45:39 2012
@@ -25,11 +25,11 @@ import org.mockito.ArgumentMatcher;
 /**
  * @author <a href="mailto:[email protected]";>olamy</a>
  */
-public class IsScmTagParamtersEquals extends ArgumentMatcher<ScmTagParameters>
+public class IsScmTagParametersEquals extends ArgumentMatcher<ScmTagParameters>
 {
     private final ScmTagParameters scmTagParameters;
 
-    public IsScmTagParamtersEquals( ScmTagParameters scmTagParameters )
+    public IsScmTagParametersEquals( ScmTagParameters scmTagParameters )
     {
         this.scmTagParameters = scmTagParameters;
     }

Added: 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.java?rev=1353151&view=auto
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.java
 (added)
+++ 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.java
 Sat Jun 23 15:45:39 2012
@@ -0,0 +1,434 @@
+package org.apache.maven.shared.release.phase;
+
+/*
+ * 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.
+ */
+
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.scm.ScmBranchParameters;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.provider.ScmProviderStub;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+import org.apache.maven.shared.release.ReleaseExecutionException;
+import org.apache.maven.shared.release.ReleaseFailureException;
+import org.apache.maven.shared.release.config.ReleaseDescriptor;
+import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
+import org.apache.maven.shared.release.scm.DefaultScmRepositoryConfigurator;
+import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
+import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
+import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
+import org.apache.maven.shared.release.stubs.ScmManagerStub;
+import org.apache.maven.shared.release.util.ReleaseUtil;
+
+/**
+ * Test the SCM branch phase.
+ *
+ * @author <a href="mailto:[email protected]";>Brett Porter</a>
+ */
+public class ScmBranchPhaseTest
+    extends AbstractReleaseTestCase
+{
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        phase = (ReleasePhase) lookup( ReleasePhase.ROLE, "scm-branch" );
+    }
+
+    public static String getPath(File file) 
+        throws IOException
+    {
+        return ReleaseUtil.isSymlink( file ) ? file.getCanonicalPath() : 
file.getAbsolutePath();
+    }
+    
+    public void testBranch()
+        throws Exception
+    {
+        // prepare
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        List<MavenProject> reactorProjects = createReactorProjects();
+        descriptor.setScmSourceUrl( "scm-url" );
+        MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects 
);
+        descriptor.setWorkingDirectory( 
getPath(rootProject.getFile().getParentFile() ) );
+        descriptor.setScmReleaseLabel( "release-label" );
+        descriptor.setScmCommentPrefix( "[my prefix]" );
+
+        ScmFileSet fileSet = new ScmFileSet( 
rootProject.getFile().getParentFile() );
+
+        ScmProvider scmProviderMock = mock( ScmProvider.class );
+        when( scmProviderMock.branch( isA( ScmRepository.class ),
+                                   argThat( new IsScmFileSetEquals( fileSet ) 
),
+                                   eq( "release-label" ), 
+                                   argThat( new IsScmBranchParametersEquals( 
new ScmBranchParameters( "[my prefix] copy for branch release-label" ) ) ) ) ).
+                                   thenReturn( new BranchScmResult( "...", 
+                                                                 
Collections.singletonList( new ScmFile( getPath (rootProject
+                                                                               
                                   .getFile() ), ScmFileStatus.TAGGED ) ) ) );
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( scmProviderMock );
+
+        // execute
+        phase.execute( descriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+
+        // verify
+        verify( scmProviderMock ).branch( isA( ScmRepository.class ),
+                                       argThat( new IsScmFileSetEquals( 
fileSet ) ),
+                                       eq( "release-label" ), 
+                                       argThat( new 
IsScmBranchParametersEquals( new ScmBranchParameters( "[my prefix] copy for 
branch release-label" ) ) ) );
+        verifyNoMoreInteractions( scmProviderMock );
+    }
+
+    public void testCommitMultiModuleDeepFolders()
+        throws Exception
+    {
+        // prepare
+        List<MavenProject> reactorProjects = createReactorProjects( 
"scm-commit/", "multimodule-with-deep-subprojects" );
+        String sourceUrl = "http://svn.example.com/repos/project/trunk/";;
+        String scmUrl = "scm:svn:" + sourceUrl;
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        descriptor.setScmSourceUrl( scmUrl );
+        MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects 
);
+        descriptor.setWorkingDirectory( getPath( 
rootProject.getFile().getParentFile() ) );
+        descriptor.setScmReleaseLabel( "release-label" );
+        descriptor.setScmCommentPrefix( "[my prefix]" );
+        descriptor.setScmBranchBase( 
"http://svn.example.com/repos/project/branches/"; );
+
+        ScmFileSet fileSet = new ScmFileSet( 
rootProject.getFile().getParentFile() );
+
+        SvnScmProviderRepository scmProviderRepository = new 
SvnScmProviderRepository( sourceUrl );
+        scmProviderRepository.setBranchBase( 
"http://svn.example.com/repos/project/branches/"; );
+        ScmRepository repository = new ScmRepository( "svn", 
scmProviderRepository );
+        ScmProvider scmProviderMock = mock( ScmProvider.class );
+        when( scmProviderMock.branch( eq( repository ),
+                                   argThat(new IsScmFileSetEquals( fileSet ) 
), 
+                                   eq( "release-label" ),
+                                   argThat(new IsScmBranchParametersEquals( 
new ScmBranchParameters( "[my prefix] copy for branch release-label" ) ) ) ) ).
+                                       thenReturn(  new BranchScmResult( 
"...", Collections.singletonList( new ScmFile( getPath (rootProject
+                                                                               
                                               .getFile() ), 
ScmFileStatus.TAGGED ) ) ) ) ;
+
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( scmProviderMock );
+        stub.addScmRepositoryForUrl( scmUrl, repository );
+
+        // execute
+        phase.execute( descriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+        
+        // verify
+        verify( scmProviderMock ).branch( eq( repository ),
+                                       argThat(new IsScmFileSetEquals( fileSet 
) ), 
+                                       eq( "release-label" ),
+                                       argThat(new 
IsScmBranchParametersEquals( new ScmBranchParameters( "[my prefix] copy for 
branch release-label" ) ) ) );
+        verifyNoMoreInteractions( scmProviderMock ); 
+    }
+
+    public void testCommitForFlatMultiModule()
+        throws Exception
+    {
+        // prepare
+        List<MavenProject> reactorProjects =
+            createReactorProjects( "rewrite-for-release/pom-with-parent-flat", 
"/root-project" );
+        MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects 
);
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        descriptor.setScmSourceUrl( rootProject.getScm().getConnection() );
+        descriptor.setWorkingDirectory( getPath( 
rootProject.getFile().getParentFile() ) );
+        descriptor.setScmReleaseLabel( "release-label" );
+        descriptor.setScmCommentPrefix( "[my prefix]" );
+
+        // one directory up from root project
+        ScmFileSet fileSet = new ScmFileSet( 
rootProject.getFile().getParentFile().getParentFile() );
+
+        String scmUrl = "file://localhost/tmp/scm-repo/trunk";
+        SvnScmProviderRepository scmProviderRepository = new 
SvnScmProviderRepository( scmUrl );
+        ScmRepository repository = new ScmRepository( "svn", 
scmProviderRepository );
+        ScmProvider scmProviderMock = mock( ScmProvider.class );
+        when( scmProviderMock.branch( eq( repository ),
+                                   argThat( new IsScmFileSetEquals( fileSet ) 
),
+                                   eq( "release-label" ),
+                                   argThat( new IsScmBranchParametersEquals( 
new ScmBranchParameters(
+                                           "[my prefix] copy for branch 
release-label" ) ) ) ) ).thenReturn( new BranchScmResult(
+                                                "...",
+                                                Collections.singletonList( new 
ScmFile(
+                                                                               
         getPath( rootProject.getFile() ),
+                                                                               
         ScmFileStatus.TAGGED ) ) ) );
+
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( scmProviderMock );
+        stub.addScmRepositoryForUrl( "scm:svn:" + scmUrl, repository );
+
+        // execute
+        phase.execute( descriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+        
+        // verify
+        verify( scmProviderMock ).branch( eq( repository ),
+                                       argThat( new IsScmFileSetEquals( 
fileSet ) ),
+                                       eq( "release-label" ),
+                                       argThat( new 
IsScmBranchParametersEquals( new ScmBranchParameters( "[my prefix] copy for 
branch release-label" ) ) ) );
+        verifyNoMoreInteractions( scmProviderMock );
+    }
+
+    public void testCommitMultiModule()
+        throws Exception
+    {
+        // prepare
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        List<MavenProject> reactorProjects = createReactorProjects( 
"scm-commit/", "multiple-poms" );
+        descriptor.setScmSourceUrl( "scm-url" );
+        MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects 
);
+        descriptor.setWorkingDirectory( getPath 
(rootProject.getFile().getParentFile() ) );
+        descriptor.setScmReleaseLabel( "release-label" );
+        descriptor.setScmCommentPrefix( "[my prefix]" );
+
+        ScmFileSet fileSet = new ScmFileSet( 
rootProject.getFile().getParentFile() );
+
+        ScmProvider scmProviderMock = mock( ScmProvider.class );
+        when( scmProviderMock.branch( isA( ScmRepository.class ),
+                                   argThat( new IsScmFileSetEquals( fileSet ) 
),
+                                   eq( "release-label" ),
+                                   argThat( new IsScmBranchParametersEquals( 
new ScmBranchParameters( "[my prefix] copy for branch release-label" ) ) ) ) 
).thenReturn( new BranchScmResult( "...", Collections.singletonList( new 
ScmFile( getPath( rootProject
+                       .getFile() ), ScmFileStatus.TAGGED ) ) ) );
+
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( scmProviderMock );
+
+        // exeucte
+        phase.execute( descriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+
+        // verify
+        verify( scmProviderMock ).branch( isA( ScmRepository.class ),
+                                       argThat( new IsScmFileSetEquals( 
fileSet ) ),
+                                       eq( "release-label" ),
+                                       argThat( new 
IsScmBranchParametersEquals( new ScmBranchParameters( "[my prefix] copy for 
branch release-label" ) ) ) );
+        verifyNoMoreInteractions( scmProviderMock );
+    }
+
+    public void testBranchNoReleaseLabel()
+        throws Exception
+    {
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        List<MavenProject> reactorProjects = createReactorProjects();
+
+        try
+        {
+            phase.execute( descriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+            fail( "Should have thrown an exception" );
+        }
+        catch ( ReleaseFailureException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    public void testSimulateBranch()
+        throws Exception
+    {
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        List<MavenProject> reactorProjects = createReactorProjects();
+        descriptor.setScmSourceUrl( "scm-url" );
+        MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects 
);
+        descriptor.setWorkingDirectory( getPath ( 
rootProject.getFile().getParentFile() ) );
+        descriptor.setScmReleaseLabel( "release-label" );
+
+        ScmProvider scmProviderMock = mock( ScmProvider.class );
+
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( scmProviderMock );
+
+        // execute
+        phase.simulate( descriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+
+        // verify
+        // no scmProvider invocation
+        verifyNoMoreInteractions( scmProviderMock );
+    }
+
+    public void testSimulateBranchNoReleaseLabel()
+        throws Exception
+    {
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        List<MavenProject> reactorProjects = createReactorProjects();
+
+        try
+        {
+            phase.simulate( descriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+            fail( "Should have thrown an exception" );
+        }
+        catch ( ReleaseFailureException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    public void testNoSuchScmProviderExceptionThrown()
+        throws Exception
+    {
+        // prepare
+        List<MavenProject> reactorProjects = createReactorProjects();
+        ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
+
+        ScmManager scmManagerMock = mock( ScmManager.class );
+        when( scmManagerMock.makeScmRepository( "scm-url" ) ).thenThrow( new 
NoSuchScmProviderException( "..." ) );
+
+        DefaultScmRepositoryConfigurator configurator =
+            (DefaultScmRepositoryConfigurator) lookup( 
ScmRepositoryConfigurator.ROLE );
+        configurator.setScmManager( scmManagerMock );
+
+        // execute
+        try
+        {
+            phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+
+            fail( "Status check should have failed" );
+        }
+        catch ( ReleaseExecutionException e )
+        {
+            assertEquals( "check cause", NoSuchScmProviderException.class, 
e.getCause().getClass() );
+        }
+        
+        // verify
+        verify( scmManagerMock ).makeScmRepository( "scm-url" );
+        verifyNoMoreInteractions( scmManagerMock );
+    }
+
+    public void testScmRepositoryExceptionThrown()
+        throws Exception
+    {
+        // prepare
+        List<MavenProject> reactorProjects = createReactorProjects();
+        ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
+
+        ScmManager scmManagerMock = mock( ScmManager.class );
+        when( scmManagerMock.makeScmRepository( "scm-url" ) ).thenThrow( new 
ScmRepositoryException( "..." ) );
+        DefaultScmRepositoryConfigurator configurator =
+            (DefaultScmRepositoryConfigurator) lookup( 
ScmRepositoryConfigurator.ROLE );
+        configurator.setScmManager( scmManagerMock );
+
+        // execute
+        try
+        {
+            phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+
+            fail( "Status check should have failed" );
+        }
+        catch ( ReleaseScmRepositoryException e )
+        {
+            assertNull( "Check no additional cause", e.getCause() );
+        }
+        
+        // verify
+        verify( scmManagerMock ).makeScmRepository( "scm-url" );
+        verifyNoMoreInteractions( scmManagerMock );
+    }
+
+    public void testScmExceptionThrown()
+        throws Exception
+    {
+        // prepare
+        List<MavenProject> reactorProjects = createReactorProjects();
+        ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
+
+        ScmProvider scmProviderMock = mock( ScmProvider.class );
+        when( scmProviderMock.branch( isA( ScmRepository.class ),
+                                   isA( ScmFileSet.class ),
+                                   isA( String.class ),
+                                   isA( ScmBranchParameters.class ) ) 
).thenThrow( new ScmException( "..." ) );
+
+        ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
+        stub.setScmProvider( scmProviderMock );
+
+        // execute
+        try
+        {
+            phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+
+            fail( "Status check should have failed" );
+        }
+        catch ( ReleaseExecutionException e )
+        {
+            assertEquals( "check cause", ScmException.class, 
e.getCause().getClass() );
+        }
+        
+        // verify
+        verify( scmProviderMock ).branch( isA( ScmRepository.class ),
+                                       isA( ScmFileSet.class ),
+                                       isA( String.class ),
+                                       isA( ScmBranchParameters.class ) );
+        verifyNoMoreInteractions( scmProviderMock );
+    }
+
+    public void testScmResultFailure()
+        throws Exception
+    {
+        List<MavenProject> reactorProjects = createReactorProjects();
+        ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
+
+        ScmManager scmManager = (ScmManager) lookup( ScmManager.ROLE );
+        ScmProviderStub providerStub =
+            (ScmProviderStub) scmManager.getProviderByUrl( 
releaseDescriptor.getScmSourceUrl() );
+
+        providerStub.setBranchScmResult( new BranchScmResult( "", "", "", 
false ) );
+
+        try
+        {
+            phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), 
reactorProjects );
+
+            fail( "Commit should have failed" );
+        }
+        catch ( ReleaseScmCommandException e )
+        {
+            assertNull( "check no other cause", e.getCause() );
+        }
+    }
+
+    private List<MavenProject> createReactorProjects()
+        throws Exception
+    {
+        return createReactorProjects( "scm-commit/", "single-pom" );
+    }
+
+    private static ReleaseDescriptor createReleaseDescriptor() 
+        throws IOException
+    {
+        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        descriptor.setScmSourceUrl( "scm-url" );
+        descriptor.setScmReleaseLabel( "release-label" );
+        descriptor.setWorkingDirectory( getPath(getTestFile( 
"target/test/checkout" ) ) );
+        return descriptor;
+    }
+}
\ No newline at end of file

Modified: 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java?rev=1353151&r1=1353150&r2=1353151&view=diff
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java
 (original)
+++ 
maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java
 Sat Jun 23 15:45:39 2012
@@ -97,7 +97,7 @@ public class ScmTagPhaseTest
         when( scmProviderMock.tag( isA( ScmRepository.class ),
                                    argThat( new IsScmFileSetEquals( fileSet ) 
),
                                    eq( "release-label" ), 
-                                   argThat( new IsScmTagParamtersEquals( new 
ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) ) ).
+                                   argThat( new IsScmTagParametersEquals( new 
ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) ) ).
                                    thenReturn( new TagScmResult( "...", 
                                                                  
Collections.singletonList( new ScmFile( getPath (rootProject
                                                                                
                                   .getFile() ), ScmFileStatus.TAGGED ) ) ) );
@@ -111,7 +111,7 @@ public class ScmTagPhaseTest
         verify( scmProviderMock ).tag( isA( ScmRepository.class ),
                                        argThat( new IsScmFileSetEquals( 
fileSet ) ),
                                        eq( "release-label" ), 
-                                       argThat( new IsScmTagParamtersEquals( 
new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) );
+                                       argThat( new IsScmTagParametersEquals( 
new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) );
         verifyNoMoreInteractions( scmProviderMock );
     }
 
@@ -139,7 +139,7 @@ public class ScmTagPhaseTest
         when( scmProviderMock.tag( eq( repository ),
                                    argThat(new IsScmFileSetEquals( fileSet ) 
), 
                                    eq( "release-label" ),
-                                   argThat(new IsScmTagParamtersEquals( new 
ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) ) ).
+                                   argThat(new IsScmTagParametersEquals( new 
ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) ) ).
                                        thenReturn(  new TagScmResult( "...", 
Collections.singletonList( new ScmFile( getPath (rootProject
                                                                                
                                               .getFile() ), 
ScmFileStatus.TAGGED ) ) ) ) ;
 
@@ -154,7 +154,7 @@ public class ScmTagPhaseTest
         verify( scmProviderMock ).tag( eq( repository ),
                                        argThat(new IsScmFileSetEquals( fileSet 
) ), 
                                        eq( "release-label" ),
-                                       argThat(new IsScmTagParamtersEquals( 
new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) );
+                                       argThat(new IsScmTagParametersEquals( 
new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) );
         verifyNoMoreInteractions( scmProviderMock ); 
     }
 
@@ -181,7 +181,7 @@ public class ScmTagPhaseTest
         when( scmProviderMock.tag( eq( repository ),
                                    argThat( new IsScmFileSetEquals( fileSet ) 
),
                                    eq( "release-label" ),
-                                   argThat( new IsScmTagParamtersEquals( new 
ScmTagParameters(
+                                   argThat( new IsScmTagParametersEquals( new 
ScmTagParameters(
                                            "[my prefix] copy for tag 
release-label" ) ) ) ) ).thenReturn( new TagScmResult(
                                                 "...",
                                                 Collections.singletonList( new 
ScmFile(
@@ -199,7 +199,7 @@ public class ScmTagPhaseTest
         verify( scmProviderMock ).tag( eq( repository ),
                                        argThat( new IsScmFileSetEquals( 
fileSet ) ),
                                        eq( "release-label" ),
-                                       argThat( new IsScmTagParamtersEquals( 
new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) );
+                                       argThat( new IsScmTagParametersEquals( 
new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) );
         verifyNoMoreInteractions( scmProviderMock );
     }
 
@@ -221,7 +221,7 @@ public class ScmTagPhaseTest
         when( scmProviderMock.tag( isA( ScmRepository.class ),
                                    argThat( new IsScmFileSetEquals( fileSet ) 
),
                                    eq( "release-label" ),
-                                   argThat( new IsScmTagParamtersEquals( new 
ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) ) 
).thenReturn( new TagScmResult( "...", Collections.singletonList( new ScmFile( 
getPath( rootProject
+                                   argThat( new IsScmTagParametersEquals( new 
ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) ) 
).thenReturn( new TagScmResult( "...", Collections.singletonList( new ScmFile( 
getPath( rootProject
                        .getFile() ), ScmFileStatus.TAGGED ) ) ) );
 
         ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
@@ -234,7 +234,7 @@ public class ScmTagPhaseTest
         verify( scmProviderMock ).tag( isA( ScmRepository.class ),
                                        argThat( new IsScmFileSetEquals( 
fileSet ) ),
                                        eq( "release-label" ),
-                                       argThat( new IsScmTagParamtersEquals( 
new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) );
+                                       argThat( new IsScmTagParametersEquals( 
new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) );
         verifyNoMoreInteractions( scmProviderMock );
     }
 

Added: 
maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.xml
URL: 
http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.xml?rev=1353151&view=auto
==============================================================================
--- 
maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.xml
 (added)
+++ 
maven/release/trunk/maven-release-manager/src/test/resources/org/apache/maven/shared/release/phase/ScmBranchPhaseTest.xml
 Sat Jun 23 15:45:39 2012
@@ -0,0 +1,36 @@
+<!--
+  ~ 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.
+  -->
+
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.scm.manager.ScmManager</role>
+      
<implementation>org.apache.maven.shared.release.stubs.ScmManagerStub</implementation>
+    </component>
+    <!-- Turn off info messages -->
+    <component>
+      <role>org.codehaus.plexus.logging.LoggerManager</role>
+      
<implementation>org.codehaus.plexus.logging.console.ConsoleLoggerManager</implementation>
+      <lifecycle-handler>basic</lifecycle-handler>
+      <configuration>
+        <threshold>ERROR</threshold>
+      </configuration>
+    </component>
+  </components>
+</component-set>


Reply via email to