From a27837e2fc52c97aa1a0f6479e39f324f43a5276 Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Wed, 24 Jan 2024 14:31:29 -0800 Subject: [PATCH] Add a lower bound to the modules we accumulate --- .../backends/python/gen_pypi_map/install_diff.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/internal/backends/python/gen_pypi_map/install_diff.go b/internal/backends/python/gen_pypi_map/install_diff.go index b1daf994..899b61f2 100644 --- a/internal/backends/python/gen_pypi_map/install_diff.go +++ b/internal/backends/python/gen_pypi_map/install_diff.go @@ -64,6 +64,7 @@ func InstallDiff(metadata PackageData) ([]string, error) { return nil, err } + var fewestSlashes *int modules := make(map[string]bool) filepath.WalkDir(root, func(fpath string, entry os.DirEntry, err error) error { if err != nil { @@ -87,7 +88,17 @@ func InstallDiff(metadata PackageData) ([]string, error) { } relpath = strings.TrimSuffix(relpath, string(filepath.Separator)) module := strings.ReplaceAll(relpath, string(filepath.Separator), ".") - modules[module] = true + + // Do our best to find the lowest-common module root to avoid ballooning search space + // A good example of this is flask-mysql, which installs into flaskext.mysql + currentSlashes := strings.Count(relpath, string(filepath.Separator)) + if fewestSlashes == nil || currentSlashes < *fewestSlashes { + fewestSlashes = ¤tSlashes + modules = make(map[string]bool) + modules[module] = true + } else if currentSlashes == *fewestSlashes { + modules[module] = true + } } }