From a47bb02a0e000f381f6687834800d01594ee05ee Mon Sep 17 00:00:00 2001 From: Derek Cormier Date: Thu, 5 Oct 2023 12:42:02 -0700 Subject: [PATCH] chore: remove legacy copy_to_directory_action --- docs/copy_to_directory.md | 44 -- lib/copy_to_directory.bzl | 2 - lib/private/copy_to_directory.bzl | 464 ------------------ lib/tests/copy_to_directory_action/1 | 1 - lib/tests/copy_to_directory_action/2 | 1 - .../copy_to_directory_action/BUILD.bazel | 51 -- lib/tests/copy_to_directory_action/lib.bzl | 22 - .../copy_to_directory_action/other_info.bzl | 8 - lib/tests/copy_to_directory_action/pkg.bzl | 38 -- 9 files changed, 631 deletions(-) delete mode 100644 lib/tests/copy_to_directory_action/1 delete mode 100644 lib/tests/copy_to_directory_action/2 delete mode 100644 lib/tests/copy_to_directory_action/BUILD.bazel delete mode 100644 lib/tests/copy_to_directory_action/lib.bzl delete mode 100644 lib/tests/copy_to_directory_action/other_info.bzl delete mode 100644 lib/tests/copy_to_directory_action/pkg.bzl diff --git a/docs/copy_to_directory.md b/docs/copy_to_directory.md index 36eff7957..141e7bc3d 100644 --- a/docs/copy_to_directory.md +++ b/docs/copy_to_directory.md @@ -67,50 +67,6 @@ for more information on supported globbing patterns. | verbose | If true, prints out verbose logs to stdout | Boolean | optional | False | - - -## copy_to_directory_action - -
-copy_to_directory_action(ctx, srcs, dst, additional_files, root_paths,
-                         include_external_repositories, include_srcs_packages, exclude_srcs_packages,
-                         include_srcs_patterns, exclude_srcs_patterns, exclude_prefixes,
-                         replace_prefixes, allow_overwrites, is_windows)
-
- -Legacy factory function to copy files to a directory. - -This helper calculates copy paths in Starlark during analysis and performs the copies in a -bash/bat script. For improved analysis and runtime performance, it is recommended the switch -to `copy_to_directory_bin_action` which calculates copy paths and performs copies with a tool -binary, typically the `@aspect_bazel_lib//tools/copy_to_directory` `go_binary` either built -from source or provided by a toolchain. - -This helper is used by copy_to_directory. It is exposed as a public API so it can be used within -other rule implementations where additional_files can also be passed in. - - -**PARAMETERS** - - -| Name | Description | Default Value | -| :------------- | :------------- | :------------- | -| ctx | The rule context. | none | -| srcs | Files and/or directories or targets that provide DirectoryPathInfo to copy into the output directory. | none | -| dst | The directory to copy to. Must be a TreeArtifact. | none | -| additional_files | List or depset of additional files to copy that are not in the DefaultInfo or DirectoryPathInfo of srcs | [] | -| root_paths | List of paths that are roots in the output directory.

See copy_to_directory rule documentation for more details. | ["."] | -| include_external_repositories | List of external repository names to include in the output directory.

See copy_to_directory rule documentation for more details. | [] | -| include_srcs_packages | List of Bazel packages to include in output directory.

See copy_to_directory rule documentation for more details. | ["**"] | -| exclude_srcs_packages | List of Bazel packages (with glob support) to exclude from output directory.

See copy_to_directory rule documentation for more details. | [] | -| include_srcs_patterns | List of paths (with glob support) to include in output directory.

See copy_to_directory rule documentation for more details. | ["**"] | -| exclude_srcs_patterns | List of paths (with glob support) to exclude from output directory.

See copy_to_directory rule documentation for more details. | [] | -| exclude_prefixes | List of path prefixes to exclude from output directory.

See copy_to_directory rule documentation for more details. | [] | -| replace_prefixes | Map of paths prefixes to replace in the output directory path when copying files.

