-
Notifications
You must be signed in to change notification settings - Fork 265
/
mod_name.go
44 lines (39 loc) · 1.17 KB
/
mod_name.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package modconfig
import (
"bytes"
"fmt"
"strings"
"github.com/Masterminds/semver"
)
func ModVersionFullName(name string, version *semver.Version) string {
if version == nil {
return name
}
versionString := GetMonotonicVersionString(version)
return fmt.Sprintf("%s@v%s", name, versionString)
}
func GetMonotonicVersionString(v *semver.Version) string {
var buf bytes.Buffer
fmt.Fprintf(&buf, "%d.%d", v.Major(), v.Minor())
if v.Metadata() != "" {
fmt.Fprintf(&buf, "+%s", v.Metadata())
}
return buf.String()
}
func ParseModFullName(fullName string) (modName string, modVersion *semver.Version, err error) {
// we expect modLongName to be of form github.com/turbot/steampipe-mod-m2@v1.0
// split to get the name and version
parts := strings.Split(fullName, "@")
if len(parts) != 2 {
err = fmt.Errorf("invalid mod full name %s", fullName)
return
}
modName = parts[0]
versionString := parts[1]
modVersion, err = semver.NewVersion(versionString)
// NOTE: we expect the version to be in format 'vx.x.x', i.e. a smver with a preceding v
if !strings.HasPrefix(versionString, "v") || err != nil {
err = fmt.Errorf("mod file %s has invalid version", fullName)
}
return
}