aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar Marian Lobur <loburm@google.com>2015-02-11 08:49:36 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-02-11 08:49:36 +0000
commit4e0f8560d754f021f784b3e48acb18a4ec99fd97 (patch)
tree09d928dc7668b118b70787b78309cf66427f1b23 /src/main/java/com/google/devtools/build/lib/rules/cpp
parentcdc90e9279fdd127720cb0bf8548ce3e1b4f6042 (diff)
Replace some calls to ArtifactFactory.resolveSourceArtifact(PathFragment execPath), with a skyframe native implementation ArtifactFactory.resolveSourceArtifact(Iterable<PathFragment> execPaths, PackageRootResolver resolver).
-- MOS_MIGRATED_REVID=86062289
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 550eecb48d..4d145826f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.actions.Artifact.MiddlemanExpander;
import com.google.devtools.build.lib.actions.ArtifactResolver;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.actions.Executor;
+import com.google.devtools.build.lib.actions.PackageRootResolver;
import com.google.devtools.build.lib.actions.ResourceSet;
import com.google.devtools.build.lib.actions.extra.CppCompileInfo;
import com.google.devtools.build.lib.actions.extra.ExtraActionInfo;
@@ -827,21 +828,34 @@ public class CppCompileAction extends AbstractAction implements IncludeScannable
}
@Override
- public void updateInputsFromCache(
- ArtifactResolver artifactResolver, Collection<PathFragment> inputPaths) {
+ public boolean updateInputsFromCache(
+ ArtifactResolver artifactResolver, PackageRootResolver resolver,
+ Collection<PathFragment> inputPaths) {
// Note that this method may trigger a violation of the desirable invariant that getInputs()
// is a superset of getMandatoryInputs(). See bug about an "action not in canonical form"
// error message and the integration test test_crosstool_change_and_failure().
-
Map<PathFragment, Artifact> allowedDerivedInputsMap = getAllowedDerivedInputsMap();
List<Artifact> inputs = new ArrayList<>();
+ List<PathFragment> unresolvedPaths = new ArrayList<>();
for (PathFragment execPath : inputPaths) {
- // The artifact may be a derived artifact, and if it has been created already, then we still
- // want to keep it to preserve incrementality.
Artifact artifact = allowedDerivedInputsMap.get(execPath);
- if (artifact == null) {
- artifact = artifactResolver.resolveSourceArtifact(execPath);
+ if (artifact != null) {
+ inputs.add(artifact);
+ } else {
+ // Remember this execPath, we will try to resolve it as a source artifact.
+ unresolvedPaths.add(execPath);
}
+ }
+
+ Map<PathFragment, Artifact> resolvedArtifacts =
+ artifactResolver.resolveSourceArtifacts(unresolvedPaths, resolver);
+ if (resolvedArtifacts == null) {
+ // We are missing some dependencies. We need to rerun this update later.
+ return false;
+ }
+
+ for (PathFragment execPath : unresolvedPaths) {
+ Artifact artifact = resolvedArtifacts.get(execPath);
// If PathFragment cannot be resolved into the artifact - ignore it. This could happen if
// rule definition has changed and action no longer depends on, e.g., additional source file
// in the separate package and that package is no longer referenced anywhere else.
@@ -855,6 +869,7 @@ public class CppCompileAction extends AbstractAction implements IncludeScannable
synchronized (this) {
setInputs(inputs);
}
+ return true;
}
private Map<PathFragment, Artifact> getAllowedDerivedInputsMap() {