Skip to content

Commit

Permalink
Support a .bazelignore file
Browse files Browse the repository at this point in the history
Add suport for a file .bazelignore, allowing to specify directories
that should be ignored. So far, even for the "ignored" directories,
the directory structure, including following symlinks, still has
to be well founded. We plan to lift that restriction in the future,
but already with the restriction, it is an improvement over the
status quo.

RELNOTES: bazel now supports a .bazelignore file specifying
  directories to be ignored; however, these directories still
  have to be well founded and, in particular, may not contain
  symlink cycles.

Improves on #4888.

Change-Id: Icfe0b7f5c35eceea16e28944ca7711431b71271a
PiperOrigin-RevId: 208050372
  • Loading branch information
aehlig authored and Copybara-Service committed Aug 9, 2018
1 parent e7fcab3 commit 33afd3c
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,19 @@ private BazelSkyframeExecutorConstants() {
public static final ImmutableSet<PathFragment> HARDCODED_BLACKLISTED_PACKAGE_PREFIXES =
ImmutableSet.of();

/**
* The file .bazelignore can be used to specify directories to be ignored by bazel
*
* <p>This is intended for directories containing non-bazel sources (either generated,
* or versioned sources built by other tools) that happen to contain a file called BUILD.</p>
*
* <p>For the time being, this ignore functionality is limited by the fact that it is
* applied only after pattern expansion. So if a pattern expansion fails (e.g., due to
* symlink-cycles) and therefore fails the build, this ignore functionality currently
* has no chance to kick in.</p>
*/
public static final PathFragment ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE =
PathFragment.EMPTY_FRAGMENT;
PathFragment.create(".bazelignore");

public static final CrossRepositoryLabelViolationStrategy
CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY = CrossRepositoryLabelViolationStrategy.ERROR;
Expand Down
8 changes: 8 additions & 0 deletions src/test/shell/bazel/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,14 @@ sh_test(
tags = ["no_windows"],
)

sh_test(
name = "bazelignore_test",
size = "medium",
srcs = ["bazelignore_test.sh"],
data = [":test-deps"],
tags = ["no_windows"],
)

sh_test(
name = "workspace_resolved_test",
size = "medium",
Expand Down
45 changes: 45 additions & 0 deletions src/test/shell/bazel/bazelignore_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/bin/bash
#
# Copyright 2016 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.
#
# An end-to-end test that Bazel's experimental UI produces reasonable output.

# Load the test setup defined in the parent directory
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CURRENT_DIR}/../integration_test_setup.sh" \
|| { echo "integration_test_setup.sh not found!" >&2; exit 1; }

#### SETUP #############################################################

set -e

test_broken_BUILD_files_ignored() {
rm -rf work && mkdir work && cd work
touch WORKSPACE
mkdir -p ignoreme/deep/reallydep/stillignoreme
echo This is a broken BUILD file > ignoreme/BUILD
echo This is a broken BUILD file > ignoreme/deep/BUILD
echo This is a broken BUILD file > ignoreme/deep/reallydep/BUILD
echo This is a broken BUILD file > ignoreme/deep/reallydep/stillignoreme/BUILD
touch BUILD
bazel build ... && fail "Expected failure" || :

echo; echo
echo ignoreme > .bazelignore
bazel build ... \
|| fail "directory mentioned in .bazelrc not ignored as it should"
}

run_suite "Integration tests for .bazelignore"

0 comments on commit 33afd3c

Please sign in to comment.