aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/actions/PackageRoots.java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2017-09-29 21:11:53 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-10-02 10:31:16 +0200
commitae32398146a05ecbe60966b0fe16e409e7b3e3ae (patch)
tree46cd486fb8277c98cdc11a4f427dc370c58354a7 /src/main/java/com/google/devtools/build/lib/actions/PackageRoots.java
parent5cc6246d429f7d9119b97ce263b4fd6893222e92 (diff)
Don't symlink into the execroot if possible in SymlinkAction: instead, symlink directly to the target artifact. Also offer the option to not provide the package roots to create the execroot: we would like to avoid the execroot if possible.
PiperOrigin-RevId: 170515263
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions/PackageRoots.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/PackageRoots.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/PackageRoots.java b/src/main/java/com/google/devtools/build/lib/actions/PackageRoots.java
new file mode 100644
index 0000000000..35f7f3fb6d
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/actions/PackageRoots.java
@@ -0,0 +1,50 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.actions;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.vfs.Path;
+import java.util.Optional;
+import javax.annotation.Nullable;
+
+/**
+ * An interface that provides information about package's source roots, that is, the paths on disk
+ * that their BUILD files can be found at. Usually this information is not needed except for when
+ * planting the symlink forest in the exec root, and when resolving source exec paths to artifacts
+ * in an {@link ArtifactResolver}.
+ */
+public interface PackageRoots {
+ /**
+ * Gets a map from {@link PackageIdentifier} to {@link Path}. If present, all known packages for
+ * this build are present in the map. Should only be needed for planting the symlink forest. If it
+ * is absent, planting the symlink forest is not necessary.
+ */
+ Optional<ImmutableMap<PackageIdentifier, Path>> getPackageRootsMap();
+
+ PackageRootLookup getPackageRootLookup();
+
+ /** Interface for getting the source root of a package, given its {@link PackageIdentifier}. */
+ interface PackageRootLookup {
+ /**
+ * Returns the {@link Root} of a package, given its {@link PackageIdentifier}. May be null if
+ * the given {@code packageIdentifier} does not correspond to a package in this build. However,
+ * if there is a unique source root for all packages, this may return that root even if the
+ * {@code packageIdentifier} given does not correspond to any packages.
+ */
+ @Nullable
+ Root getRootForPackage(PackageIdentifier packageIdentifier);
+ }
+}