## Automatically converted by PatchPatcher 1.0 ## lcorneliussen.de (C) 2010 ## ## PatchPatcher modifies git patches to be applyable on svn working copies. ## ## More at http://lcorneliussen.de/patchpatcher ## ## Online: http://lcorneliussen.de/utils/git-svn/github.com/lcorneliussen/maven-release/tree/MRELEASE-524-batch-mode ## Download: http://lcorneliussen.de/utils/git-svn/download/github.com/lcorneliussen/maven-release/tree/MRELEASE-524-batch-mode ## View: http://lcorneliussen.de/utils/git-svn/view/github.com/lcorneliussen/maven-release/tree/MRELEASE-524-batch-mode ## Based on r983489 in https://svn.apache.org/repos/asf/maven/release/trunk ## ## Included commits: ## - [MRELEASE-524] removed two runtime assertions that overeagerly tried to protect the ReleaseDescriptor (by Lars Corneliussen on 09.08.2010 17:13:35) ## - [MRELEASE-524] Added test cases (by Lars Corneliussen on 09.08.2010 12:05:12) ## - [MRELEASE-524] command line versions don't seem to work on release:branch for specific format\n\no In interactive mode, the user was allways asked. Now he is only asked when the user did not specify versions explicitely. The fallback-suggestions on errors now are 1.0 for release, and 1.1-SNAPSHOT for development version. (by Lars Corneliussen on 05.05.2010 15:13:27) diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java index 3584044..34d9f32 100644 = --- maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java +++ maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java @@ -170,19 +170,28 @@ public class MapVersionsPhase VersionInfo currentVersionInfo = null; VersionInfo releaseVersionInfo = null; + boolean releaseVersionIsExplicit = false; + VersionInfo nextSnapshotVersionInfo = null; + boolean nextSnapshotVersionIsExplicit = false; try { currentVersionInfo = new DefaultVersionInfo( project.getVersion() ); - // The release version defaults to currentVersionInfo.getReleaseVersionString() - releaseVersionInfo = currentVersionInfo; + if (currentVersionInfo != null) { + // The release/branch version defaults to currentVersionInfo (snapshot for branch, and release for tag) + releaseVersionInfo = currentVersionInfo; + } + else { + releaseVersionInfo = new DefaultVersionInfo("1.0"); + } // Check if the user specified a release version if ( releaseDescriptor.getDefaultReleaseVersion() != null ) { releaseVersionInfo = new DefaultVersionInfo( releaseDescriptor.getDefaultReleaseVersion() ); + releaseVersionIsExplicit = true; } if ( releaseDescriptor.getReleaseVersions() != null ) { @@ -190,18 +199,18 @@ public class MapVersionsPhase if ( releaseVersion != null ) { releaseVersionInfo = new DefaultVersionInfo( releaseVersion ); + releaseVersionIsExplicit = true; } } - if ( releaseVersionInfo != null ) - { - nextSnapshotVersionInfo = releaseVersionInfo.getNextVersion(); - } + // The next snapshot version defaults to the next version after the release version + nextSnapshotVersionInfo = releaseVersionInfo.getNextVersion(); // Check if the user specified a new snapshot version if ( releaseDescriptor.getDefaultDevelopmentVersion() != null ) { nextSnapshotVersionInfo = new DefaultVersionInfo( releaseDescriptor.getDefaultDevelopmentVersion() ); + nextSnapshotVersionIsExplicit = true; } if ( releaseDescriptor.getDevelopmentVersions() != null ) { @@ -209,6 +218,7 @@ public class MapVersionsPhase if ( nextDevVersion != null ) { nextSnapshotVersionInfo = new DefaultVersionInfo( nextDevVersion ); + nextSnapshotVersionIsExplicit = true; } } @@ -220,6 +230,20 @@ public class MapVersionsPhase { logWarn( result, msg ); logDebug( result, e.getMessage(), e ); + + // set defaults for resume in interactive mode + if (releaseVersionInfo == null) { + try { + releaseVersionInfo = new DefaultVersionInfo("1.0"); + } catch (VersionParseException e1) { + // if that happens we are in serious trouble! + throw new ReleaseExecutionException( "Version 1.0 could not be parsed!", e1 ); + } + } + + if (nextSnapshotVersionInfo == null) { + nextSnapshotVersionInfo = releaseVersionInfo.getNextVersion(); + } } else { @@ -241,25 +265,13 @@ public class MapVersionsPhase ArtifactUtils.isSnapshot( project.getVersion() ) || releaseDescriptor.isUpdateVersionsToSnapshot() ) ) { - if ( releaseVersionInfo != null ) - { - nextVersion = releaseVersionInfo.getSnapshotVersionString(); - } - - if ( releaseDescriptor.isInteractive() ) + nextVersion = releaseVersionInfo.getSnapshotVersionString(); + if ( !releaseVersionIsExplicit && releaseDescriptor.isInteractive()) { nextVersion = prompter.prompt( "What is the branch version for \"" + project.getName() + "\"? (" + projectId + ")", nextVersion ); } - else - { - Map relVersions = releaseDescriptor.getDevelopmentVersions(); - if ( relVersions.containsKey( projectId ) ) - { - nextVersion = relVersions.remove( projectId ).toString(); - } - } } else { @@ -273,31 +285,12 @@ public class MapVersionsPhase if ( ArtifactUtils.isSnapshot( project.getVersion() ) && releaseDescriptor.isUpdateWorkingCopyVersions() ) { - if ( currentVersionInfo != null ) - { - if ( nextSnapshotVersionInfo != null ) - { - nextVersion = nextSnapshotVersionInfo.getSnapshotVersionString(); - } - else - { - nextVersion = "1.0-SNAPSHOT"; - } - } - - if ( releaseDescriptor.isInteractive() ) + nextVersion = nextSnapshotVersionInfo.getSnapshotVersionString(); + if ( releaseDescriptor.isInteractive() && !nextSnapshotVersionIsExplicit ) { nextVersion = prompter.prompt( "What is the new working copy version for \"" + project.getName() + "\"? (" + projectId + ")", nextVersion ); } - else - { - Map devVersions = releaseDescriptor.getDevelopmentVersions(); - if ( devVersions.containsKey( projectId ) ) - { - nextVersion = devVersions.remove( projectId ).toString(); - } - } } else { @@ -307,56 +300,26 @@ public class MapVersionsPhase } else { - if ( currentVersionInfo != null ) - { - if ( nextSnapshotVersionInfo != null ) - { - nextVersion = nextSnapshotVersionInfo.getSnapshotVersionString(); - } - else - { - nextVersion = "1.0-SNAPSHOT"; - } - } - - if ( releaseDescriptor.isInteractive() ) + nextVersion = nextSnapshotVersionInfo.getSnapshotVersionString(); + if ( releaseDescriptor.isInteractive() && !nextSnapshotVersionIsExplicit) { nextVersion = prompter.prompt( "What is the new development version for \"" + project.getName() + "\"? (" + projectId + ")", nextVersion ); } - else - { - Map devVersions = releaseDescriptor.getDevelopmentVersions(); - if ( devVersions.containsKey( projectId ) ) - { - nextVersion = devVersions.remove( projectId ).toString(); - } - } } } else { if ( ArtifactUtils.isSnapshot( project.getVersion() ) ) { - if ( releaseVersionInfo != null ) - { - nextVersion = releaseVersionInfo.getReleaseVersionString(); - } + nextVersion = releaseVersionInfo.getReleaseVersionString(); - if ( releaseDescriptor.isInteractive() ) + if ( releaseDescriptor.isInteractive() && !releaseVersionIsExplicit) { nextVersion = prompter.prompt( "What is the release version for \"" + project.getName() + "\"? (" + projectId + ")", nextVersion ); } - else - { - Map relVersions = releaseDescriptor.getReleaseVersions(); - if ( relVersions.containsKey( projectId ) ) - { - nextVersion = relVersions.remove( projectId ).toString(); - } - } } else { diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo index a781ace..5f8a1a0 100644 = --- maven-release-manager/src/main/mdo/release-descriptor.mdo +++ maven-release-manager/src/main/mdo/release-descriptor.mdo @@ -484,8 +484,6 @@ { if (releaseVersions == null) { releaseVersions = new java.util.HashMap(); - } else { - assert !releaseVersions.containsKey( projectId ); } releaseVersions.put( projectId, nextVersion ); @@ -501,8 +499,6 @@ { if (developmentVersions == null) { developmentVersions = new java.util.HashMap(); - } else { - assert !developmentVersions.containsKey( projectId ); } developmentVersions.put( projectId, nextVersion ); diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java index e946615..8540fd8 100644 = --- maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java +++ maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java @@ -118,6 +118,42 @@ public class MapVersionsPhaseTest releaseDescriptor.getReleaseVersions() ); } + /** + * MRELEASE-524: ignores commandline versions in batch mode + */ + public void testMapReleaseVersionsNonInteractiveWithExplicitVersion() + throws Exception + { + List reactorProjects = Collections.singletonList( createProject( "artifactId", "SNAPSHOT" ) ); + + MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, "test-map-release-versions" ); + + // execute + ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor.addReleaseVersion( "groupId:artifactId", "2.0" ); + + Mock mockPrompter = new Mock( Prompter.class ); + mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" ); + phase.setPrompter( (Prompter) mockPrompter.proxy() ); + + phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects ); + + assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ), + releaseDescriptor.getReleaseVersions() ); + + // simulate + releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor.addReleaseVersion( "groupId:artifactId", "2.0" ); + + mockPrompter.reset(); + mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" ); + + phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects ); + + assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ), + releaseDescriptor.getReleaseVersions() ); + } + public void testMapReleaseVersionsNonInteractive() throws Exception { @@ -213,6 +249,43 @@ public class MapVersionsPhaseTest releaseDescriptor.getDevelopmentVersions() ); } + /** + * MRELEASE-524: ignores commandline versions in batch mode + */ + public void testMapDevVersionsNonInteractiveWithExplicitVersion() + throws Exception + { + MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, "test-map-development-versions" ); + List reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) ); + + // execute + Mock mockPrompter = new Mock( Prompter.class ); + mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" ); + phase.setPrompter( (Prompter) mockPrompter.proxy() ); + + ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor.setInteractive( false ); + releaseDescriptor.addDevelopmentVersion( "groupId:artifactId", "2-SNAPSHOT" ); + + phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects ); + + assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2-SNAPSHOT" ), + releaseDescriptor.getDevelopmentVersions() ); + + // simulate + mockPrompter.reset(); + mockPrompter.expects( new TestFailureMatcher( "prompter should not be called" ) ).method( "prompt" ); + + releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor.setInteractive( false ); + releaseDescriptor.addDevelopmentVersion( "groupId:artifactId", "2-SNAPSHOT" ); + + phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects ); + + assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2-SNAPSHOT" ), + releaseDescriptor.getDevelopmentVersions() ); + } + public void testPrompterException() throws Exception { @@ -262,7 +335,8 @@ public class MapVersionsPhaseTest MapVersionsPhase phase = (MapVersionsPhase) lookup( ReleasePhase.ROLE, "test-map-development-versions" ); Mock mockPrompter = new Mock( Prompter.class ); - mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).with( new IsAnything(), new IsNull() ).will( + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).with( new IsAnything(), + new IsEqual( "1.1-SNAPSHOT" ) ).will( new ReturnStub( "2.0-SNAPSHOT" ) ); phase.setPrompter( (Prompter) mockPrompter.proxy() ); @@ -276,7 +350,8 @@ public class MapVersionsPhaseTest releaseDescriptor.getDevelopmentVersions() ); mockPrompter.reset(); - mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).with( new IsAnything(), new IsNull() ).will( + mockPrompter.expects( new InvokeOnceMatcher() ).method( "prompt" ).with( new IsAnything(), + new IsEqual( "1.1-SNAPSHOT" ) ).will( new ReturnStub( "2.0-SNAPSHOT" ) ); releaseDescriptor = new ReleaseDescriptor();