aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/config
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-03-28 09:58:15 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-28 09:59:32 -0700
commit56d785217deabcae751a2c9143cb85bec4568e3e (patch)
treed4abaabf2b7eb30c135a90db5fb3f02dde9d150a /src/main/java/com/google/devtools/build/lib/analysis/config
parent235f301f365b2d4502702df9604609252c57d662 (diff)
Put configuration checksum into BuildOptions$OptionsDiffForReconstruction and make it available to ConfiguredTarget. Also give BuildConfigurationValue.Key the same toString() that BuildConfiguration had, so we recover how we used to print out ConfiguredTarget labels in debugging.
This may have a tiny bit of overhead in serialization, but we'll cross that bridge when we come to it. Could just make the string a constant. PiperOrigin-RevId: 190787145
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/config')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java22
2 files changed, 18 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index 26d6132b4f..51cbfbc261 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -55,7 +55,6 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
-import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.util.RegexFilter;
import com.google.devtools.build.lib.vfs.Path;
@@ -1360,7 +1359,7 @@ public class BuildConfiguration {
globalMakeEnvBuilder.put("GENDIR", getGenfilesDirectory().getExecPath().getPathString());
globalMakeEnv = globalMakeEnvBuilder.build();
- checksum = computeChecksum(buildOptions);
+ checksum = buildOptions.computeChecksum();
hashCode = computeHashCode();
ImmutableSet.Builder<String> reservedActionMnemonics = ImmutableSet.builder();
@@ -1371,10 +1370,6 @@ public class BuildConfiguration {
this.buildEventSupplier = Suppliers.memoize(this::createBuildEvent);
}
- public static String computeChecksum(BuildOptions buildOptions) {
- return Fingerprint.md5Digest(buildOptions.computeCacheKey());
- }
-
/**
* Returns a copy of this configuration only including the given fragments (which the current
* configuration is assumed to have).
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
index d84db4ce32..8e7c7675ab 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
@@ -199,6 +199,10 @@ public final class BuildOptions implements Cloneable, Serializable {
return keyBuilder.toString();
}
+ public String computeChecksum() {
+ return Fingerprint.md5Digest(computeCacheKey());
+ }
+
/**
* String representation of build options.
*/
@@ -417,7 +421,7 @@ public final class BuildOptions implements Cloneable, Serializable {
BuildOptions first, BuildOptions second) {
OptionsDiff diff = diff(first, second);
if (diff.areSame()) {
- return OptionsDiffForReconstruction.getEmpty(first.fingerprint);
+ return OptionsDiffForReconstruction.getEmpty(first.fingerprint, second.computeChecksum());
}
HashMap<Class<? extends FragmentOptions>, Map<String, Object>> differingOptions =
new HashMap<>(diff.differingOptions.keySet().size());
@@ -445,7 +449,8 @@ public final class BuildOptions implements Cloneable, Serializable {
differingOptions,
ImmutableSet.copyOf(diff.extraFirstFragments),
ImmutableList.copyOf(diff.extraSecondFragments),
- first.fingerprint);
+ first.fingerprint,
+ second.computeChecksum());
}
/**
@@ -543,22 +548,25 @@ public final class BuildOptions implements Cloneable, Serializable {
private final ImmutableSet<Class<? extends FragmentOptions>> extraFirstFragmentClasses;
private final ImmutableList<FragmentOptions> extraSecondFragments;
private final byte[] baseFingerprint;
+ private final String checksum;
@AutoCodec.VisibleForSerialization
OptionsDiffForReconstruction(
Map<Class<? extends FragmentOptions>, Map<String, Object>> differingOptions,
ImmutableSet<Class<? extends FragmentOptions>> extraFirstFragmentClasses,
ImmutableList<FragmentOptions> extraSecondFragments,
- byte[] baseFingerprint) {
+ byte[] baseFingerprint,
+ String checksum) {
this.differingOptions = differingOptions;
this.extraFirstFragmentClasses = extraFirstFragmentClasses;
this.extraSecondFragments = extraSecondFragments;
this.baseFingerprint = baseFingerprint;
+ this.checksum = checksum;
}
- private static OptionsDiffForReconstruction getEmpty(byte[] baseFingerprint) {
+ private static OptionsDiffForReconstruction getEmpty(byte[] baseFingerprint, String checksum) {
return new OptionsDiffForReconstruction(
- ImmutableMap.of(), ImmutableSet.of(), ImmutableList.of(), baseFingerprint);
+ ImmutableMap.of(), ImmutableSet.of(), ImmutableList.of(), baseFingerprint, checksum);
}
@Nullable
@@ -583,6 +591,10 @@ public final class BuildOptions implements Cloneable, Serializable {
return newOptions;
}
+ public String getChecksum() {
+ return checksum;
+ }
+
private boolean isEmpty() {
return differingOptions.isEmpty()
&& extraFirstFragmentClasses.isEmpty()