From ea531f8dd709500b15abcec02e9f3a8cbc6523c9 Mon Sep 17 00:00:00 2001 From: Joe Wang <106995533+JoeWang1127@users.noreply.github.com> Date: Wed, 2 Sep 2026 13:42:51 -0400 Subject: [PATCH 1/3] fix: search sibling --- synthtool/languages/php.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/synthtool/languages/php.py b/synthtool/languages/php.py index 501c6a1e5..fe5784df7 100644 --- a/synthtool/languages/php.py +++ b/synthtool/languages/php.py @@ -68,14 +68,13 @@ def _merge(src: str, dest: str, path: Path): def _find_copy_target(src: Path, version_string: str) -> typing.Optional[Path]: """Returns a directory contains the version subdirectory.""" logger.debug("_find_copy_target called with %s and %s", src, version_string) - entries = os.scandir(src) - if not entries: - return None - for entry in entries: - if Path(entry.path).resolve().stem.lower() == version_string: + for entry in src.iterdir(): + if entry.name.lower() == version_string: return src if entry.is_dir(): - return _find_copy_target(Path(entry.path).resolve(), version_string) + target = _fixed_find_copy_target(entry, version_string) + if target is not None: + return target return None From 4f11c6e1e5186b8c7fee4dc057a93b48a13ec4d7 Mon Sep 17 00:00:00 2001 From: Joe Wang <106995533+JoeWang1127@users.noreply.github.com> Date: Wed, 2 Sep 2026 13:44:53 -0400 Subject: [PATCH 2/3] update --- synthtool/languages/php.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/synthtool/languages/php.py b/synthtool/languages/php.py index fe5784df7..0223592aa 100644 --- a/synthtool/languages/php.py +++ b/synthtool/languages/php.py @@ -72,7 +72,7 @@ def _find_copy_target(src: Path, version_string: str) -> typing.Optional[Path]: if entry.name.lower() == version_string: return src if entry.is_dir(): - target = _fixed_find_copy_target(entry, version_string) + target = _find_copy_target(entry, version_string) if target is not None: return target return None From a9f8f9e75a10981a3fcd98723bc0c4b7c8417273 Mon Sep 17 00:00:00 2001 From: Joe Wang <106995533+JoeWang1127@users.noreply.github.com> Date: Wed, 2 Sep 2026 13:52:16 -0400 Subject: [PATCH 3/3] add unit tests --- tests/test_php.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/test_php.py b/tests/test_php.py index d52520636..cdacaf69b 100644 --- a/tests/test_php.py +++ b/tests/test_php.py @@ -20,6 +20,8 @@ import pytest +from synthtool.languages import php + FIXTURES = Path(__file__).parent / "fixtures" / "php" @@ -57,3 +59,43 @@ def get_diff_string(dcmp, buf=""): for sub_dcmp in dcmp.subdirs.values(): buf += get_diff_string(sub_dcmp) return buf + + +def test_find_copy_target_direct(tmp_path: Path): + (tmp_path / "V1").mkdir() + assert php._find_copy_target(tmp_path, "v1") == tmp_path + + +def test_find_copy_target_in_sibling(tmp_path: Path): + sibling_empty = tmp_path / "sibling_empty" + sibling_empty.mkdir() + + sibling_other = tmp_path / "sibling_other" + sibling_other.mkdir() + (sibling_other / "v2").mkdir() + + sibling_match = tmp_path / "sibling_match" + sibling_match.mkdir() + (sibling_match / "V1").mkdir() + + assert php._find_copy_target(tmp_path, "v1") == sibling_match + + +def test_find_copy_target_nested(tmp_path: Path): + nested_dir = tmp_path / "a" / "b" + nested_dir.mkdir(parents=True) + (nested_dir / "v1beta1").mkdir() + + assert php._find_copy_target(tmp_path, "v1beta1") == nested_dir + + +def test_find_copy_target_not_found(tmp_path: Path): + nested_dir = tmp_path / "a" / "b" + nested_dir.mkdir(parents=True) + (nested_dir / "v2").mkdir() + + assert php._find_copy_target(tmp_path, "v1") is None + + +def test_find_copy_target_empty_dir(tmp_path: Path): + assert php._find_copy_target(tmp_path, "v1") is None