diff --git a/updater/fetchers/rocky/rocky.go b/updater/fetchers/rocky/rocky.go index aaafe7d..48d8d0f 100644 --- a/updater/fetchers/rocky/rocky.go +++ b/updater/fetchers/rocky/rocky.go @@ -132,18 +132,25 @@ func productNameToNamespace(productName string) string { // NEVRA format: name-[epoch:]version-release.arch.rpm // Example with epoch: // -// "valkey-0:8.0.6-2.el10_1.ppc64le.rpm" -> "8.0.6-2.el10_1" -func extractVersionFromNevra(nvraString string) string { - lastPeriod := strings.LastIndex(nvraString, ".") - nvraString = nvraString[:lastPeriod] - lastPeriod = strings.LastIndex(nvraString, ".") - nvraString = nvraString[:lastPeriod] - //Get module name from section before epoch - epochIndex := strings.Index(nvraString, ":") - - //Remaining section is version - moduleVersion := nvraString[epochIndex-1:] - return moduleVersion +// "valkey-0:8.0.6-2.el10_1.ppc64le.rpm" -> "valkey", "8.0.6-2.el10_1" +func extractVersionModuleFromNevra(nevra string) (string, string) { + + nevra = strings.TrimSuffix(nevra, ".rpm") + + if lastPeriod := strings.LastIndex(nevra, "."); lastPeriod > 0 { + nevra = nevra[:lastPeriod] + } + + nevraInfo := strings.Split(nevra, ":") + if len(nevraInfo) != 2 { + return "", "" + } + moduleName := nevraInfo[0] + if lastPeriod := strings.LastIndex(moduleName, "-"); lastPeriod > 0 { + moduleName = moduleName[:lastPeriod] + } + moduleVersion := nevraInfo[1] + return moduleName, moduleVersion } // buildFixedInByNamespace organizes fixed package versions by Rocky Linux product namespace. @@ -174,7 +181,7 @@ func buildFixedInByNamespace(affectedProducts []affectedProduct, packages []pkg) groupPakcage = packagesByNamespace[affectedProductNamespace] } - pkgVersion := extractVersionFromNevra(pkg.Nevra) + pkgName, pkgVersion := extractVersionModuleFromNevra(pkg.Nevra) if _, existing := groupPakcage[pkgVersion]; !existing { fvVer, err := common.NewVersion(pkgVersion) if err != nil { @@ -183,7 +190,7 @@ func buildFixedInByNamespace(affectedProducts []affectedProduct, packages []pkg) groupPakcage[pkgVersion] = common.FeatureVersion{ Feature: common.Feature{ - Name: pkg.PackageName, + Name: pkgName, Namespace: affectedProductNamespace, }, Version: fvVer, diff --git a/updater/fetchers/rocky/rocky_test.go b/updater/fetchers/rocky/rocky_test.go new file mode 100644 index 0000000..5477099 --- /dev/null +++ b/updater/fetchers/rocky/rocky_test.go @@ -0,0 +1,25 @@ +package rocky + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestExtractVersionModuleFromNevra(t *testing.T) { + tests := []struct { + nevra string + moduleName string + moduleVersion string + }{ + {nevra: "valkey-0:8.0.6-2.el10_1.ppc64le.rpm", moduleName: "valkey", moduleVersion: "8.0.6-2.el10_1"}, + {nevra: "kernel-0:6.12.0-124.8.1.el10_1.aarch64.rpm", moduleName: "kernel", moduleVersion: "6.12.0-124.8.1.el10_1"}, + {nevra: "kernel-64k-debug-core-0:6.12.0-124.8.1.el10_1.aarch64.rpm", moduleName: "kernel-64k-debug-core", moduleVersion: "6.12.0-124.8.1.el10_1"}, + {nevra: "kernel-abi-stablelists-0:6.12.0-124.8.1.el10_1.noarch.rpm", moduleName: "kernel-abi-stablelists", moduleVersion: "6.12.0-124.8.1.el10_1"}, + } + for _, test := range tests { + moduleName, moduleVersion := extractVersionModuleFromNevra(test.nevra) + require.Equal(t, test.moduleName, moduleName) + require.Equal(t, test.moduleVersion, moduleVersion) + } +}