@@ -20,6 +20,7 @@ type PluginInfo struct {
2020 ShortNormalizedName string
2121 Constraint * semver.Constraints
2222 Resolver string
23+ RepoSlug string
2324 PluginPath string
2425 BinPath string
2526}
@@ -42,14 +43,17 @@ func normalizedPluginType(t string) string {
4243 return ""
4344}
4445
46+ var nameNormalizer = strings .NewReplacer (":" , "-" , "/" , "-" )
47+
4548func GetPluginInfo (pluginType , pluginName string ) (* PluginInfo , error ) {
4649 nPluginType := normalizedPluginType (pluginType )
4750 if nPluginType == "" {
4851 return nil , fmt .Errorf ("invalid plugin type: %s" , pluginType )
4952 }
5053 resolver := "default"
54+ repoSlug := ""
5155 name := pluginName
52- normalizedName := fmt .Sprintf ("%s-%s" , nPluginType , pluginName )
56+ normalizedName := nameNormalizer . Replace ( fmt .Sprintf ("%s-%s" , nPluginType , pluginName ) )
5357
5458 if strings .Contains (name , ":" ) {
5559 parts := strings .Split (name , ":" )
@@ -58,16 +62,20 @@ func GetPluginInfo(pluginType, pluginName string) (*PluginInfo, error) {
5862 }
5963 resolver = parts [0 ]
6064 name = parts [1 ]
61- normalizedName = strings .ReplaceAll (normalizedName , ":" , "-" )
6265 }
6366
6467 if strings .Contains (name , "/" ) {
65- parts := strings .Split (name , "/" )
66- if len (parts ) != 2 {
67- return nil , fmt .Errorf ("invalid plugin name format" )
68+ slashParts := strings .Split (name , "/" )
69+ pName := slashParts [len (slashParts )- 1 ]
70+ // remove version constraint from the slug
71+ if strings .Contains (pName , "@" ) {
72+ nameWithoutVersion , _ , _ := strings .Cut (pName , "@" )
73+ repoSlug = strings .Join (slashParts [:len (slashParts )- 1 ], "/" ) + "/" + nameWithoutVersion
74+ } else {
75+ repoSlug = name
6876 }
69- name = parts [ 1 ]
70- normalizedName = strings . ReplaceAll ( normalizedName , "/" , "-" )
77+ // the last part is the plugin name
78+ name = pName
7179 }
7280
7381 var constraint * semver.Constraints
@@ -82,7 +90,10 @@ func GetPluginInfo(pluginType, pluginName string) (*PluginInfo, error) {
8290 }
8391 name = parts [0 ]
8492 constraint = v
85- normalizedName , _ , _ = strings .Cut (normalizedName , "@" )
93+
94+ // remove version constraint from the normalized name
95+ normalizedParts := strings .Split (normalizedName , "@" )
96+ normalizedName = strings .Join (normalizedParts [:len (normalizedParts )- 1 ], "@" )
8697 }
8798
8899 return & PluginInfo {
@@ -92,5 +103,6 @@ func GetPluginInfo(pluginType, pluginName string) (*PluginInfo, error) {
92103 ShortNormalizedName : fmt .Sprintf ("%s-%s" , nPluginType , name ),
93104 Constraint : constraint ,
94105 Resolver : resolver ,
106+ RepoSlug : repoSlug ,
95107 }, nil
96108}
0 commit comments