diff --git a/toolkit/tools/internal/packagerepo/repocloner/rpmrepocloner/rpmrepocloner.go b/toolkit/tools/internal/packagerepo/repocloner/rpmrepocloner/rpmrepocloner.go index c43f55bae8..01827f4a1c 100644 --- a/toolkit/tools/internal/packagerepo/repocloner/rpmrepocloner/rpmrepocloner.go +++ b/toolkit/tools/internal/packagerepo/repocloner/rpmrepocloner/rpmrepocloner.go @@ -674,25 +674,61 @@ func convertPackageVersionToTdnfArg(pkgVer *pkgjson.PackageVer) (tdnfArg string) // TDNF does not accept versioning information on implicit provides. if pkgVer.IsImplicitPackage() { - if pkgVer.Condition != "" { + if pkgVer.Condition != "" || pkgVer.SCondition != "" { logger.Log.Warnf("Discarding version constraint for implicit package: %v", pkgVer) } return } + // Handle first condition + var firstConstraint, secondConstraint string + + // To avoid significant overhead we only download the latest version of a package // for ">" and ">=" constraints (ie remove constraints). + switch pkgVer.Condition { case "": case "=": - tdnfArg = fmt.Sprintf("%s-%s", pkgVer.Name, pkgVer.Version) + firstConstraint = fmt.Sprintf("%s-%s", pkgVer.Name, pkgVer.Version) + tdnfArg = firstConstraint // For exact matches, use this format + return // Don't process second condition for exact matches + case "<=", "<": + firstConstraint = fmt.Sprintf("%s %s %s", pkgVer.Name, pkgVer.Condition, pkgVer.Version) + case ">", ">=": + logger.Log.Warnf("Discarding '%s' version constraint for performance: %v", pkgVer.Condition, pkgVer) + // Don't set firstConstraint, we're discarding this + default: + if pkgVer.Condition != "" { + logger.Log.Errorf("Unsupported version constraint: %s", pkgVer.Condition) + } + } + + // Handle second condition + switch pkgVer.SCondition { + case "": + case "=": + secondConstraint = fmt.Sprintf("%s-%s", pkgVer.Name, pkgVer.SVersion) case "<=", "<": - tdnfArg = fmt.Sprintf("%s %s %s", pkgVer.Name, pkgVer.Condition, pkgVer.Version) + secondConstraint = fmt.Sprintf("%s %s %s", pkgVer.Name, pkgVer.SCondition, pkgVer.SVersion) case ">", ">=": - logger.Log.Warnf("Discarding '%s' version constraint for: %v", pkgVer.Condition, pkgVer) + logger.Log.Warnf("Discarding '%s' second version constraint for performance: %v", pkgVer.SCondition, pkgVer) + // Don't set secondConstraint, we're discarding this default: - logger.Log.Errorf("Unsupported version constraint: %s", pkgVer.Condition) + if pkgVer.SCondition != "" { + logger.Log.Errorf("Unsupported second version constraint: %s", pkgVer.SCondition) + } + } + + // Combine constraints + if firstConstraint != "" && secondConstraint != "" { + tdnfArg = fmt.Sprintf("%s %s", firstConstraint, secondConstraint) + } else if firstConstraint != "" { + tdnfArg = firstConstraint + } else if secondConstraint != "" { + tdnfArg = secondConstraint } + // else tdnfArg remains just the package name return }