Skip to content

Commit 6c1c93c

Browse files
committed
Extracted GetPRWorkspaceName() as a utility function
Signed-off-by: liamfallon <liam.fallon@est.tech>
1 parent fe2d39b commit 6c1c93c

4 files changed

Lines changed: 135 additions & 49 deletions

File tree

pkg/repository/repository.go

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"context"
2020
"fmt"
2121
"path/filepath"
22-
"regexp"
2322
"slices"
2423
"strings"
2524

@@ -59,7 +58,12 @@ func K8SName2PkgRevWSName(k8sNamePkg, k8sName string) string {
5958
}
6059

6160
func PkgRevK8sName2Key(k8sNamespace, k8sName string) (PackageRevisionKey, error) {
62-
conditionedK8SName, workspaceName := getPRWorkspaceName(k8sName)
61+
workspaceName := util.GetPRWorkspaceName(k8sName)
62+
63+
conditionedK8SName := k8sName
64+
if strings.Contains(workspaceName, ".") {
65+
conditionedK8SName = k8sName[:len(k8sName)-len(workspaceName)] + strings.ReplaceAll(workspaceName, ".", "-")
66+
}
6367

6468
parsedPRSlice := util.SplitIn3OnDelimiter(conditionedK8SName, ".")
6569
parsedPkgSlice := util.SplitIn3OnDelimiter(parsedPRSlice[0]+"."+parsedPRSlice[1], ".")
@@ -82,20 +86,6 @@ func PkgRevK8sName2Key(k8sNamespace, k8sName string) (PackageRevisionKey, error)
8286
}, nil
8387
}
8488

