From 5b4b7a3ebb83a8c93d8f68ade7bf1242c8590256 Mon Sep 17 00:00:00 2001 From: John Cater Date: Thu, 12 Oct 2017 16:30:03 +0200 Subject: Fix local repository detection when the repository path is absolute. Fixes #3874. Change-Id: Ibbe3ea27b77426f551e2f70f082478edb2234749 PiperOrigin-RevId: 171957230 --- .../devtools/build/lib/skyframe/PackageLookupFunction.java | 10 ++++++++-- .../devtools/build/lib/skyframe/PackageLookupValue.java | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java index 09fd17d974..3ffcc33b82 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java @@ -231,8 +231,14 @@ public class PackageLookupFunction implements SkyFunction { // There is a repository mismatch, this is an error. // The correct package path is the one originally given, minus the part that is the local // repository. - PathFragment packagePathUnderExecRoot = packageIdentifier.getPathUnderExecRoot(); - PathFragment remainingPath = packagePathUnderExecRoot.relativeTo(localRepository.getPath()); + PathFragment pathToRequestedPackage = packageIdentifier.getPathUnderExecRoot(); + PathFragment localRepositoryPath = localRepository.getPath(); + if (localRepositoryPath.isAbsolute()) { + // We need the package path to also be absolute. + pathToRequestedPackage = + packagePathEntry.asFragment().getRelative(pathToRequestedPackage); + } + PathFragment remainingPath = pathToRequestedPackage.relativeTo(localRepositoryPath); PackageIdentifier correctPackage = PackageIdentifier.create(localRepository.getRepository(), remainingPath); return PackageLookupValue.incorrectRepositoryReference(packageIdentifier, correctPackage); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java index c1f9ba2a9b..3922043d10 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java @@ -283,6 +283,11 @@ public abstract class PackageLookupValue implements SkyValue { public int hashCode() { return errorMsg.hashCode(); } + + @Override + public String toString() { + return String.format("%s: %s", this.getClass().getSimpleName(), this.errorMsg); + } } /** Value indicating the package name was in error. */ @@ -336,6 +341,15 @@ public abstract class PackageLookupValue implements SkyValue { public int hashCode() { return Objects.hashCode(invalidPackageIdentifier, correctedPackageIdentifier); } + + @Override + public String toString() { + return String.format( + "%s: invalidPackageIdenfitier: %s, corrected: %s", + this.getClass().getSimpleName(), + this.invalidPackageIdentifier, + this.correctedPackageIdentifier); + } } /** Marker value for a deleted package. */ -- cgit v1.2.3