Author: bentmann
Date: Thu Apr 8 11:37:42 2010
New Revision: 931890
URL: http://svn.apache.org/viewvc?rev=931890&view=rev
Log:
[MNG-3092] Version ranges with non-snapshot bounds can contain snapshot versions
Submitted by: Mark Hobson
Modified:
maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
Modified:
maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java?rev=931890&r1=931889&r2=931890&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
(original)
+++
maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
Thu Apr 8 11:37:42 2010
@@ -1,6 +1,5 @@
package org.apache.maven.artifact.versioning;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -20,6 +19,8 @@ package org.apache.maven.artifact.versio
* under the License.
*/
+import org.apache.maven.artifact.Artifact;
+
/**
* Describes a restriction in versioning.
*
@@ -71,9 +72,17 @@ public class Restriction
public boolean containsVersion( ArtifactVersion version )
{
+ boolean snapshot = isSnapshot( version );
+
if ( lowerBound != null )
{
int comparison = lowerBound.compareTo( version );
+
+ if ( snapshot && comparison == 0 )
+ {
+ return true;
+ }
+
if ( ( comparison == 0 ) && !lowerBoundInclusive )
{
return false;
@@ -86,6 +95,12 @@ public class Restriction
if ( upperBound != null )
{
int comparison = upperBound.compareTo( version );
+
+ if ( snapshot && comparison == 0 )
+ {
+ return true;
+ }
+
if ( ( comparison == 0 ) && !upperBoundInclusive )
{
return false;
@@ -95,9 +110,20 @@ public class Restriction
return false;
}
}
+
+ if ( lowerBound != null || upperBound != null )
+ {
+ return !snapshot;
+ }
+
return true;
}
+ private boolean isSnapshot( ArtifactVersion version )
+ {
+ return Artifact.SNAPSHOT_VERSION.equals( version.getQualifier() );
+ }
+
@Override
public int hashCode()
{
Modified:
maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java?rev=931890&r1=931889&r2=931890&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
(original)
+++
maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
Thu Apr 8 11:37:42 2010
@@ -56,7 +56,7 @@ public class VersionRangeTest
Artifact artifact = null;
VersionRange range = VersionRange.createFromVersionSpec( "(,1.0]" );
- List restrictions = range.getRestrictions();
+ List<Restriction> restrictions = range.getRestrictions();
assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
Restriction restriction = (Restriction) restrictions.get( 0 );
assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
@@ -148,7 +148,7 @@ public class VersionRangeTest
range = VersionRange.createFromVersionSpec( "[1.0,)" );
assertFalse( range.containsVersion( new DefaultArtifactVersion(
"1.0-SNAPSHOT" ) ) );
- range = VersionRange.createFromVersionSpec( "[1.0,1.1]" );
+ range = VersionRange.createFromVersionSpec( "[1.0,1.1-SNAPSHOT]" );
assertTrue( range.containsVersion( new DefaultArtifactVersion(
"1.1-SNAPSHOT" ) ) );
range = VersionRange.createFromVersionSpec( "[5.0.9.0,5.0.10.0)" );
@@ -182,7 +182,7 @@ public class VersionRangeTest
// TODO: current policy is to retain the original version - is this
correct, do we need strategies or is that handled elsewhere?
// assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1",
mergedRange.getRecommendedVersion().toString() );
assertEquals( CHECK_VERSION_RECOMMENDATION, "1.0",
mergedRange.getRecommendedVersion().toString() );
- List restrictions = mergedRange.getRestrictions();
+ List<Restriction> restrictions = mergedRange.getRestrictions();
assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
Restriction restriction = (Restriction) restrictions.get( 0 );
assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
@@ -655,6 +655,37 @@ public class VersionRangeTest
assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
}
+ public void testReleaseRangeBoundsCannotContainSnapshots()
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange range = VersionRange.createFromVersionSpec( "[1.0,1.2]" );
+
+ assertFalse( range.containsVersion( new DefaultArtifactVersion(
"1.1-SNAPSHOT" ) ) );
+ assertFalse( range.containsVersion( new DefaultArtifactVersion(
"1.2-SNAPSHOT" ) ) );
+ }
+
+ public void testSnapshotRangeBoundsCanContainSnapshots()
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange range = VersionRange.createFromVersionSpec(
"[1.0,1.2-SNAPSHOT]" );
+
+ assertFalse( range.containsVersion( new DefaultArtifactVersion(
"1.1-SNAPSHOT" ) ) );
+ assertTrue( range.containsVersion( new DefaultArtifactVersion(
"1.2-SNAPSHOT" ) ) );
+
+ range = VersionRange.createFromVersionSpec( "[1.0-SNAPSHOT,1.2]" );
+
+ assertTrue( range.containsVersion( new DefaultArtifactVersion(
"1.0-SNAPSHOT" ) ) );
+ assertFalse( range.containsVersion( new DefaultArtifactVersion(
"1.1-SNAPSHOT" ) ) );
+ }
+
+ public void testSnapshotSoftVersionCanContainSnapshot()
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange range = VersionRange.createFromVersionSpec(
"1.0-SNAPSHOT" );
+
+ assertTrue( range.containsVersion( new DefaultArtifactVersion(
"1.0-SNAPSHOT" ) ) );
+ }
+
private void checkInvalidRange( String version )
{
try