Skip to content

Commit 3307340

Browse files
authored
Merge pull request #85 from hashicorp/base-version-func
add Core func
2 parents 9e69307 + 7da126b commit 3307340

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

version.go

+8
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,14 @@ func comparePrereleases(v string, other string) int {
278278
return 0
279279
}
280280

281+
// Core returns a new version constructed from only the MAJOR.MINOR.PATCH
282+
// segments of the version, without prerelease or metadata.
283+
func (v *Version) Core() *Version {
284+
segments := v.Segments64()
285+
segmentsOnly := fmt.Sprintf("%d.%d.%d", segments[0], segments[1], segments[2])
286+
return Must(NewVersion(segmentsOnly))
287+
}
288+
281289
// Equal tests if two versions are equal.
282290
func (v *Version) Equal(o *Version) bool {
283291
if v == nil || o == nil {

version_test.go

+32
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,38 @@ func TestNewSemver(t *testing.T) {
8787
}
8888
}
8989

90+
func TestCore(t *testing.T) {
91+
cases := []struct {
92+
v1 string
93+
v2 string
94+
}{
95+
{"1.2.3", "1.2.3"},
96+
{"2.3.4-alpha1", "2.3.4"},
97+
{"3.4.5alpha1", "3.4.5"},
98+
{"1.2.3-2", "1.2.3"},
99+
{"4.5.6-beta1+meta", "4.5.6"},
100+
{"5.6.7.1.2.3", "5.6.7"},
101+
}
102+
103+
for _, tc := range cases {
104+
v1, err := NewVersion(tc.v1)
105+
if err != nil {
106+
t.Fatalf("error for version %q: %s", tc.v1, err)
107+
}
108+
v2, err := NewVersion(tc.v2)
109+
if err != nil {
110+
t.Fatalf("error for version %q: %s", tc.v2, err)
111+
}
112+
113+
actual := v1.Core()
114+
expected := v2
115+
116+
if !reflect.DeepEqual(actual, expected) {
117+
t.Fatalf("expected: %s\nactual: %s", expected, actual)
118+
}
119+
}
120+
}
121+
90122
func TestVersionCompare(t *testing.T) {
91123
cases := []struct {
92124
v1 string

0 commit comments

Comments
 (0)