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>