See copy_to_directory rule documentation for more details. | {} | -| allow_overwrites | If True, allow files to be overwritten if the same output file is copied to twice.

See copy_to_directory rule documentation for more details. | False | -| is_windows | Deprecated and unused | None | - - ## copy_to_directory_bin_action diff --git a/lib/copy_to_directory.bzl b/lib/copy_to_directory.bzl index 4afaf2d05..ef73f6d2b 100644 --- a/lib/copy_to_directory.bzl +++ b/lib/copy_to_directory.bzl @@ -3,14 +3,12 @@ load( "//lib/private:copy_to_directory.bzl", - _copy_to_directory_action = "copy_to_directory_action", _copy_to_directory_bin_action = "copy_to_directory_bin_action", _copy_to_directory_lib = "copy_to_directory_lib", ) # export the starlark library as a public API copy_to_directory_lib = _copy_to_directory_lib -copy_to_directory_action = _copy_to_directory_action copy_to_directory_bin_action = _copy_to_directory_bin_action copy_to_directory = rule( diff --git a/lib/private/copy_to_directory.bzl b/lib/private/copy_to_directory.bzl index 3bc020602..f0a7c49ad 100644 --- a/lib/private/copy_to_directory.bzl +++ b/lib/private/copy_to_directory.bzl @@ -1,11 +1,8 @@ "copy_to_directory implementation" -load("@bazel_skylib//lib:paths.bzl", skylib_paths = "paths") load(":copy_common.bzl", _COPY_EXECUTION_REQUIREMENTS = "COPY_EXECUTION_REQUIREMENTS", _progress_path = "progress_path") load(":directory_path.bzl", "DirectoryPathInfo") -load(":glob_match.bzl", "glob_match", "is_glob") load(":paths.bzl", "paths") -load(":platform_utils.bzl", _platform_utils = "platform_utils") _filter_transforms_order_docstring = """Filters and transformations are applied in the following order: @@ -286,311 +283,6 @@ _copy_to_directory_attr = { # ), } -def _any_globs_match(exprs, path): - # Exit quick in the common case of having a "**". - if "**" in exprs: - return True - - # Special case: support non-standard empty glob expr. - # Only an empty expression matches an empty path. - if path == "": - return "" in exprs - - for expr in exprs: - if expr != "" and glob_match(expr, path): - return True - return None - -def _longest_glob_match(expr, path): - if not is_glob(expr): - return expr if path.startswith(expr) else None - - for i in range(len(path)): - maybe_match = path[:-i] if i > 0 else path - if glob_match(expr, maybe_match): - # Some subpath matches - return maybe_match - return None - -def _longest_globs_match(exprs, path): - matching_expr = None - longest_match = None - longest_match_len = 0 - for expr in exprs: - match = _longest_glob_match(expr, path) - if match: - match_len = len(match) - if match_len > longest_match_len: - matching_expr = expr - longest_match = match - longest_match_len = match_len - return matching_expr, longest_match - -# src can either be a File or a target with a DirectoryPathInfo -def _copy_paths( - src, - root_paths, - include_external_repositories, - include_srcs_packages, - exclude_srcs_packages, - include_srcs_patterns, - exclude_srcs_patterns, - replace_prefixes): - output_path_is_directory = False - if type(src) == "File": - src_file = src - src_path = src_file.path - output_path = paths.to_workspace_path(src_file) - output_path_is_directory = src_file.is_directory - elif DirectoryPathInfo in src: - src_file = src[DirectoryPathInfo].directory - src_path = "/".join([src_file.path, src[DirectoryPathInfo].path]) - output_path = "/".join([paths.to_workspace_path(src_file), src[DirectoryPathInfo].path]) - else: - fail("Unsupported type") - - if not src_file.owner: - msg = "Expected an owner target label for file {} but found none".format(src_file) - fail(msg) - - if src_file.owner.package == None: - msg = "Expected owner target label for file {} to have a package name but found None".format(src_file) - fail(msg) - - if not include_srcs_packages: - fail("An empty 'include_srcs_packages' list will exclude all srcs and result in an empty directory") - - if "**" in exclude_srcs_packages: - fail("A '**' glob pattern in 'exclude_srcs_packages' will exclude all srcs and result in an empty directory") - - if not include_srcs_patterns: - fail("An empty 'include_srcs_patterns' list will exclude all srcs and result in an empty directory") - - if "**" in exclude_srcs_patterns: - fail("A '**' glob pattern in 'exclude_srcs_patterns' will exclude all srcs and result in an empty directory") - - # Apply filters and transformations in the following order: - # - # - `include_external_repositories` - # - `include_srcs_packages` - # - `exclude_srcs_packages` - # - `root_paths` - # - `include_srcs_patterns` - # - `exclude_srcs_patterns` - # - `replace_prefixes` - # - # If you change this order please update the docstrings to reflect the changes. - - # apply include_external_repositories if the file is from an external repository - if src_file.owner.workspace_name: - if not _any_globs_match(include_external_repositories, src_file.owner.workspace_name): - # file is excluded as its external repository does not match any patterns in include_external_repositories - return None, None, None - - # apply include_srcs_packages - if not _any_globs_match(include_srcs_packages, src_file.owner.package): - # file is excluded as it does not match any specified include_srcs_packages - return None, None, None - - # apply exclude_srcs_packages - if _any_globs_match(exclude_srcs_packages, src_file.owner.package): - # file is excluded due to a matching exclude_srcs_packages - return None, None, None - - # apply root_paths - if root_paths: - globstar_suffix = False - for root_path in root_paths: - if root_path.endswith("**"): - globstar_suffix = True - break - if not output_path_is_directory and globstar_suffix: - # match against the output_path dirname and not the full output path - # so we don't match against the filename on an ending '**' glob pattern - output_root = skylib_paths.dirname(output_path) - else: - output_root = output_path - _, longest_match = _longest_globs_match(root_paths, output_root) - if longest_match: - if longest_match.endswith("/"): - longest_match = longest_match[:-1] - if len(longest_match) == len(output_root) or output_root[len(longest_match)] == "/": - output_path = output_path[len(longest_match) + 1:] - - # apply include_srcs_patterns if "**" is not included in the list - if not _any_globs_match(include_srcs_patterns, output_path): - # file is excluded as it does not match any specified include_srcs_patterns - return None, None, None - - # apply exclude_srcs_patterns - if _any_globs_match(exclude_srcs_patterns, output_path): - # file is excluded due to a matching exclude_srcs_patterns - return None, None, None - - # apply replace_prefixes - if replace_prefixes: - for replace_prefix in replace_prefixes.keys(): - if replace_prefix.endswith("**"): - msg = "replace_prefix '{}' must not end with '**' glob expression".format(replace_prefix) - fail(msg) - matching_expr, longest_match = _longest_globs_match(replace_prefixes.keys(), output_path) - if longest_match: - # replace the longest matching prefix in the output path - output_path = replace_prefixes[matching_expr] + output_path[len(longest_match):] - - return skylib_paths.normalize(src_path), skylib_paths.normalize(output_path), src_file - -def _merge_into_copy_path(copy_paths, src_path, dst_path, src_file): - for i, s in enumerate(copy_paths): - _, maybe_dst_path, maybe_src_file = s - if dst_path == maybe_dst_path: - if src_file == maybe_src_file: - return True - if src_file.short_path == maybe_src_file.short_path: - if maybe_src_file.is_source and not src_file.is_source: - # If the files are the at the same path but one in the source tree and one in - # the output tree, always copy the output tree file. This is also the default - # Bazel behavior for layout out runfiles if there are files that have the same - # path in the source tree and the output tree. This can happen, for example, if - # the source file and a generated file that is a copy to the source file are - # both added to the package which can happen, for example, through 'additional_files' - # in 'copy_to_directory_action'. - copy_paths[i] = (src_path, dst_path, src_file) - return True - return False - -def _copy_to_dir_bash(ctx, copy_paths, dst_dir, allow_overwrites): - cmds = [ - "set -o errexit -o nounset -o pipefail", - "OUT_CAPTURE=$(mktemp)", - """_exit() { - EXIT_CODE=$?; - if [ "$EXIT_CODE" != 0 ]; then - cat "$OUT_CAPTURE" - fi - exit $EXIT_CODE -}""", - "trap _exit EXIT", - "mkdir -p \"%s\"" % dst_dir.path, - ] - - inputs = [] - - for src_path, dst_path, src_file in copy_paths: - inputs.append(src_file) - - maybe_force = "-f " if allow_overwrites else "-n " - maybe_chmod_file = """if [ -e "{dst}" ]; then - chmod a+w "{dst}" -fi -""" if allow_overwrites else "" - maybe_chmod_dir = """if [ -e "{dst}" ]; then - chmod -R a+w "{dst}" -fi -""" if allow_overwrites else "" - - cmds.append(""" -if [[ ! -e "{src}" ]]; then echo "file '{src}' does not exist"; exit 1; fi -if [[ -f "{src}" ]]; then - mkdir -p "{dst_dir}" - {maybe_chmod_file}cp -v {maybe_force}"{src}" "{dst}" >> "$OUT_CAPTURE" 2>>"$OUT_CAPTURE" -else - if [[ -d "{dst}" ]]; then - # When running outside the sandbox, then an earlier copy will create the dst folder - # with nested read-only folders, so our copy operation will fail to write there. - # Make sure the output folders are writeable. - find "{dst}" -type d -print0 | xargs -0 chmod a+w - fi - mkdir -p "{dst}" - {maybe_chmod_dir}cp -v -R {maybe_force}"{src}/." "{dst}" >> "$OUT_CAPTURE" 2>>"$OUT_CAPTURE" -fi -""".format( - src = src_path, - dst_dir = skylib_paths.dirname(dst_path), - dst = dst_path, - maybe_force = maybe_force, - maybe_chmod_file = maybe_chmod_file, - maybe_chmod_dir = maybe_chmod_dir, - )) - - ctx.actions.run_shell( - inputs = inputs, - outputs = [dst_dir], - command = "\n".join(cmds), - mnemonic = "CopyToDirectory", - progress_message = "Copying files to directory %s" % _progress_path(dst_dir), - use_default_shell_env = True, - execution_requirements = _COPY_EXECUTION_REQUIREMENTS, - ) - -def _copy_to_dir_cmd(ctx, copy_paths, dst_dir): - # Most Windows binaries built with MSVC use a certain argument quoting - # scheme. Bazel uses that scheme too to quote arguments. However, - # cmd.exe uses different semantics, so Bazel's quoting is wrong here. - # To fix that we write the command to a .bat file so no command line - # quoting or escaping is required. - # Based on skylib copy_file: - # https://github.com/bazelbuild/bazel-skylib/blob/main/rules/private/copy_file_private.bzl#L28. - bat = ctx.actions.declare_file(ctx.label.name + "-cmd.bat") - - # NB: mkdir will create all subdirectories; it will exit 1 - # print an error to stderr if the directory already exists so - # we supress both its stdout & stderr output - cmds = [""" -@rem @generated by @aspect_bazel_lib//lib/private:copy_to_directory.bzl -@echo off -mkdir "%s" >NUL 2>NUL -""" % dst_dir.path.replace("/", "\\")] - - inputs = [] - - for src_path, dst_path, src_file in copy_paths: - inputs.append(src_file) - - # copy & xcopy flags are documented at - # https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/copy - # https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy - cmds.append(""" -if not exist "{src}" ( - echo file "{src}" does not exist - exit /b 1 -) -if exist "{src}\\*" ( - mkdir "{dst}" >NUL 2>NUL - robocopy "{src}" "{dst}" /E >NUL -) else ( - mkdir "{dst_dir}" >NUL 2>NUL - copy /Y "{src}" "{dst}" >NUL -) -""".format( - src = src_path.replace("/", "\\"), - dst_dir = skylib_paths.dirname(dst_path).replace("/", "\\"), - dst = dst_path.replace("/", "\\"), - )) - - # robocopy return non-zero exit codes on success so we must exit 0 when we are done - cmds.append("exit 0") - - ctx.actions.write( - output = bat, - # Do not use lib/shell.bzl's shell.quote() method, because that uses - # Bash quoting syntax, which is different from cmd.exe's syntax. - content = "\n".join(cmds), - is_executable = True, - ) - - ctx.actions.run( - inputs = inputs, - tools = [bat], - outputs = [dst_dir], - executable = "cmd.exe", - arguments = ["/C", bat.path.replace("/", "\\")], - mnemonic = "CopyToDirectory", - progress_message = "Copying files to directory %s" % _progress_path(dst_dir), - use_default_shell_env = True, - execution_requirements = _COPY_EXECUTION_REQUIREMENTS, - ) - def _copy_to_directory_impl(ctx): copy_to_directory_bin = ctx.toolchains["@aspect_bazel_lib//lib:copy_to_directory_toolchain_type"].copy_to_directory_info.bin @@ -842,162 +534,6 @@ def copy_to_directory_bin_action( execution_requirements = _COPY_EXECUTION_REQUIREMENTS, ) -# TODO(2.0): remove the legacy copy_to_directory_action helper -def copy_to_directory_action( - ctx, - srcs, - dst, - additional_files = [], - root_paths = ["."], - include_external_repositories = [], - include_srcs_packages = ["**"], - exclude_srcs_packages = [], - include_srcs_patterns = ["**"], - exclude_srcs_patterns = [], - exclude_prefixes = [], - replace_prefixes = {}, - allow_overwrites = False, - is_windows = None): - """Legacy factory function to copy files to a directory. - - This helper calculates copy paths in Starlark during analysis and performs the copies in a - bash/bat script. For improved analysis and runtime performance, it is recommended the switch - to `copy_to_directory_bin_action` which calculates copy paths and performs copies with a tool - binary, typically the `@aspect_bazel_lib//tools/copy_to_directory` `go_binary` either built - from source or provided by a toolchain. - - This helper is used by copy_to_directory. It is exposed as a public API so it can be used within - other rule implementations where additional_files can also be passed in. - - Args: - ctx: The rule context. - - srcs: Files and/or directories or targets that provide `DirectoryPathInfo` to copy into the output directory. - - dst: The directory to copy to. Must be a TreeArtifact. - - additional_files: List or depset of additional files to copy that are not in the `DefaultInfo` or `DirectoryPathInfo` of srcs - - root_paths: List of paths that are roots in the output directory. - - See copy_to_directory rule documentation for more details. - - include_external_repositories: List of external repository names to include in the output directory. - - See copy_to_directory rule documentation for more details. - - include_srcs_packages: List of Bazel packages to include in output directory. - - See copy_to_directory rule documentation for more details. - - exclude_srcs_packages: List of Bazel packages (with glob support) to exclude from output directory. - - See copy_to_directory rule documentation for more details. - - include_srcs_patterns: List of paths (with glob support) to include in output directory. - - See copy_to_directory rule documentation for more details. - - exclude_srcs_patterns: List of paths (with glob support) to exclude from output directory. - - See copy_to_directory rule documentation for more details. - - exclude_prefixes: List of path prefixes to exclude from output directory. - - See copy_to_directory rule documentation for more details. - - replace_prefixes: Map of paths prefixes to replace in the output directory path when copying files. - - See copy_to_directory rule documentation for more details. - - allow_overwrites: If True, allow files to be overwritten if the same output file is copied to twice. - - See copy_to_directory rule documentation for more details. - - is_windows: Deprecated and unused - """ - - # TODO(2.0): remove deprecated & unused is_windows parameter - if not srcs: - fail("srcs must not be empty") - - # Replace "." in root_paths with the package name of the target - root_paths = [p if p != "." else ctx.label.package for p in root_paths] - - # Replace a leading "." with the package name of the target in include_srcs_packages & exclude_srcs_packages - include_srcs_packages = _expand_src_packages_patterns(include_srcs_packages, ctx.label.package) - exclude_srcs_packages = _expand_src_packages_patterns(exclude_srcs_packages, ctx.label.package) - - # Convert and append exclude_prefixes to exclude_srcs_patterns - # TODO(2.0): remove exclude_prefixes this block and in a future breaking release - for exclude_prefix in exclude_prefixes: - if exclude_prefix.endswith("**"): - exclude_srcs_patterns.append(exclude_prefix) - elif exclude_prefix.endswith("*"): - exclude_srcs_patterns.append(exclude_prefix + "/**") - exclude_srcs_patterns.append(exclude_prefix) - elif exclude_prefix.endswith("/"): - exclude_srcs_patterns.append(exclude_prefix + "**") - else: - exclude_srcs_patterns.append(exclude_prefix + "*/**") - exclude_srcs_patterns.append(exclude_prefix + "*") - - # Gather a list of src_path, dst_path pairs - found_input_paths = False - - src_dirs = [] - src_depsets = [] - copy_paths = [] - for src in srcs: - if DirectoryPathInfo in src: - src_dirs.append(src) - if DefaultInfo in src: - src_depsets.append(src[DefaultInfo].files) - - # Convert potentially-large arrays into slices to pass by reference - # instead of copying when invoking _copy_paths() - root_paths = root_paths[:] - include_external_repositories = include_external_repositories[:] - include_srcs_packages = include_srcs_packages[:] - exclude_srcs_packages = exclude_srcs_packages[:] - include_srcs_patterns = include_srcs_patterns[:] - exclude_srcs_patterns = exclude_srcs_patterns[:] - - if type(additional_files) == "list": - additional_files = depset(additional_files) - - all_srcs = src_dirs + depset(transitive = [additional_files] + src_depsets).to_list() - for src in all_srcs: - found_input_paths = True - src_path, output_path, src_file = _copy_paths( - src = src, - root_paths = root_paths, - include_external_repositories = include_external_repositories, - include_srcs_packages = include_srcs_packages, - exclude_srcs_packages = exclude_srcs_packages, - include_srcs_patterns = include_srcs_patterns, - exclude_srcs_patterns = exclude_srcs_patterns, - replace_prefixes = replace_prefixes, - ) - if src_path != None: - dst_path = skylib_paths.normalize("/".join([dst.path, output_path])) - if not _merge_into_copy_path(copy_paths, src_path, dst_path, src_file): - copy_paths.append((src_path, dst_path, src_file)) - - if not found_input_paths: - fail("No files or directories found in srcs.") - if not copy_paths: - fail("There are no files or directories to copy after applying filters. Are your 'include_srcs_patterns' and 'exclude_srcs_patterns' attributes correct?") - - # Because copy actions have "local" execution requirements, we can safely assume - # the execution is the same as the host platform and generate different actions for Windows - # and non-Windows host platforms - is_windows = _platform_utils.host_platform_is_windows() - if is_windows: - _copy_to_dir_cmd(ctx, copy_paths, dst) - else: - _copy_to_dir_bash(ctx, copy_paths, dst, allow_overwrites) - copy_to_directory_lib = struct( doc = _copy_to_directory_doc, attr_doc = _copy_to_directory_attr_doc, diff --git a/lib/tests/copy_to_directory_action/1 b/lib/tests/copy_to_directory_action/1 deleted file mode 100644 index d00491fd7..000000000 --- a/lib/tests/copy_to_directory_action/1 +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/lib/tests/copy_to_directory_action/2 b/lib/tests/copy_to_directory_action/2 deleted file mode 100644 index d00491fd7..000000000 --- a/lib/tests/copy_to_directory_action/2 +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/lib/tests/copy_to_directory_action/BUILD.bazel b/lib/tests/copy_to_directory_action/BUILD.bazel deleted file mode 100644 index ff6de000a..000000000 --- a/lib/tests/copy_to_directory_action/BUILD.bazel +++ /dev/null @@ -1,51 +0,0 @@ -load("@bazel_skylib//:bzl_library.bzl", "bzl_library") -load("//lib:copy_to_bin.bzl", "copy_to_bin") -load("//lib:copy_to_directory.bzl", "copy_to_directory") -load("//lib:diff_test.bzl", "diff_test") -load(":lib.bzl", "lib") -load(":pkg.bzl", "pkg") - -copy_to_bin( - name = "copy_1", - srcs = ["1"], -) - -lib( - name = "lib", - srcs = ["1"], - # intentionally dup on "1" to make sure it is gracefully handled - others = [ - "1", - # also pass in a copy_to_bin copy of "1" to spice things up; - # this case is handled in the fix in https://github.com/aspect-build/bazel-lib/pull/205 - "copy_1", - "2", - ], -) - -# pkg should copy DefaultInfo files and OtherInfo files -pkg( - name = "pkg", - srcs = [":lib"], - out = "pkg", -) - -copy_to_directory( - name = "expected_pkg", - srcs = [ - "1", - "2", - ], -) - -diff_test( - name = "test", - file1 = ":pkg", - file2 = ":expected_pkg", -) - -bzl_library( - name = "other_info", - srcs = ["other_info.bzl"], - visibility = ["//visibility:public"], -) diff --git a/lib/tests/copy_to_directory_action/lib.bzl b/lib/tests/copy_to_directory_action/lib.bzl deleted file mode 100644 index 14544a5d9..000000000 --- a/lib/tests/copy_to_directory_action/lib.bzl +++ /dev/null @@ -1,22 +0,0 @@ -""" -Test rule to create a lib with a DefaultInfo and a OtherInfo -""" - -load(":other_info.bzl", "OtherInfo") - -_attrs = { - "srcs": attr.label_list(allow_files = True), - "others": attr.label_list(allow_files = True), -} - -def _lib_impl(ctx): - return [ - DefaultInfo(files = depset(ctx.files.srcs)), - OtherInfo(files = depset(ctx.files.others)), - ] - -lib = rule( - implementation = _lib_impl, - attrs = _attrs, - provides = [DefaultInfo, OtherInfo], -) diff --git a/lib/tests/copy_to_directory_action/other_info.bzl b/lib/tests/copy_to_directory_action/other_info.bzl deleted file mode 100644 index 6c026793e..000000000 --- a/lib/tests/copy_to_directory_action/other_info.bzl +++ /dev/null @@ -1,8 +0,0 @@ -"""For testing""" - -OtherInfo = provider( - doc = "For testing", - fields = { - "files": "A depset of files", - }, -) diff --git a/lib/tests/copy_to_directory_action/pkg.bzl b/lib/tests/copy_to_directory_action/pkg.bzl deleted file mode 100644 index b60c4d3ef..000000000 --- a/lib/tests/copy_to_directory_action/pkg.bzl +++ /dev/null @@ -1,38 +0,0 @@ -""" -Test rule to create a pkg with DefaultInfo and OtherInfo files -""" - -load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory_action") -load(":other_info.bzl", "OtherInfo") - -_attrs = { - "srcs": attr.label_list(allow_files = True), - "out": attr.string(mandatory = True), -} - -def _pkg_impl(ctx): - dst = ctx.actions.declare_directory(ctx.attr.out) - - additional_files_depsets = [] - - # include files from OtherInfo of srcs - for src in ctx.attr.srcs: - if OtherInfo in src: - additional_files_depsets.append(src[OtherInfo].files) - - copy_to_directory_action( - ctx, - srcs = ctx.attr.srcs, - dst = dst, - additional_files = depset(transitive = additional_files_depsets), - ) - - return [ - DefaultInfo(files = depset([dst])), - ] - -pkg = rule( - implementation = _pkg_impl, - attrs = _attrs, - provides = [DefaultInfo], -)