85-
func getPRWorkspaceName(k8sName string) (string, string) {
86-
if !strings.Contains(k8sName, ".") {
87-
return k8sName, ""
88-
}
89-
if semverFound, _ := regexp.MatchString("\\.v[0-9\\.]*[0-9]$", k8sName); semverFound {
90-
beforeWorkspaceName := k8sName[:strings.LastIndex(k8sName, ".v")]
91-
workspaceName := k8sName[strings.LastIndex(k8sName, ".v")+1:]
92-
93-
return beforeWorkspaceName + "." + strings.ReplaceAll(workspaceName, ".", "-"), workspaceName
94-
} else {
95-
return k8sName, k8sName[strings.LastIndex(k8sName, ".")+1:]
96-
}
97-
}
98-
9989
func (k PackageRevisionKey) DeepCopy(outKey *PackageRevisionKey) {
10090
k.PkgKey.DeepCopy(&outKey.PkgKey)
10191
outKey.Revision = k.Revision

pkg/repository/repository_test.go

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package repository
1616

1717
import (
18+
"strings"
1819
"testing"
1920

2021
"github.com/stretchr/testify/assert"
@@ -175,47 +176,61 @@ func TestPackageRevisionKey(t *testing.T) {
175176
}
176177

177178
func TestGetPRWorkspaceName(t *testing.T) {
178-
conditionedName, wsName := getPRWorkspaceName("")
179-
assert.Equal(t, "", conditionedName)
180-
assert.Equal(t, "", wsName)
179+
_, err := PkgRevK8sName2Key("my-ns", "")
180+
assert.NotNil(t, err)
181+
assert.True(t, strings.Contains(err.Error(), "package name part \"\" of object name invalid"))
181182

182-
conditionedName, wsName = getPRWorkspaceName("hello")
183-
assert.Equal(t, "hello", conditionedName)
184-
assert.Equal(t, "", wsName)
183+
_, err = PkgRevK8sName2Key("my-ns", "hello")
184+
assert.NotNil(t, err)
185+
assert.True(t, strings.Contains(err.Error(), "package name part \"\" of object name invalid"))
185186

186-
conditionedName, wsName = getPRWorkspaceName("hello.there")
187-
assert.Equal(t, "hello.there", conditionedName)
188-
assert.Equal(t, "there", wsName)
187+
prKey, err := PkgRevK8sName2Key("my-ns", "repo.hello.there")
188+
assert.Nil(t, err)
189+
assert.Equal(t, "hello", prKey.PkgKey.Package)
190+
assert.Equal(t, "", prKey.PkgKey.Path)
191+
assert.Equal(t, "there", prKey.WorkspaceName)
189192

190-
conditionedName, wsName = getPRWorkspaceName(".")
191-
assert.Equal(t, ".", conditionedName)
192-
assert.Equal(t, "", wsName)
193+
prKey, err = PkgRevK8sName2Key("my-ns", "repo..")
194+
assert.NotNil(t, err)
195+
assert.True(t, strings.Contains(err.Error(), "package name part \"\" of object name invalid"))
193196

194-
conditionedName, wsName = getPRWorkspaceName("v.")
195-
assert.Equal(t, "v.", conditionedName)
196-
assert.Equal(t, "", wsName)
197+
prKey, err = PkgRevK8sName2Key("my-ns", "v.")
198+
assert.NotNil(t, err)
199+
assert.True(t, strings.Contains(err.Error(), "workspace name part \"\" of package revision name invalid"))
197200

198-
conditionedName, wsName = getPRWorkspaceName("hello.v1.2.3")
199-
assert.Equal(t, "hello.v1-2-3", conditionedName)
200-
assert.Equal(t, "v1.2.3", wsName)
201+
prKey, err = PkgRevK8sName2Key("my-ns", "repo.hello.v1.2.3")
202+
assert.Nil(t, err)
203+
assert.Equal(t, "hello", prKey.PkgKey.Package)
204+
assert.Equal(t, "", prKey.PkgKey.Path)
205+
assert.Equal(t, "v1.2.3", prKey.WorkspaceName)
201206

202-
conditionedName, wsName = getPRWorkspaceName("hello.v1.2")
203-
assert.Equal(t, "hello.v1-2", conditionedName)
204-
assert.Equal(t, "v1.2", wsName)
207+
prKey, err = PkgRevK8sName2Key("my-ns", "repo.hello.v1.2")
208+
assert.Nil(t, err)
209+
assert.Equal(t, "hello", prKey.PkgKey.Package)
210+
assert.Equal(t, "", prKey.PkgKey.Path)
211+
assert.Equal(t, "v1.2", prKey.WorkspaceName)
205212

206-
conditionedName, wsName = getPRWorkspaceName("hello.v1")
207-
assert.Equal(t, "hello.v1", conditionedName)
208-
assert.Equal(t, "v1", wsName)
213+
prKey, err = PkgRevK8sName2Key("my-ns", "repo.hello.v1")
214+
assert.Nil(t, err)
215+
assert.Equal(t, "hello", prKey.PkgKey.Package)
216+
assert.Equal(t, "", prKey.PkgKey.Path)
217+
assert.Equal(t, "v1", prKey.WorkspaceName)
209218

210-
conditionedName, wsName = getPRWorkspaceName("hello.v1.v1")
211-
assert.Equal(t, "hello.v1.v1", conditionedName)
212-
assert.Equal(t, "v1", wsName)
219+
prKey, err = PkgRevK8sName2Key("my-ns", "repo.hello.v1.v1")
220+
assert.Nil(t, err)
221+
assert.Equal(t, "v1", prKey.PkgKey.Package)
222+
assert.Equal(t, "hello", prKey.PkgKey.Path)
223+
assert.Equal(t, "v1", prKey.WorkspaceName)
213224

214-
conditionedName, wsName = getPRWorkspaceName("hello.v1.2.3.v4.5.6")
215-
assert.Equal(t, "hello.v1.2.3.v4-5-6", conditionedName)
216-
assert.Equal(t, "v4.5.6", wsName)
225+
prKey, err = PkgRevK8sName2Key("my-ns", "repo.hello.v1.2.3.v4.5.6")
226+
assert.Nil(t, err)
227+
assert.Equal(t, "3", prKey.PkgKey.Package)
228+
assert.Equal(t, "hello/v1/2", prKey.PkgKey.Path)
229+
assert.Equal(t, "v4.5.6", prKey.WorkspaceName)
217230

218-
conditionedName, wsName = getPRWorkspaceName("hello.v1.2.3.end")
219-
assert.Equal(t, "hello.v1.2.3.end", conditionedName)
220-
assert.Equal(t, "end", wsName)
231+
prKey, err = PkgRevK8sName2Key("my-ns", "repo.hello.v1.2.3.end")
232+
assert.Nil(t, err)
233+
assert.Equal(t, "3", prKey.PkgKey.Package)
234+
assert.Equal(t, "hello/v1/2", prKey.PkgKey.Path)
235+
assert.Equal(t, "end", prKey.WorkspaceName)
221236
}

pkg/util/util.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"os"
2323
"path/filepath"
2424
"reflect"
25+
"regexp"
2526
"slices"
2627
"strings"
2728

@@ -229,6 +230,18 @@ func validPkgNamePart(repoName, path, packageName string) []string {
229230
return errSlice
230231
}
231232

233+
func GetPRWorkspaceName(k8sName string) string {
234+
if !strings.Contains(k8sName, ".") {
235+
return ""
236+
}
237+
238+
if semverFound, _ := regexp.MatchString("\\.v[0-9\\.]*[0-9]$", k8sName); semverFound {
239+
return k8sName[strings.LastIndex(k8sName, ".v")+1:]
240+
} else {
241+
return k8sName[strings.LastIndex(k8sName, ".")+1:]
242+
}
243+
}
244+
232245
func SplitIn3OnDelimiter(splitee, delimiter string) []string {
233246
splitSlice := make([]string, 3)
234247

pkg/util/util_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,74 @@ import (
2828
"k8s.io/apimachinery/pkg/types"
2929
)
3030

31+
func TestGetPRWorkspaceName(t *testing.T) {
32+
wsName := GetPRWorkspaceName("")
33+
assert.Equal(t, "", wsName)
34+
35+
wsName = GetPRWorkspaceName("hello")
36+
assert.Equal(t, "", wsName)
37+
38+
wsName = GetPRWorkspaceName("hello.there")
39+
assert.Equal(t, "there", wsName)
40+
41+
wsName = GetPRWorkspaceName(".")
42+
assert.Equal(t, "", wsName)
43+
44+
wsName = GetPRWorkspaceName("v.")
45+
assert.Equal(t, "", wsName)
46+
47+
wsName = GetPRWorkspaceName("hello.v1.2.3")
48+
assert.Equal(t, "v1.2.3", wsName)
49+
50+
wsName = GetPRWorkspaceName("hello.v1.2")
51+
assert.Equal(t, "v1.2", wsName)
52+
53+
wsName = GetPRWorkspaceName("hello.v1")
54+
assert.Equal(t, "v1", wsName)
55+
56+
wsName = GetPRWorkspaceName("hello.v1.v1")
57+
assert.Equal(t, "v1", wsName)
58+
59+
wsName = GetPRWorkspaceName("hello.v1.2.3.v4.5.6")
60+
assert.Equal(t, "v4.5.6", wsName)
61+
62+
wsName = GetPRWorkspaceName("hello.v1.2.3.end")
63+
assert.Equal(t, "end", wsName)
64+
65+
wsName = GetPRWorkspaceName("repo.")
66+
assert.Equal(t, "", wsName)
67+
68+
wsName = GetPRWorkspaceName("repo.hello")
69+
assert.Equal(t, "hello", wsName)
70+
71+
wsName = GetPRWorkspaceName("repo.hello.there")
72+
assert.Equal(t, "there", wsName)
73+
74+
wsName = GetPRWorkspaceName(".")
75+
assert.Equal(t, "", wsName)
76+
77+
wsName = GetPRWorkspaceName("repo.v.")
78+
assert.Equal(t, "", wsName)
79+
80+
wsName = GetPRWorkspaceName("repo.hello.v1.2.3")
81+
assert.Equal(t, "v1.2.3", wsName)
82+
83+
wsName = GetPRWorkspaceName("repo.hello.v1.2")
84+
assert.Equal(t, "v1.2", wsName)
85+
86+
wsName = GetPRWorkspaceName("repo.hello.v1")
87+
assert.Equal(t, "v1", wsName)
88+
89+
wsName = GetPRWorkspaceName("repo.hello.v1.v1")
90+
assert.Equal(t, "v1", wsName)
91+
92+
wsName = GetPRWorkspaceName("repo.hello.v1.2.3.v4.5.6")
93+
assert.Equal(t, "v4.5.6", wsName)
94+
95+
wsName = GetPRWorkspaceName("repo.hello.v1.2.3.end")
96+
assert.Equal(t, "end", wsName)
97+
}
98+
3199
func TestParseRepositoryNameOK(t *testing.T) {
32100
testCases := map[string]struct {
33101
pkgRevId string

0 commit comments

Comments
 (0)