diff --git a/synthtool/gcp/common.py b/synthtool/gcp/common.py index 9083c7bb7..042a45538 100644 --- a/synthtool/gcp/common.py +++ b/synthtool/gcp/common.py @@ -384,8 +384,13 @@ def detect_versions( except FileNotFoundError: pass - # Sort the sub directories alphabetically. - sub_dirs = sorted([p.name for p in Path(path).rglob("*v[1-9]*") if p.is_dir()]) + # Detect versions up to a depth of 4 in directory hierarchy + for level in ("*v[1-9]*", "*/*v[1-9]*", "*/*/*v[1-9]*", "*/*/*/*v[1-9]*"): + # Sort the sub directories alphabetically. + sub_dirs = sorted([p.name for p in Path(path).glob(level) if p.is_dir()]) + # Don't proceed to the next level if we've detected versions in this depth level + if sub_dirs: + break if sub_dirs: # if `default_version` is not specified, return the sorted directories. diff --git a/synthtool/languages/python.py b/synthtool/languages/python.py index 4dbb3f898..9eb627379 100644 --- a/synthtool/languages/python.py +++ b/synthtool/languages/python.py @@ -184,7 +184,7 @@ def owlbot_main() -> None: templated_files = CommonTemplates().py_library( microgenerator=True, - versions=detect_versions(path="./google/cloud", default_first=True), + versions=detect_versions(path="./google", default_first=True), ) s.move( [templated_files], excludes=[".coveragerc"] diff --git a/tests/test_common.py b/tests/test_common.py index 0677e0d35..975221b02 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -237,10 +237,12 @@ def test_detect_versions_with_default_version_from_metadata(): def test_detect_versions_nested_directory(): temp_dir = Path(tempfile.mkdtemp()) - src_dir = temp_dir / "src" / "src2" / "src3" + src_dir = temp_dir / "src" / "src2" / "src3" / "src4" vs = ("v1", "v2", "v3") for v in vs: os.makedirs(src_dir / v) + # this folder should be ignored + os.makedirs(src_dir / v / "some_other_service_v1_beta") with util.chdir(temp_dir): versions = detect_versions(default_version="v1")