From b9f8627289294407ef93efda894ce138f1881a38 Mon Sep 17 00:00:00 2001 From: cushon Date: Mon, 30 Apr 2018 15:44:55 -0700 Subject: Add support for reporting an error if android_test.binary_under_test contains incompatible versions of deps RELNOTES: Add support for reporting an error if android_test.binary_under_test contains incompatible versions of deps PiperOrigin-RevId: 194857840 --- .../build/lib/rules/android/AndroidBinary.java | 3 ++- .../build/lib/rules/android/AndroidCommon.java | 5 +++-- .../build/lib/rules/android/ZipFilterBuilder.java | 26 +++++++++++++++++----- 3 files changed, 26 insertions(+), 8 deletions(-) (limited to 'src/main/java/com/google/devtools/build') diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 69f8452b6f..672130407e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -59,6 +59,7 @@ import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.android.AndroidBinaryMobileInstall.MobileInstallResourceApks; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.MultidexMode; +import com.google.devtools.build.lib.rules.android.ZipFilterBuilder.CheckHashMismatchMode; import com.google.devtools.build.lib.rules.cpp.CppSemantics; import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder; import com.google.devtools.build.lib.rules.java.JavaCommon; @@ -1761,7 +1762,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { Artifact filteredDeployJar = ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_TEST_FILTERED_JAR); AndroidCommon.createZipFilterAction( - ruleContext, deployJar, filterJar, filteredDeployJar, /* checkHashMismatch */ false); + ruleContext, deployJar, filterJar, filteredDeployJar, CheckHashMismatchMode.NONE); return filteredDeployJar; } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java index a89910839d..49dd128c72 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java @@ -43,6 +43,7 @@ import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.TriState; +import com.google.devtools.build.lib.rules.android.ZipFilterBuilder.CheckHashMismatchMode; import com.google.devtools.build.lib.rules.cpp.CcLinkParams; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; @@ -918,13 +919,13 @@ public class AndroidCommon { Artifact in, Artifact filter, Artifact out, - boolean checkHashMismatch) { + CheckHashMismatchMode checkHashMismatch) { new ZipFilterBuilder(ruleContext) .setInputZip(in) .addFilterZips(ImmutableList.of(filter)) .setOutputZip(out) .addFileTypeToFilter(".class") - .setCheckHashMismatch(checkHashMismatch) + .setCheckHashMismatchMode(checkHashMismatch) .addExplicitFilter("R\\.class") .addExplicitFilter("R\\$.*\\.class") // These files are generated by databinding in both the target and the instrumentation app diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ZipFilterBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ZipFilterBuilder.java index 37d57186a2..0368dbf6f9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ZipFilterBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ZipFilterBuilder.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; + import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; @@ -33,6 +34,13 @@ public class ZipFilterBuilder { DONT_CHANGE; } + /** Modes of performing content hash checking during zip filtering. */ + public enum CheckHashMismatchMode { + NONE, + WARN, + ERROR; + } + private final RuleContext ruleContext; private Artifact inputZip; private Artifact outputZip; @@ -40,7 +48,7 @@ public class ZipFilterBuilder { private final ImmutableSet.Builder filterFileTypesBuilder; private final ImmutableSet.Builder explicitFilterBuilder; private Compression outputMode = Compression.DONT_CHANGE; - private boolean checkHashMismatch = true; + private CheckHashMismatchMode checkHashMismatch = CheckHashMismatchMode.WARN; /** Creates a builder using the configuration of the rule as the action configuration. */ public ZipFilterBuilder(RuleContext ruleContext) { @@ -87,8 +95,8 @@ public class ZipFilterBuilder { } /** Enable checking of hash mismatches for files with the same name. */ - public ZipFilterBuilder setCheckHashMismatch(boolean enabled) { - this.checkHashMismatch = enabled; + public ZipFilterBuilder setCheckHashMismatchMode(CheckHashMismatchMode mode) { + this.checkHashMismatch = mode; return this; } @@ -110,8 +118,16 @@ public class ZipFilterBuilder { if (!explicitFilters.isEmpty()) { args.addAll("--explicitFilters", VectorArg.join(",").each(explicitFilters)); } - if (!checkHashMismatch) { - args.add("--checkHashMismatch").add("IGNORE"); + switch (checkHashMismatch) { + case WARN: + args.add("--checkHashMismatch").add("WARN"); + break; + case ERROR: + args.add("--checkHashMismatch").add("ERROR"); + break; + case NONE: + args.add("--checkHashMismatch").add("IGNORE"); + break; } args.add("--outputMode"); switch (outputMode) { -- cgit v1.2.3