diff --git a/src/test/tools/bzlmod/MODULE.bazel.lock b/src/test/tools/bzlmod/MODULE.bazel.lock index 680f705c8fc569..20b3574123e66a 100644 --- a/src/test/tools/bzlmod/MODULE.bazel.lock +++ b/src/test/tools/bzlmod/MODULE.bazel.lock @@ -181,7 +181,7 @@ "moduleExtensions": { "@@pybind11_bazel+//:internal_configure.bzl%internal_configure_extension": { "general": { - "bzlTransitiveDigest": "jLp6l9wb9jlGqTRAfZaf1n+yOu/Lh64vzVRBMg3xiX8=", + "bzlTransitiveDigest": "hEnO+JFMughEBV41KUP5nnAGSjrKGBNIBOgawEIu8E4=", "usagesDigest": "D1r3lfzMuUBFxgG8V6o0bQTLMk3GkaGOaPzw53wrwyw=", "recordedFileInputs": { "@@pybind11_bazel+//MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34" @@ -211,7 +211,7 @@ }, "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { - "bzlTransitiveDigest": "jzbq/qMpM8xW1zVnA2SSSZvRDl5COpD09LbqXgCxvrY=", + "bzlTransitiveDigest": "BYf3iMGgP6Zifb+qCsbW6lNqr/bQ4RVZSR+nuKG2eX0=", "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, diff --git a/tools/build_defs/repo/utils.bzl b/tools/build_defs/repo/utils.bzl index 983b5d238d8eac..2c69142aafa39b 100644 --- a/tools/build_defs/repo/utils.bzl +++ b/tools/build_defs/repo/utils.bzl @@ -71,16 +71,18 @@ def _use_native_patch(patch_args): return True def _download_patch(ctx, patch_url, integrity, auth = None): - name = patch_url.split("/")[-1] + # Prepend a hash to the filename to avoid potential collisions/races. + name = str(hash(patch_url)) + "-" + patch_url.split("/")[-1] patch_path = ctx.path(_REMOTE_PATCH_DIR).get_child(name) - download_info = ctx.download( + token = ctx.download( patch_url, patch_path, canonical_id = ctx.attr.canonical_id, auth = get_auth(ctx, [patch_url]) if auth == None else auth, integrity = integrity, + block = False, ) - return patch_path, download_info + return patch_path, token def download_remote_files(ctx, auth = None): """Utility function for downloading remote files. @@ -214,10 +216,13 @@ def patch(ctx, patches = None, patch_cmds = None, patch_cmds_win = None, patch_t remote_patches_download_info = {} for patch_url in remote_patches: integrity = remote_patches[patch_url] - patchfile, download_info = _download_patch(ctx, patch_url, integrity, auth) - remote_patches_download_info[patch_url] = download_info + remote_patches_download_info[patch_url] = _download_patch(ctx, patch_url, integrity, auth) + + for patch_url, (patchfile, token) in remote_patches_download_info.items(): + remote_patches_download_info[patch_url] = token.wait() ctx.patch(patchfile, remote_patch_strip) ctx.delete(patchfile) + ctx.delete(ctx.path(_REMOTE_PATCH_DIR)) # Apply local patches