Skip to content

Commit 7a38183

Browse files
committed
go: allow more comparison operators for mod dependencies
Added support for ==, !=, >, <, >=, <= when checking the base dependency version.
1 parent 7161b3a commit 7a38183

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

src/mod_modInfo.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ func (modInfoList *ModInfoList) listInstalledMods() error {
7575
modInfo.FileName = info.Name()
7676

7777
var base Version
78+
var op string
7879
for _, dep := range modInfo.Dependencies {
7980
dep = strings.TrimSpace(dep)
8081
if dep == "" {
@@ -91,13 +92,11 @@ func (modInfoList *ModInfoList) listInstalledMods() error {
9192
}
9293
if len(parts) == 1 {
9394
base = modInfo.FactorioVersion
95+
op = ">="
9496
continue
9597
}
9698

97-
if parts[1] != ">=" {
98-
log.Printf("skipping dependency '%s' in '%s': unsupported comparison\n", dep, modInfo.Name)
99-
continue
100-
}
99+
op = parts[1]
101100

102101
if err := base.UnmarshalText([]byte(parts[2])); err != nil {
103102
log.Printf("skipping dependency '%s' in '%s': %v\n", dep, modInfo.Name, err)
@@ -108,7 +107,7 @@ func (modInfoList *ModInfoList) listInstalledMods() error {
108107
}
109108

110109
if !base.Equals(NilVersion) {
111-
modInfo.Compatibility = !FactorioServ.Version.Less(base)
110+
modInfo.Compatibility = FactorioServ.Version.Compare(base, op)
112111
} else {
113112
log.Println("error finding basemodDependency. Using FactorioVersion...")
114113
modInfo.Compatibility = !FactorioServ.Version.Less(modInfo.FactorioVersion)

src/version.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77
)
88

9+
// NilVersion represents an empty version number
910
var NilVersion = Version{0, 0, 0}
1011

1112
// Version represents a semantic version
@@ -51,3 +52,30 @@ func (v Version) Less(b Version) bool {
5152
return false
5253
}
5354
}
55+
56+
// Greater returns true if the receiver version is greater than the argument version
57+
func (v Version) Greater(b Version) bool { return !v.Equals(b) && !v.Less(b) }
58+
59+
func (v Version) ge(b Version) bool { return v.Equals(b) || v.Greater(b) }
60+
func (v Version) le(b Version) bool { return v.Equals(b) || v.Less(b) }
61+
62+
// Compare returns true if the comparison between the two version operands is valid.
63+
// Supported ops are: ==, !=, >, <, >=, <=
64+
func (v Version) Compare(b Version, op string) bool {
65+
switch op {
66+
case "==":
67+
return v.Equals(b)
68+
case "!=":
69+
return !v.Equals(b)
70+
case ">":
71+
return v.Greater(b)
72+
case "<":
73+
return v.Less(b)
74+
case ">=":
75+
return v.ge(b)
76+
case "<=":
77+
return v.le(b)
78+
default:
79+
panic("unsupported operator")
80+
}
81+
}

0 commit comments

Comments
 (0)