Skip to content

Commit 83e5043

Browse files
fix: improve plugin name parsing
1 parent f61374a commit 83e5043

File tree

4 files changed

+66
-27
lines changed

4 files changed

+66
-27
lines changed

pkg/plugin/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func StartPlugin(pluginInfo *PluginInfo) (interface{}, error) {
2929
runningClientsMx.Lock()
3030
defer runningClientsMx.Unlock()
3131
logR, logW := io.Pipe()
32-
pluginLogger := log.New(os.Stderr, fmt.Sprintf("[%s]: ", pluginInfo.NormalizedName), 0)
32+
pluginLogger := log.New(os.Stderr, fmt.Sprintf("[%s]: ", pluginInfo.ShortNormalizedName), 0)
3333
go func() {
3434
logLineScanner := bufio.NewScanner(logR)
3535
for logLineScanner.Scan() {

pkg/plugin/discovery/download.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func downloadPlugin(pluginInfo *plugin.PluginInfo, downloadInfo *resolver.Plugin
6060

6161
res := grab.DefaultClient.Do(req)
6262
if showProgress {
63-
showDownloadProgressBar(pluginInfo.NormalizedName, res)
63+
showDownloadProgressBar(pluginInfo.ShortNormalizedName, res)
6464
}
6565
if err := res.Err(); err != nil {
6666
return "", err

pkg/plugin/plugin.go

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@ import (
1414
)
1515

1616
type PluginInfo struct {
17-
Type string
18-
Name string
19-
NormalizedName string
20-
Constraint *semver.Constraints
21-
Resolver string
22-
PluginPath string
23-
BinPath string
17+
Type string
18+
Name string
19+
NormalizedName string
20+
ShortNormalizedName string
21+
Constraint *semver.Constraints
22+
Resolver string
23+
PluginPath string
24+
BinPath string
2425
}
2526

2627
func normalizedPluginType(t string) string {
@@ -49,36 +50,47 @@ func GetPluginInfo(pluginType, pluginName string) (*PluginInfo, error) {
4950
resolver := "default"
5051
name := pluginName
5152
normalizedName := fmt.Sprintf("%s-%s", nPluginType, pluginName)
53+
5254
if strings.Contains(name, ":") {
53-
parts := strings.SplitN(name, ":", 2)
55+
parts := strings.Split(name, ":")
56+
if len(parts) != 2 {
57+
return nil, fmt.Errorf("invalid plugin name format")
58+
}
5459
resolver = parts[0]
5560
name = parts[1]
5661
normalizedName = strings.ReplaceAll(normalizedName, ":", "-")
5762
}
63+
5864
if strings.Contains(name, "/") {
59-
parts := strings.SplitN(name, "/", 2)
65+
parts := strings.Split(name, "/")
66+
if len(parts) != 2 {
67+
return nil, fmt.Errorf("invalid plugin name format")
68+
}
6069
name = parts[1]
6170
normalizedName = strings.ReplaceAll(normalizedName, "/", "-")
6271
}
6372

6473
var constraint *semver.Constraints
6574
if strings.Contains(name, "@") {
66-
parts := strings.SplitN(name, "@", 2)
75+
parts := strings.Split(name, "@")
76+
if len(parts) != 2 {
77+
return nil, fmt.Errorf("invalid plugin name format")
78+
}
6779
v, err := semver.NewConstraint(parts[1])
6880
if err != nil {
6981
return nil, err
7082
}
7183
name = parts[0]
7284
constraint = v
73-
parts = strings.SplitN(normalizedName, "@", 2)
74-
normalizedName = parts[0]
85+
normalizedName, _, _ = strings.Cut(normalizedName, "@")
7586
}
7687

7788
return &PluginInfo{
78-
Type: pluginType,
79-
Name: name,
80-
NormalizedName: normalizedName,
81-
Constraint: constraint,
82-
Resolver: resolver,
89+
Type: pluginType,
90+
Name: name,
91+
NormalizedName: normalizedName,
92+
ShortNormalizedName: fmt.Sprintf("%s-%s", nPluginType, name),
93+
Constraint: constraint,
94+
Resolver: resolver,
8395
}, nil
8496
}

pkg/plugin/plugin_test.go

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,48 @@ func TestGetPluginInfo(t *testing.T) {
2020
results *PluginInfo
2121
}{
2222
{"provider", "git", &PluginInfo{
23-
Type: "provider", Name: "git", NormalizedName: "provider-git", Resolver: "default",
23+
Type: "provider",
24+
Name: "git",
25+
NormalizedName: "provider-git",
26+
ShortNormalizedName: "provider-git",
27+
Resolver: "default",
2428
}},
2529
{"provider", "github:myorg/myplugin", &PluginInfo{
26-
Type: "provider", Name: "myplugin", NormalizedName: "provider-github-myorg-myplugin", Resolver: "github",
30+
Type: "provider",
31+
Name: "myplugin",
32+
NormalizedName: "provider-github-myorg-myplugin",
33+
ShortNormalizedName: "provider-myplugin",
34+
Resolver: "github",
2735
}},
28-
{"provider", "github:myorg/myplugin", &PluginInfo{
29-
Type: "provider", Name: "myplugin", NormalizedName: "provider-github-myorg-myplugin", Resolver: "github",
36+
{"ci_condition", "github:myorg/myplugin", &PluginInfo{
37+
Type: "ci_condition",
38+
Name: "myplugin",
39+
NormalizedName: "condition-github-myorg-myplugin",
40+
ShortNormalizedName: "condition-myplugin",
41+
Resolver: "github",
3042
}},
3143
{"provider", "github:myorg/myplugin@^1.0.0", &PluginInfo{
32-
Type: "provider", Name: "myplugin", NormalizedName: "provider-github-myorg-myplugin", Resolver: "github",
33-
Constraint: parseConstraint("^1.0.0"),
44+
Type: "provider",
45+
Name: "myplugin",
46+
NormalizedName: "provider-github-myorg-myplugin",
47+
ShortNormalizedName: "provider-myplugin",
48+
Resolver: "github",
49+
Constraint: parseConstraint("^1.0.0"),
3450
}},
3551
{"provider", "git@2.0.0", &PluginInfo{
36-
Type: "provider", Name: "git", NormalizedName: "provider-git", Resolver: "default",
37-
Constraint: parseConstraint("2.0.0"),
52+
Type: "provider",
53+
Name: "git",
54+
NormalizedName: "provider-git",
55+
ShortNormalizedName: "provider-git",
56+
Resolver: "default",
57+
Constraint: parseConstraint("2.0.0"),
58+
}},
59+
{"hooks", "registry:logger", &PluginInfo{
60+
Type: "hooks",
61+
Name: "logger",
62+
NormalizedName: "hooks-registry-logger",
63+
ShortNormalizedName: "hooks-logger",
64+
Resolver: "registry",
3865
}},
3966
}
4067
for _, testCase := range testCases {

0 commit comments

Comments
 (0)