diff options
author | Klaus Aehlig <aehlig@google.com> | 2018-03-01 02:24:37 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-01 02:26:02 -0800 |
commit | ccd54bd00e9c63f880a67d35f89ac603c084db71 (patch) | |
tree | eb9a8560226ccdab645b6f200ca7691a877d8813 /tools/build_defs/repo | |
parent | a07419c8ace66ce3926466b1d53982286bb9bdba (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.bzl | 20 | ||||
-rw-r--r-- | tools/build_defs/repo/http.bzl | 20 | ||||
-rw-r--r-- | tools/build_defs/repo/utils.bzl | 16 |
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)) + |