Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

escape globs in generate_file_targets #15383

Merged
merged 5 commits into from
May 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/python/pants/core/target_types_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ def test_generate_file_and_resource_targets() -> None:
),
"assets/f1.ext": "",
"assets/f2.ext": "",
"assets/f[3].ext": "",
"assets/subdir/f.ext": "",
}
)
Expand Down Expand Up @@ -360,10 +361,12 @@ def gen_resource_tgt(rel_fp: str, tags: list[str] | None = None) -> ResourceTarg
assert set(generated_files.values()) == {
gen_file_tgt("f1.ext", tags=["overridden"]),
gen_file_tgt("f2.ext"),
gen_file_tgt("f[[]3].ext"),
gen_file_tgt("subdir/f.ext"),
}
assert set(generated_resources.values()) == {
gen_resource_tgt("f1.ext", tags=["overridden"]),
gen_resource_tgt("f2.ext"),
gen_resource_tgt("f[[]3].ext"),
gen_resource_tgt("subdir/f.ext"),
}
7 changes: 7 additions & 0 deletions src/python/pants/engine/internals/build_files_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ def test_address_specs_literals_vs_globs(address_specs_rule_runner: RuleRunner)
),
"demo/f1.txt": "",
"demo/f2.txt": "",
"demo/f[3].txt": "",
"demo/subdir/f.txt": "",
"demo/subdir/f.another_ext": "",
"demo/subdir/BUILD": "mock_tgt(name='another_ext', sources=['f.another_ext'])",
Expand Down Expand Up @@ -363,6 +364,8 @@ def assert_resolved(spec: AddressSpec, expected: set[Address]) -> None:
Address("demo", generated_name="f1.txt"),
Address("demo", relative_file_path="f2.txt"),
Address("demo", generated_name="f2.txt"),
Address("demo", relative_file_path="f[[]3].txt"),
Address("demo", generated_name="f[[]3].txt"),
},
)
assert_resolved(
Expand All @@ -382,6 +385,8 @@ def assert_resolved(spec: AddressSpec, expected: set[Address]) -> None:
Address("demo", generated_name="f1.txt"),
Address("demo", relative_file_path="f2.txt"),
Address("demo", generated_name="f2.txt"),
Address("demo", relative_file_path="f[[]3].txt"),
Address("demo", generated_name="f[[]3].txt"),
Address("demo", relative_file_path="subdir/f.txt"),
Address("demo", generated_name="subdir/f.txt"),
Address("demo/subdir", target_name="another_ext"),
Expand All @@ -396,6 +401,8 @@ def assert_resolved(spec: AddressSpec, expected: set[Address]) -> None:
Address("demo", generated_name="f1.txt"),
Address("demo", relative_file_path="f2.txt"),
Address("demo", generated_name="f2.txt"),
Address("demo", relative_file_path="f[[]3].txt"),
Address("demo", generated_name="f[[]3].txt"),
},
)

Expand Down
5 changes: 5 additions & 0 deletions src/python/pants/engine/target.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import collections.abc
import dataclasses
import enum
import glob as glob_stdlib
import itertools
import logging
import os.path
Expand Down Expand Up @@ -1099,6 +1100,10 @@ def _generate_file_level_targets(
as the key.
"""

# Paths will have already been globbed, so they should be escaped. See
# https://github.com/pantsbuild/pants/issues/15381.
paths = [glob_stdlib.escape(path) for path in paths]

def generate_address(base_address: Address, relativized_fp: str) -> Address:
return (
base_address.create_generated(relativized_fp)
Expand Down