diff options
author | 2017-11-29 11:22:41 -0800 | |
---|---|---|
committer | 2017-11-29 11:24:16 -0800 | |
commit | 00bece2ac9d458f1afba8f9932a65eceb8df55d8 (patch) | |
tree | 4a7acad6b8d09d2a7505f32f8c1ee514508a7c05 /src | |
parent | 17810adb392c3e38c5021cee14c5160fdaf2adef (diff) |
Improve error messaging for invalid values of the --xcode_version flag.
RELNOTES: None.
PiperOrigin-RevId: 177337384
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java | 16 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java | 9 |
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 |