diff options
author | 2018-01-15 09:35:16 -0800 | |
---|---|---|
committer | 2018-01-15 09:37:25 -0800 | |
commit | 7831d8c9be23d419a64dfbc48e09fa175e1f1536 (patch) | |
tree | b75c59839661db6024ae80a8c1ca5d7bc3dcecb0 /src/test/shell | |
parent | f2075d27ca124156fcd7c01242c552175c0cf145 (diff) |
Support patches in http_archive
Support applying a sequence of patches for external repositories
imported via http_archive. (Note that we only support the version
from @bazel_tools, not the deprecated native rules.)
Works towards #3395.
Change-Id: I96c746acc04790b051eb686856c04a3ff3c90059
PiperOrigin-RevId: 181975322
Diffstat (limited to 'src/test/shell')
-rw-r--r-- | src/test/shell/bazel/BUILD | 7 | ||||
-rwxr-xr-x | src/test/shell/bazel/external_patching_test.sh | 93 |
2 files changed, 100 insertions, 0 deletions
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD index 6c25dfd00b..d39cf7d77d 100644 --- a/src/test/shell/bazel/BUILD +++ b/src/test/shell/bazel/BUILD @@ -241,6 +241,13 @@ sh_test( ) sh_test( + name = "external_patching_test", + size = "medium", + srcs = ["external_patching_test.sh"], + data = [":test-deps"], +) + +sh_test( name = "git_repository_test", size = "large", srcs = ["git_repository_test.sh"], diff --git a/src/test/shell/bazel/external_patching_test.sh b/src/test/shell/bazel/external_patching_test.sh new file mode 100755 index 0000000000..5e44ab23e2 --- /dev/null +++ b/src/test/shell/bazel/external_patching_test.sh @@ -0,0 +1,93 @@ +#!/bin/bash +# +# 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. +# +# Tests the patching functionality of external repositories. + +# 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; } +source "${CURRENT_DIR}/remote_helpers.sh" \ + || { echo "remote_helpers.sh not found!" >&2; exit 1; } + + +set_up() { + # create an archive file with files interesting for patching + mkdir ext-0.1.2 + cat > ext-0.1.2/foo.sh <<'EOF' +#!/usr/bin/env sh + +echo Here be dragons... +EOF + zip ext.zip ext-0.1.2/* + rm -rf ext-0.1.2 +} + + +test_patch_file() { + EXTREPODIR=`pwd` + + # Test that the patches attribute of http_archive is honored + mkdir main + cd main + cat > patch_foo.sh <<'EOF' +--- foo.sh.orig 2018-01-15 10:39:20.183909147 +0100 ++++ foo.sh 2018-01-15 10:43:35.331566052 +0100 +@@ -1,3 +1,3 @@ + #!/usr/bin/env sh + +-echo Here be dragons... ++echo There are dragons... +EOF + cat > WORKSPACE <<EOF +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +http_archive( + name="ext", + strip_prefix="ext-0.1.2", + urls=["file://${EXTREPODIR}/ext.zip"], + build_file_content="exports_files([\"foo.sh\"])", + patches = ["//:patch_foo.sh"], +) +EOF + cat > BUILD <<'EOF' +genrule( + name = "foo", + outs = ["foo.sh"], + srcs = ["@ext//:foo.sh"], + cmd = "cp $< $@; chmod u+x $@", + executable = True, +) +EOF + bazel build :foo.sh + foopath=`bazel info bazel-genfiles`/foo.sh + grep -q 'There are' $foopath || fail "expected patch to be applied" + + # Verify that changes to the patches attribute trigger enough rebuilding + cat > WORKSPACE <<EOF +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +http_archive( + name="ext", + strip_prefix="ext-0.1.2", + urls=["file://${EXTREPODIR}/ext.zip"], + build_file_content="exports_files([\"foo.sh\"])", +) +EOF + bazel build :foo.sh + foopath=`bazel info bazel-genfiles`/foo.sh + grep -q 'Here be' $foopath || fail "expected unpatched file" +} + +run_suite "external patching tests" |