Improved the regular expression to match the version number we want to get
Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/commit/fb8c7f1c Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/tree/fb8c7f1c Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/diff/fb8c7f1c Branch: refs/heads/253-parseversion Commit: fb8c7f1c38bc11cd7c758f5042244320ea9e60e1 Parents: 5565365 Author: Ignasi Barrera <[email protected]> Authored: Thu Sep 12 21:54:01 2013 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Thu Sep 12 21:54:01 2013 +0200 ---------------------------------------------------------------------- .../jclouds/chef/suppliers/ChefVersionSupplier.java | 13 ++++++------- .../chef/suppliers/ChefVersionSupplierTest.java | 2 ++ 2 files changed, 8 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/blob/fb8c7f1c/core/src/main/java/org/jclouds/chef/suppliers/ChefVersionSupplier.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/jclouds/chef/suppliers/ChefVersionSupplier.java b/core/src/main/java/org/jclouds/chef/suppliers/ChefVersionSupplier.java index 8d9e627..a08fc40 100644 --- a/core/src/main/java/org/jclouds/chef/suppliers/ChefVersionSupplier.java +++ b/core/src/main/java/org/jclouds/chef/suppliers/ChefVersionSupplier.java @@ -16,6 +16,7 @@ */ package org.jclouds.chef.suppliers; +import static com.google.common.base.Objects.firstNonNull; import static com.google.common.base.Preconditions.checkNotNull; import java.util.regex.Matcher; @@ -57,7 +58,10 @@ public class ChefVersionSupplier implements Supplier<Integer> { @Override public Integer get() { - Pattern versionPattern = Pattern.compile("(\\d+)\\.(\\d+)(\\.\\d+)*"); + // Old versions of Chef have versions like 0.9.x, 0.10.x, but newer + // versions are in the format 10.x.y, 11.x.y + Pattern versionPattern = Pattern.compile("(?:0\\.(\\d+)|(\\d+)\\.\\d+)(?:\\.\\d)*"); + Matcher m = versionPattern.matcher(apiVersion); if (!m.matches()) { logger.warn("Configured version does not match the standard version pattern. Assuming version %s", @@ -65,12 +69,7 @@ public class ChefVersionSupplier implements Supplier<Integer> { return DEFAULT_VERSION; } - int major = Integer.parseInt(m.group(1)); - int minor = Integer.parseInt(m.group(2)); - - // Old versions of Chef have versions like 0.9.x, 0.10.x, but newer versions - // are in the format 10.x.y, 11.x.y - return major == 0? minor : major; + return Integer.valueOf(firstNonNull(m.group(1), m.group(2))); } } http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/blob/fb8c7f1c/core/src/test/java/org/jclouds/chef/suppliers/ChefVersionSupplierTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/jclouds/chef/suppliers/ChefVersionSupplierTest.java b/core/src/test/java/org/jclouds/chef/suppliers/ChefVersionSupplierTest.java index d5efd90..7bde5ac 100644 --- a/core/src/test/java/org/jclouds/chef/suppliers/ChefVersionSupplierTest.java +++ b/core/src/test/java/org/jclouds/chef/suppliers/ChefVersionSupplierTest.java @@ -31,6 +31,8 @@ public class ChefVersionSupplierTest { public void testReturnsDefaultVersion() { assertEquals(new ChefVersionSupplier("15").get(), DEFAULT_VERSION); + assertEquals(new ChefVersionSupplier("0").get(), DEFAULT_VERSION); + assertEquals(new ChefVersionSupplier("0.").get(), DEFAULT_VERSION); } public void testReturnsMajorVersionIfNotZero() {
