aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2017-11-29 11:22:41 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-29 11:24:16 -0800
commit00bece2ac9d458f1afba8f9932a65eceb8df55d8 (patch)
tree4a7acad6b8d09d2a7505f32f8c1ee514508a7c05
parent17810adb392c3e38c5021cee14c5160fdaf2adef (diff)
Improve error messaging for invalid values of the --xcode_version flag.
RELNOTES: None. PiperOrigin-RevId: 177337384
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java16
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java9
2 files changed, 21 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
index 1b6e998d3c..abb00c0a21 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
@@ -14,11 +14,14 @@
package com.google.devtools.build.lib.rules.apple;
+import static java.util.stream.Collectors.joining;
+
import com.google.common.base.Joiner;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
+import com.google.common.collect.Streams;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory;
@@ -173,14 +176,23 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
if (explicitVersion != null) {
return explicitVersion;
} else {
- throw new XcodeConfigException(
- String.format("%s matches no alias in the config", versionOverrideFlag));
+ throw new XcodeConfigException(String.format(
+ "--xcode_version=%s specified, but '%s' is not an available Xcode version. "
+ + "available versions: [%s]",
+ versionOverrideFlag, versionOverrideFlag,
+ printableXcodeVersions(xcodeVersionRules)));
}
}
return defaultVersion;
}
+ private static String printableXcodeVersions(Iterable<XcodeVersionRuleData> xcodeVersions) {
+ return Streams.stream(xcodeVersions)
+ .map(versionData -> versionData.getVersion().toString())
+ .collect(joining(", "));
+ }
+
/**
* Returns a map where keys are "names" of xcode versions as defined by the configuration target,
* and values are the rule data objects which contain information regarding that xcode version.
diff --git a/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java b/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java
index 93c1dabfc5..e2c21f7658 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java
@@ -286,7 +286,7 @@ public class XcodeConfigTest extends BuildViewTestCase {
"xcode_config(",
" name = 'foo',",
" require_defined_version = 1,",
- " versions = [':version512'],",
+ " versions = [':version512', ':version84'],",
" default = ':version512',",
")",
"",
@@ -294,11 +294,16 @@ public class XcodeConfigTest extends BuildViewTestCase {
" name = 'version512',",
" version = '5.1.2',",
" aliases = ['5', '5.1'],",
+ ")",
+ "xcode_version(",
+ " name = 'version84',",
+ " version = '8.4',",
")");
useConfiguration("--xcode_version=6");
reporter.removeHandler(failFastHandler);
getConfiguredTarget("//xcode:foo");
- assertContainsEvent("6 matches no alias in the config");
+ assertContainsEvent("--xcode_version=6 specified, but '6' is not an available Xcode version. "
+ + "available versions: [5.1.2, 8.4]");
}
@Test