Skip to content

Commit 4310410

Browse files
[AUTO-CHERRYPICK] Fixing epoch matching in 'InstallPackageRegex'. - branch main (#9131)
Co-authored-by: Pawel Winogrodzki <pawelwi@microsoft.com>
1 parent 136efa8 commit 4310410

2 files changed

Lines changed: 84 additions & 3 deletions

File tree

toolkit/tools/internal/tdnf/tdnf.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ import (
1414
var (
1515
// Every valid line will be of the form: <package_name> <architecture> <version>.<dist> <repo_id>
1616
// For:
17-
// X aarch64 1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo
17+
// X aarch64 5:1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo
1818
//
1919
// We'd get:
2020
// - package_name: X
2121
// - architecture: aarch64
22-
// - version: 1.1b.8_X-22~rc1
22+
// - version: 5:1.1b.8_X-22~rc1
2323
// - dist: cm2
24-
InstallPackageRegex = regexp.MustCompile(`^\s*([[:alnum:]_.+-]+)\s+([[:alnum:]_+-]+)\s+([[:alnum:]._+~-]+)\.([[:alpha:]]+[[:digit:]]+)`)
24+
InstallPackageRegex = regexp.MustCompile(`^\s*([[:alnum:]_.+-]+)\s+([[:alnum:]_+-]+)\s+((?:[[:digit:]]:)?[[:alnum:]._+~-]+)\.([[:alpha:]]+[[:digit:]]+)`)
2525

2626
// Every valid line pair will be of the form:
2727
// <package>-<version>.<arch> : <Description>

toolkit/tools/internal/tdnf/tdnf_test.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,84 @@ func TestGetMajorVersionFromString_RejectTrailingDot(t *testing.T) {
7272
_, err := getMajorVersionFromString(fullVersion)
7373
assert.Error(t, err)
7474
}
75+
76+
func TestInstallPackageRegex_MatchesPackageName(t *testing.T) {
77+
const line = "X aarch64 1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo"
78+
79+
matches := InstallPackageRegex.FindStringSubmatch(line)
80+
81+
assert.Len(t, matches, InstallMaxMatchLen)
82+
assert.Equal(t, "X", matches[InstallPackageName])
83+
}
84+
85+
func TestInstallPackageRegex_FailsForMissingPackageName(t *testing.T) {
86+
const line = " aarch64 1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo"
87+
88+
assert.False(t, InstallPackageRegex.MatchString(line))
89+
}
90+
91+
func TestInstallPackageRegex_MatchesPackageArch(t *testing.T) {
92+
const line = "X aarch64 1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo"
93+
94+
matches := InstallPackageRegex.FindStringSubmatch(line)
95+
96+
assert.Len(t, matches, InstallMaxMatchLen)
97+
assert.Equal(t, "aarch64", matches[InstallPackageArch])
98+
}
99+
100+
func TestInstallPackageRegex_FailsForMissingArch(t *testing.T) {
101+
const line = "X 1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo"
102+
103+
assert.False(t, InstallPackageRegex.MatchString(line))
104+
}
105+
106+
func TestInstallPackageRegex_MatchesPackageVersionNoEpoch(t *testing.T) {
107+
const line = "X aarch64 1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo"
108+
109+
matches := InstallPackageRegex.FindStringSubmatch(line)
110+
111+
assert.Len(t, matches, InstallMaxMatchLen)
112+
assert.Equal(t, "1.1b.8_X-22~rc1", matches[InstallPackageVersion])
113+
}
114+
115+
func TestInstallPackageRegex_MatchesPackageVersionWithEpoch(t *testing.T) {
116+
const line = "X aarch64 5:1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo"
117+
118+
matches := InstallPackageRegex.FindStringSubmatch(line)
119+
120+
assert.Len(t, matches, InstallMaxMatchLen)
121+
assert.Equal(t, "5:1.1b.8_X-22~rc1", matches[InstallPackageVersion])
122+
}
123+
124+
func TestInstallPackageRegex_FailsForMissingVersion(t *testing.T) {
125+
const line = "X aarch64 .cm2 fetcher-cloned-repo"
126+
127+
assert.False(t, InstallPackageRegex.MatchString(line))
128+
}
129+
130+
func TestInstallPackageRegex_MatchesPackageDist(t *testing.T) {
131+
const line = "X aarch64 1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo"
132+
133+
matches := InstallPackageRegex.FindStringSubmatch(line)
134+
135+
assert.Len(t, matches, InstallMaxMatchLen)
136+
assert.Equal(t, "cm2", matches[InstallPackageDist])
137+
}
138+
139+
func TestInstallPackageRegex_FailsForMissingDist(t *testing.T) {
140+
const line = "X aarch64 1.1b.8_X-22~rc1 fetcher-cloned-repo"
141+
142+
assert.False(t, InstallPackageRegex.MatchString(line))
143+
}
144+
145+
func TestInstallPackageRegex_MatchesRandomWhiteSpaces(t *testing.T) {
146+
const line = "X aarch64 1.1b.8_X-22~rc1.cm2 fetcher-cloned-repo"
147+
148+
assert.True(t, InstallPackageRegex.MatchString(line))
149+
}
150+
151+
func TestInstallPackageRegex_DoesNotMatchInvalidLine(t *testing.T) {
152+
const line = "Invalid line"
153+
154+
assert.False(t, InstallPackageRegex.MatchString(line))
155+
}

0 commit comments

Comments
 (0)