aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/build_defs/repo
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2018-03-01 02:24:37 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-01 02:26:02 -0800
commitccd54bd00e9c63f880a67d35f89ac603c084db71 (patch)
treeeb9a8560226ccdab645b6f200ca7691a877d8813 /tools/build_defs/repo
parenta07419c8ace66ce3926466b1d53982286bb9bdba (diff)
Support patching of git repositories as well
By simply sharing the utility function. In this way, we get feature parity between git_repository and http_archive. Fixes #4676. Change-Id: I99b300e42b2f267d8d04fd965f09c24f3ae54f10 PiperOrigin-RevId: 187450644
Diffstat (limited to 'tools/build_defs/repo')
-rw-r--r--tools/build_defs/repo/git.bzl20
-rw-r--r--tools/build_defs/repo/http.bzl20
-rw-r--r--tools/build_defs/repo/utils.bzl16
3 files changed, 36 insertions, 20 deletions
diff --git a/tools/build_defs/repo/git.bzl b/tools/build_defs/repo/git.bzl
index f146ef69b4..d9cf6604b6 100644
--- a/tools/build_defs/repo/git.bzl
+++ b/tools/build_defs/repo/git.bzl
@@ -13,7 +13,8 @@
# limitations under the License.
"""Rules for cloning external git repositories."""
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "workspace_and_buildfile")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "workspace_and_buildfile", "patch")
+
def _clone_or_update(ctx):
if ((not ctx.attr.tag and not ctx.attr.commit) or
@@ -86,9 +87,11 @@ def _new_git_repository_implementation(ctx):
fail('Exactly one of build_file and build_file_content must be provided.')
_clone_or_update(ctx)
workspace_and_buildfile(ctx)
+ patch(ctx)
def _git_repository_implementation(ctx):
_clone_or_update(ctx)
+ patch(ctx)
_common_attrs = {
@@ -98,7 +101,10 @@ _common_attrs = {
'tag': attr.string(default=''),
'init_submodules': attr.bool(default=False),
'verbose': attr.bool(default=False),
- 'strip_prefix': attr.string(default='')
+ 'strip_prefix': attr.string(default=''),
+ 'patches': attr.label_list(default=[]),
+ 'patch_tool': attr.string(default="patch"),
+ 'patch_cmds': attr.string_list(default=[]),
}
@@ -144,6 +150,11 @@ Args:
remote: The URI of the remote Git repository.
strip_prefix: A directory prefix to strip from the extracted files.
+
+ patches: A list of files that are to be applied as patches after extracting
+ the archive.
+ patch_tool: the patch(1) utility to use.
+ patch_cmds: sequence of commands to be applied after patches are applied.
"""
git_repository = repository_rule(
@@ -174,4 +185,9 @@ Args:
wall-clock time.
strip_prefix: A directory prefix to strip from the extracted files.
+
+ patches: A list of files that are to be applied as patches after extracting
+ the archive.
+ patch_tool: the patch(1) utility to use.
+ patch_cmds: sequence of commands to be applied after patches are applied.
"""
diff --git a/tools/build_defs/repo/http.bzl b/tools/build_defs/repo/http.bzl
index 2247708f2c..e39691477f 100644
--- a/tools/build_defs/repo/http.bzl
+++ b/tools/build_defs/repo/http.bzl
@@ -29,23 +29,7 @@ These rules are improved versions of the native http rules and will eventually
replace the native rules.
"""
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "workspace_and_buildfile")
-
-def _patch(ctx):
- """Implementation of patching an already extracted repository"""
- bash_exe = ctx.os.environ["BAZEL_SH"] if "BAZEL_SH" in ctx.os.environ else "bash"
- for patchfile in ctx.attr.patches:
- command = "{patchtool} -p0 < {patchfile}".format(
- patchtool=ctx.attr.patch_tool,
- patchfile=ctx.path(patchfile))
- st = ctx.execute([bash_exe, "-c", command])
- if st.return_code:
- fail("Error applying patch %s:\n%s" % (str(patchfile), st.stderr))
- for cmd in ctx.attr.patch_cmds:
- st = ctx.execute([bash_exe, "-c", cmd])
- if st.return_code:
- fail("Error applying patch command %s:\n%s%s"
- % (cmd, st.stdout, st.stderr))
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "workspace_and_buildfile", "patch")
def _http_archive_impl(ctx):
"""Implementation of the http_archive rule."""
@@ -74,7 +58,7 @@ def _http_archive_impl(ctx):
ctx.download_and_extract(all_urls, "", ctx.attr.sha256, ctx.attr.type,
ctx.attr.strip_prefix)
- _patch(ctx)
+ patch(ctx)
workspace_and_buildfile(ctx)
_HTTP_FILE_BUILD = """
diff --git a/tools/build_defs/repo/utils.bzl b/tools/build_defs/repo/utils.bzl
index 5f72f6489e..b326a829c2 100644
--- a/tools/build_defs/repo/utils.bzl
+++ b/tools/build_defs/repo/utils.bzl
@@ -50,4 +50,20 @@ def workspace_and_buildfile(ctx):
ctx.execute([bash_exe, "-c", "rm -f BUILD.bazel"])
ctx.file("BUILD", ctx.attr.build_file_content)
+def patch(ctx):
+ """Implementation of patching an already extracted repository"""
+ bash_exe = ctx.os.environ["BAZEL_SH"] if "BAZEL_SH" in ctx.os.environ else "bash"
+ for patchfile in ctx.attr.patches:
+ command = "{patchtool} -p0 < {patchfile}".format(
+ patchtool=ctx.attr.patch_tool,
+ patchfile=ctx.path(patchfile))
+ st = ctx.execute([bash_exe, "-c", command])
+ if st.return_code:
+ fail("Error applying patch %s:\n%s" % (str(patchfile), st.stderr))
+ for cmd in ctx.attr.patch_cmds:
+ st = ctx.execute([bash_exe, "-c", cmd])
+ if st.return_code:
+ fail("Error applying patch command %s:\n%s%s"
+ % (cmd, st.stdout, st.stderr))
+