Skip to content

Commit

Permalink
[MRELEASE-524] command line versions don't seem to work on release:br…
Browse files Browse the repository at this point in the history
…anch for specific format

- 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. 
- removed two runtime assertions that overeagerly tried to protect the ReleaseDescriptor
- Added test cases
Submitted by: Lars Corneliussen

git-svn-id: https://svn.apache.org/repos/asf/maven/release/trunk@1002505 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
brettporter committed Sep 29, 2010
1 parent 1d3b4f8 commit 469967a
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -170,45 +170,50 @@ private String getNextVersion( MavenProject project, String projectId, ReleaseDe

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()
// The release/branch version defaults to currentVersionInfo (snapshot for branch, and release for tag)
releaseVersionInfo = currentVersionInfo;

// Check if the user specified a release version
if ( releaseDescriptor.getDefaultReleaseVersion() != null )
{
releaseVersionInfo = new DefaultVersionInfo( releaseDescriptor.getDefaultReleaseVersion() );
releaseVersionIsExplicit = true;
}
if ( releaseDescriptor.getReleaseVersions() != null )
{
String releaseVersion = ( String ) releaseDescriptor.getReleaseVersions().get( projectId );
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 )
{
String nextDevVersion = ( String ) releaseDescriptor.getDevelopmentVersions().get( projectId );
if ( nextDevVersion != null )
{
nextSnapshotVersionInfo = new DefaultVersionInfo( nextDevVersion );
nextSnapshotVersionIsExplicit = true;
}
}

Expand All @@ -220,6 +225,25 @@ private String getNextVersion( MavenProject project, String projectId, ReleaseDe
{
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
{
Expand All @@ -241,25 +265,13 @@ private String getNextVersion( MavenProject project, String projectId, ReleaseDe
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
{
Expand All @@ -273,31 +285,12 @@ private String getNextVersion( MavenProject project, String projectId, ReleaseDe
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
{
Expand All @@ -307,56 +300,26 @@ private String getNextVersion( MavenProject project, String projectId, ReleaseDe
}
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
{
Expand Down
4 changes: 0 additions & 4 deletions maven-release-manager/src/main/mdo/release-descriptor.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -484,8 +484,6 @@
{
if (releaseVersions == null) {
releaseVersions = new java.util.HashMap();
} else {
assert !releaseVersions.containsKey( projectId );
}
releaseVersions.put( projectId, nextVersion );
Expand All @@ -501,8 +499,6 @@
{
if (developmentVersions == null) {
developmentVersions = new java.util.HashMap();
} else {
assert !developmentVersions.containsKey( projectId );
}
developmentVersions.put( projectId, nextVersion );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,42 @@ public void testMapReleaseVersionsInteractiveWithSnaphotVersion()
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
{
Expand Down Expand Up @@ -213,6 +249,43 @@ public void testMapDevVersionsNonInteractive()
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
{
Expand Down Expand Up @@ -262,7 +335,8 @@ public void testInvalidVersionInteractive()
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() );

Expand All @@ -276,7 +350,8 @@ public void testInvalidVersionInteractive()
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();
Expand Down

0 comments on commit 469967a

Please sign in to comment.