From f445ea186018e78ba512ba34e9be9de9d0aa2fda Mon Sep 17 00:00:00 2001 From: Lukacs Berki Date: Thu, 9 Jul 2015 07:16:41 +0000 Subject: Make include() work with remote repositories. This in itself is not very interesting because include() is deprecated, but it paves the way for fetching the appropriate dependencies for the eventual label-based load() statements. -- MOS_MIGRATED_REVID=97849076 --- .../bazel/repository/LocalRepositoryFunction.java | 2 + .../build/lib/skyframe/PackageFunction.java | 57 +++++++++++++++------- .../devtools/build/lib/syntax/BuildFileAST.java | 44 +++++++++++++++++ src/test/shell/bazel/local_repository_test.sh | 29 +++++++++++ 4 files changed, 114 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalRepositoryFunction.java index cd7d6ac489..e79ef39153 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalRepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalRepositoryFunction.java @@ -71,6 +71,8 @@ public class LocalRepositoryFunction extends RepositoryFunction { } FileValue repositoryValue = getRepositoryDirectory(repositoryPath, env); if (repositoryValue == null) { + // TODO(bazel-team): If this returns null, we unnecessarily recreate the symlink above on the + // second execution. return null; } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java index 7dc81e81f4..56fa8df043 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java @@ -232,7 +232,7 @@ public class PackageFunction implements SkyFunction { Set subincludePackageLookupDepKeys = Sets.newHashSet(); for (Label label : pkg.getSubincludeLabels()) { // Declare a dependency on the package lookup for the package giving access to the label. - subincludePackageLookupDepKeys.add(PackageLookupValue.key(label.getPackageFragment())); + subincludePackageLookupDepKeys.add(PackageLookupValue.key(label.getPackageIdentifier())); } Pair, Boolean> subincludePackageLookupResult = getPackageLookupDepsAndPropagateInconsistentFilesystemExceptions( @@ -457,9 +457,27 @@ public class PackageFunction implements SkyFunction { throw new PackageFunctionException(new BuildFileContainsErrorsException( packageId, e.getMessage()), Transience.TRANSIENT); } - SkylarkImportResult importResult = fetchImportsFromBuildFile(buildFilePath, buildFileFragment, - packageId, preludeStatements, inputSource, env); - if (importResult == null) { + + StoredEventHandler eventHandler = new StoredEventHandler(); + BuildFileAST buildFileAST = BuildFileAST.parseBuildFile( + inputSource, preludeStatements, eventHandler, null, true); + + SkylarkImportResult importResult; + boolean includeRepositoriesFetched; + if (eventHandler.hasErrors()) { + // In case of Python preprocessing, errors have already been reported (see checkSyntax). + // In other cases, errors will be reported later. + // TODO(bazel-team): maybe we could get rid of checkSyntax and always report errors here? + importResult = new SkylarkImportResult( + ImmutableMap.of(), ImmutableList.