1
1
package v1beta1
2
2
3
3
import (
4
- "crypto/sha256"
5
4
"fmt"
6
- "io"
7
5
"sort"
8
6
"strings"
9
7
@@ -15,26 +13,37 @@ type GrafanaPlugin struct {
15
13
Version string `json:"version"`
16
14
}
17
15
18
- type PluginList []GrafanaPlugin
16
+ func (p GrafanaPlugin ) HasValidVersion () bool {
17
+ if p .Version == PluginVersionLatest {
18
+ return true
19
+ }
19
20
20
- type PluginMap map [ string ] PluginList
21
+ _ , err := semver . Parse ( p . Version )
21
22
22
- func (l PluginList ) Hash () string {
23
- sb := strings.Builder {}
24
- for _ , plugin := range l {
25
- sb .WriteString (plugin .Name )
26
- sb .WriteString (plugin .Version )
23
+ return err == nil
24
+ }
25
+
26
+ func (p GrafanaPlugin ) HasInvalidVersion () bool {
27
+ return ! p .HasValidVersion ()
28
+ }
29
+
30
+ func (p GrafanaPlugin ) String () string {
31
+ if p .Version == PluginVersionLatest {
32
+ return p .Name
27
33
}
28
34
29
- hash := sha256 .New ()
30
- io .WriteString (hash , sb .String ()) //nolint
31
- return fmt .Sprintf ("%x" , hash .Sum (nil ))
35
+ return fmt .Sprintf ("%s %s" , p .Name , p .Version )
32
36
}
33
37
38
+ type PluginList []GrafanaPlugin
39
+
40
+ type PluginMap map [string ]PluginList
41
+
34
42
func (l PluginList ) String () string {
35
43
plugins := make (sort.StringSlice , 0 , len (l ))
44
+
36
45
for _ , plugin := range l {
37
- plugins = append (plugins , fmt . Sprintf ( "%s %s" , plugin .Name , plugin . Version ))
46
+ plugins = append (plugins , plugin .String ( ))
38
47
}
39
48
40
49
sort .Sort (plugins )
@@ -44,9 +53,9 @@ func (l PluginList) String() string {
44
53
45
54
// Update update plugin version
46
55
func (l PluginList ) Update (plugin * GrafanaPlugin ) {
47
- for _ , installedPlugin := range l {
56
+ for i , installedPlugin := range l {
48
57
if installedPlugin .Name == plugin .Name {
49
- installedPlugin .Version = plugin .Version
58
+ l [ i ] .Version = plugin .Version
50
59
break
51
60
}
52
61
}
@@ -57,8 +66,7 @@ func (l PluginList) Sanitize() PluginList {
57
66
var sanitized PluginList
58
67
59
68
for _ , plugin := range l {
60
- _ , err := semver .Parse (plugin .Version )
61
- if err != nil {
69
+ if plugin .HasInvalidVersion () {
62
70
continue
63
71
}
64
72
@@ -81,17 +89,6 @@ func (l PluginList) HasSomeVersionOf(plugin *GrafanaPlugin) bool {
81
89
return false
82
90
}
83
91
84
- // GetInstalledVersionOf gets the plugin from the list regardless of the version
85
- func (l PluginList ) GetInstalledVersionOf (plugin * GrafanaPlugin ) * GrafanaPlugin {
86
- for _ , listedPlugin := range l {
87
- if listedPlugin .Name == plugin .Name {
88
- return & listedPlugin
89
- }
90
- }
91
-
92
- return nil
93
- }
94
-
95
92
// HasExactVersionOf returns true if the list contains the same plugin in the same version
96
93
func (l PluginList ) HasExactVersionOf (plugin * GrafanaPlugin ) bool {
97
94
for _ , listedPlugin := range l {
@@ -110,6 +107,14 @@ func (l PluginList) HasNewerVersionOf(plugin *GrafanaPlugin) (bool, error) {
110
107
continue
111
108
}
112
109
110
+ if listedPlugin .Version == PluginVersionLatest && plugin .Version != PluginVersionLatest {
111
+ return true , nil
112
+ }
113
+
114
+ if plugin .Version == PluginVersionLatest {
115
+ return false , nil
116
+ }
117
+
113
118
listedVersion , err := semver .Parse (listedPlugin .Version )
114
119
if err != nil {
115
120
return false , err
@@ -127,16 +132,3 @@ func (l PluginList) HasNewerVersionOf(plugin *GrafanaPlugin) (bool, error) {
127
132
128
133
return false , nil
129
134
}
130
-
131
- // VersionsOf returns the number of different versions of a given plugin in the list
132
- func (l PluginList ) VersionsOf (plugin * GrafanaPlugin ) int {
133
- i := 0
134
-
135
- for _ , listedPlugin := range l {
136
- if listedPlugin .Name == plugin .Name {
137
- i ++
138
- }
139
- }
140
-
141
- return i
142
- }
0 commit comments