fix: improve dependency resolution and package deduplication

This commit is contained in:
Sahilb315
2025-05-29 00:39:10 +05:30
parent dad32fd6d1
commit 04e7b97785
4 changed files with 52 additions and 16 deletions
+19 -2
View File
@@ -58,7 +58,7 @@ func NewPypiDependencyResolver(config PyPiDependencyResolverConfig) (*pypiDepend
func (p *pypiDependencyResolver) ResolveDependencies(ctx context.Context, pkg *packagev1.PackageVersion) ([]*packagev1.PackageVersion, error) {
pypiVersionSpecResolverFn := func(packageName, version string) string {
ver, err := pipGetMatchingVersion(packageName, version)
fmt.Printf("Resolved %s for %s to %s\n", version, packageName, ver)
// fmt.Printf("Resolved %s for %s to %s\n", version, packageName, ver)
if err != nil {
log.Debugf("error getting matching version for %s@%s", packageName, version)
return ""
@@ -84,13 +84,19 @@ func (p *pypiDependencyResolver) ResolveDependencies(ctx context.Context, pkg *p
}, nil
}
// Python treats package names with '-' and '_' as equivalent (e.g., 'my-package' and 'my_package' refer to the same package)
packageKeyFn := func(pkg *packagev1.PackageVersion) string {
normalizedName := normalizePackageName(pkg.Package.Name)
return fmt.Sprintf("%s@%s", normalizedName, pkg.Version)
}
resolver := newDependencyResolver(p.registry, dependencyResolverConfig{
IncludeDevDependencies: p.config.IncludeDevDependencies,
IncludeTransitiveDependencies: p.config.IncludeTransitiveDependencies,
TransitiveDepth: p.config.TransitiveDepth,
FailFast: p.config.FailFast,
MaxConcurrency: p.config.MaxConcurrency,
}, pypiVersionSpecResolverFn, pypiDependencyResolverFn)
}, pypiVersionSpecResolverFn, pypiDependencyResolverFn, packageKeyFn)
return resolver.resolveDependencies(ctx, pkg)
}
@@ -314,3 +320,14 @@ func findBestMatchingVersion(releases []packageregistry.PackageVersionInfo, cons
}
return bestMatch, nil
}
func normalizePackageName(name string) string {
// Convert to lowercase
name = strings.ToLower(name)
// Replace any sequence of [-_.] with a single hyphen
re := regexp.MustCompile(`[-_.]+`)
name = re.ReplaceAllString(name, "-")
return name
}