diff options
author | 2017-09-29 21:11:53 +0200 | |
---|---|---|
committer | 2017-10-02 10:31:16 +0200 | |
commit | ae32398146a05ecbe60966b0fe16e409e7b3e3ae (patch) | |
tree | 46cd486fb8277c98cdc11a4f427dc370c58354a7 /src/main/java/com/google/devtools/build/lib/actions/PackageRoots.java | |
parent | 5cc6246d429f7d9119b97ce263b4fd6893222e92 (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.java | 50 |
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); + } +} |