Make short IDs directly accessible in BuildConfigurationValue.
PiperOrigin-RevId: 535620649
Change-Id: Ie76bd272012ce4d98c3a7a87d5c00e59e09eeb49
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
index 5b4a92e..dfbb264 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
@@ -775,6 +775,15 @@
return buildOptions.checksum();
}
+ /**
+ * Returns a user-friendly short configuration identifier.
+ *
+ * <p>See {@link BuildOptions#shortId()} for details.
+ */
+ public String shortId() {
+ return buildOptions.shortId();
+ }
+
/** Returns a copy of the build configuration options for this configuration. */
public BuildOptions cloneOptions() {
return buildOptions.clone();
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 490ce6d..cc22221 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
@@ -184,6 +184,19 @@
return checksum;
}
+ /**
+ * Returns a user-friendly configuration identifier as a prefix of <code>fullId</code>.
+ *
+ * <p>This eliminates having to manipulate long full hashes, just like Git short commit hashes.
+ */
+ public String shortId() {
+ // Inherit Git's default commit hash prefix length. It's a principled choice with similar usage
+ // patterns. cquery, which uses this, has access to every configuration in the build. If it
+ // turns out this setting produces ambiguous prefixes, we could always compare configurations
+ // to find the actual minimal unambiguous length.
+ return checksum() == null ? "null" : checksum().substring(0, 7);
+ }
+
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
@@ -193,16 +206,20 @@
.toString();
}
- /** Returns the options contained in this collection. */
+ /** Returns the options contained in this collection, sorted by {@link FragmentOptions} name. */
public ImmutableCollection<FragmentOptions> getNativeOptions() {
return fragmentOptionsMap.values();
}
- /** Returns the set of fragment classes contained in these options. */
+ /**
+ * Returns the set of fragment classes contained in these options, sorted by {@link
+ * FragmentOptions} name.
+ */
public ImmutableSet<Class<? extends FragmentOptions>> getFragmentClasses() {
return fragmentOptionsMap.keySet();
}
+ /** Starlark options, sorted lexicographically by name. */
public ImmutableMap<Label, Object> getStarlarkOptions() {
return starlarkOptionsMap;
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryThreadsafeCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryThreadsafeCallback.java
index e2b3790..af55999 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryThreadsafeCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryThreadsafeCallback.java
@@ -111,30 +111,12 @@
return configCache.computeIfAbsent(
configKey, key -> skyframeExecutor.getConfiguration(eventHandler, key));
}
- /**
- * Returns a user-friendly configuration identifier as a prefix of <code>fullId</code>.
- *
- * <p>This helps users read and manipulate what are otherwise distractingly long strings, in the
- * same spirit as Git short commit hashes.
- */
- protected static String shortId(String fullId) {
- // Inherit Git's default commit hash prefix length. It's a principled choice with similar usage
- // patterns. cquery, which uses this, has access to every configuration in the build. If it
- // turns out this setting produces ambiguous prefixes, we could always compare configurations
- // to find the actual minimal unambiguous length.
- return fullId.substring(0, 7);
- }
/**
- * Returns a user-friendly configuration identifier, using special IDs for null configurations and
- * {@link #shortId(String)} for others.
+ * Returns a user-friendly configuration identifier, using special IDs for null configurations.
*/
protected static String shortId(@Nullable BuildConfigurationValue config) {
- if (config == null) {
- return "null";
- } else {
- return shortId(config.checksum());
- }
+ return config == null ? "null" : config.shortId();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
index 052a147..6e5b12f 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
@@ -124,14 +124,7 @@
.concat("#")
.concat(dep.transitionName())
.concat(" -> ")
- .concat(
- dep.options().stream()
- .map(
- options -> {
- String checksum = options.checksum();
- return shortId(checksum);
- })
- .collect(joining(", "))));
+ .concat(dep.options().stream().map(BuildOptions::shortId).collect(joining(", "))));
if (verbosity == CqueryOptions.Transitions.LITE) {
continue;
}