You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by to...@apache.org on 2012/05/10 02:30:54 UTC
svn commit: r1336459 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: CHANGES.txt
src/main/java/org/apache/hadoop/util/VersionUtil.java
src/test/java/org/apache/hadoop/util/TestVersionUtil.java
Author: todd
Date: Thu May 10 00:30:53 2012
New Revision: 1336459
URL: http://svn.apache.org/viewvc?rev=1336459&view=rev
Log:
HDFS-3341, HADOOP-8340. SNAPSHOT build versions should compare as less than their eventual release. Contributed by Todd Lipcon.
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/VersionUtil.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestVersionUtil.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1336459&r1=1336458&r2=1336459&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Thu May 10 00:30:53 2012
@@ -299,6 +299,9 @@ Release 2.0.0 - UNRELEASED
HADOOP-8356. FileSystem service loading mechanism should print the FileSystem
impl it is failing to load (tucu)
+ HADOOP-8340. SNAPSHOT build versions should compare as less than their eventual
+ final release. (todd)
+
OPTIMIZATIONS
BUG FIXES
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/VersionUtil.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/VersionUtil.java?rev=1336459&r1=1336458&r2=1336459&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/VersionUtil.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/VersionUtil.java Thu May 10 00:30:53 2012
@@ -22,12 +22,21 @@ import java.util.regex.Pattern;
import org.apache.hadoop.classification.InterfaceAudience;
+import com.google.common.collect.ComparisonChain;
+
@InterfaceAudience.Private
public abstract class VersionUtil {
private static final Pattern COMPONENT_GROUPS = Pattern.compile("(\\d+)|(\\D+)");
/**
+ * Suffix added by maven for nightly builds and other snapshot releases.
+ * These releases are considered to precede the non-SNAPSHOT version
+ * with the same version number.
+ */
+ private static final String SNAPSHOT_SUFFIX = "-SNAPSHOT";
+
+ /**
* This function splits the two versions on "." and performs a
* naturally-ordered comparison of the resulting components. For example, the
* version string "0.3" is considered to precede "0.20", despite the fact that
@@ -48,6 +57,11 @@ public abstract class VersionUtil {
* between the two versions, then the version with fewer components is
* considered to precede the version with more components.
*
+ * In addition to the above rules, there is one special case: maven SNAPSHOT
+ * releases are considered to precede a non-SNAPSHOT release with an
+ * otherwise identical version number. For example, 2.0-SNAPSHOT precedes
+ * 2.0.
+ *
* This function returns a negative integer if version1 precedes version2, a
* positive integer if version2 precedes version1, and 0 if and only if the
* two versions' components are identical in value and cardinality.
@@ -61,6 +75,11 @@ public abstract class VersionUtil {
* versions are equal.
*/
public static int compareVersions(String version1, String version2) {
+ boolean isSnapshot1 = version1.endsWith(SNAPSHOT_SUFFIX);
+ boolean isSnapshot2 = version2.endsWith(SNAPSHOT_SUFFIX);
+ version1 = stripSnapshotSuffix(version1);
+ version2 = stripSnapshotSuffix(version2);
+
String[] version1Parts = version1.split("\\.");
String[] version2Parts = version2.split("\\.");
@@ -87,9 +106,21 @@ public abstract class VersionUtil {
return component1.length() - component2.length();
}
}
- return version1Parts.length - version2Parts.length;
+
+ return ComparisonChain.start()
+ .compare(version1Parts.length, version2Parts.length)
+ .compare(isSnapshot2, isSnapshot1)
+ .result();
}
+ private static String stripSnapshotSuffix(String version) {
+ if (version.endsWith(SNAPSHOT_SUFFIX)) {
+ return version.substring(0, version.length() - SNAPSHOT_SUFFIX.length());
+ } else {
+ return version;
+ }
+ }
+
private static boolean isNumeric(String s) {
try {
Integer.parseInt(s);
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestVersionUtil.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestVersionUtil.java?rev=1336459&r1=1336458&r2=1336459&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestVersionUtil.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestVersionUtil.java Thu May 10 00:30:53 2012
@@ -19,7 +19,6 @@ package org.apache.hadoop.util;
import static org.junit.Assert.*;
-import org.apache.hadoop.test.GenericTestUtils;
import org.junit.Test;
public class TestVersionUtil {
@@ -30,6 +29,8 @@ public class TestVersionUtil {
assertEquals(0, VersionUtil.compareVersions("2.0.0", "2.0.0"));
assertEquals(0, VersionUtil.compareVersions("2.0.0a", "2.0.0a"));
assertEquals(0, VersionUtil.compareVersions("1", "1"));
+ assertEquals(0, VersionUtil.compareVersions(
+ "2.0.0-SNAPSHOT", "2.0.0-SNAPSHOT"));
// Assert that lower versions are lower, and higher versions are higher.
assertExpectedValues("1", "2.0.0");
@@ -52,6 +53,13 @@ public class TestVersionUtil {
assertExpectedValues("1.0.0a2", "1.0.0a10");
assertExpectedValues("1.0", "1.a");
assertExpectedValues("1.0", "1.a0");
+
+ // Snapshot builds precede their eventual releases.
+ assertExpectedValues("1.0-SNAPSHOT", "1.0");
+ assertExpectedValues("1.0", "1.0.0-SNAPSHOT");
+ assertExpectedValues("1.0.0-SNAPSHOT", "1.0.0");
+ assertExpectedValues("1.0.0", "1.0.1-SNAPSHOT");
+ assertExpectedValues("1.0.1-SNAPSHOT", "1.0.1");
}
private static void assertExpectedValues(String lower, String higher) {