Revert recent change to TargetPattern.SingleTarget. It made a pending unrelated Bazel FR (https://github.com/bazelbuild/bazel/issues/7773) more cumbersome to implement. RELNOTES: None PiperOrigin-RevId: 246007951
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java index 17afd70..be65076 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
@@ -24,6 +24,8 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.devtools.build.lib.cmdline.LabelValidator.BadLabelException; +import com.google.devtools.build.lib.cmdline.LabelValidator.PackageAndTarget; import com.google.devtools.build.lib.util.BatchCallback; import com.google.devtools.build.lib.util.StringUtilities; import com.google.devtools.build.lib.util.ThreadSafeBatchCallback; @@ -281,8 +283,8 @@ throw new IllegalStateException(); } - /** For patterns of type {@link Type#SINGLE_TARGET}, returns the {@link Label} of the target. */ - public Label getSingleTargetLabel() { + /** For patterns of type {@link Type#SINGLE_TARGET}, returns the target path. */ + public String getSingleTargetPath() { throw new IllegalStateException(); } @@ -304,11 +306,14 @@ private static final class SingleTarget extends TargetPattern { - private final Label label; + private final String targetName; + private final PackageIdentifier directory; - private SingleTarget(Label label, String originalPattern, String offset) { + private SingleTarget( + String targetName, PackageIdentifier directory, String originalPattern, String offset) { super(Type.SINGLE_TARGET, originalPattern, offset); - this.label = Preconditions.checkNotNull(label); + this.targetName = Preconditions.checkNotNull(targetName); + this.directory = Preconditions.checkNotNull(directory); } @Override @@ -318,7 +323,7 @@ ImmutableSet<PathFragment> excludedSubdirectories, BatchCallback<T, E> callback, Class<E> exceptionClass) throws TargetParsingException, E, InterruptedException { - callback.process(resolver.getExplicitTarget(label).getTargets()); + callback.process(resolver.getExplicitTarget(label(targetName)).getTargets()); } @Override @@ -328,7 +333,7 @@ @Override public PackageIdentifier getDirectoryForTargetOrTargetsInPackage() { - return label.getPackageIdentifier(); + return directory; } @Override @@ -337,8 +342,8 @@ } @Override - public Label getSingleTargetLabel() { - return label; + public String getSingleTargetPath() { + return targetName; } @Override @@ -350,12 +355,12 @@ return false; } SingleTarget that = (SingleTarget) o; - return label.equals(that.label); + return targetName.equals(that.targetName) && directory.equals(that.directory); } @Override public int hashCode() { - return Objects.hash(getType(), label); + return Objects.hash(getType(), targetName, directory); } } @@ -813,15 +818,18 @@ } if (includesRepo || wasOriginallyAbsolute || pattern.contains(":")) { - String fullLabelString = repository.getName() + "//" + pattern; - Label label; + PackageIdentifier packageIdentifier; + String fullLabel = repository.getName() + "//" + pattern; try { - label = Label.parseAbsolute(fullLabelString, ImmutableMap.of()); - } catch (LabelSyntaxException e) { + PackageAndTarget packageAndTarget = LabelValidator.validateAbsoluteLabel(fullLabel); + packageIdentifier = + PackageIdentifier.create( + repository, PathFragment.create(packageAndTarget.getPackageName())); + } catch (BadLabelException e) { String error = "invalid target format '" + originalPattern + "': " + e.getMessage(); throw new TargetParsingException(error); } - return new SingleTarget(label, originalPattern, relativeDirectory); + return new SingleTarget(fullLabel, packageIdentifier, originalPattern, relativeDirectory); } // This is a stripped-down version of interpretPathAsTarget that does no I/O. We have a basic
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java index 1daa967..1aea611 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
@@ -247,7 +247,15 @@ } } } else if (excludeSingleTargets && laterParsedPattern.getType() == Type.SINGLE_TARGET) { - excludedSingleTargetsBuilder.add(laterParsedPattern.getSingleTargetLabel()); + try { + Label label = + Label.parseAbsolute( + laterParsedPattern.getSingleTargetPath(), + /*repositoryMapping=*/ ImmutableMap.of()); + excludedSingleTargetsBuilder.add(label); + } catch (LabelSyntaxException e) { + indicesOfNegativePatternsThatNeedToBeIncludedBuilder.add(j); + } } else { indicesOfNegativePatternsThatNeedToBeIncludedBuilder.add(j); }