From 353689857ecd53bc1ef45555e27e27212bcc6b7e Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Sun, 10 Jan 2016 18:41:15 +0100 Subject: [PATCH] Fix version string check to allow properly tagged betas --- cmd/syncthing/main.go | 24 ++++++++++++------------ cmd/syncthing/main_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index ebf5fef5b..abd491c50 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -49,15 +49,16 @@ import ( ) var ( - Version = "unknown-dev" - Codename = "Copper Cockroach" - BuildStamp = "0" - BuildDate time.Time - BuildHost = "unknown" - BuildUser = "unknown" - IsRelease bool - IsBeta bool - LongVersion string + Version = "unknown-dev" + Codename = "Copper Cockroach" + BuildStamp = "0" + BuildDate time.Time + BuildHost = "unknown" + BuildUser = "unknown" + IsRelease bool + IsBeta bool + LongVersion string + allowedVersionExp = regexp.MustCompile(`^v\d+\.\d+\.\d+(-[a-z0-9]+)*(\.\d+)*(\+\d+-g[0-9a-f]+)?(-dirty)?$`) ) const ( @@ -89,9 +90,8 @@ const ( func init() { if Version != "unknown-dev" { // If not a generic dev build, version string should come from git describe - exp := regexp.MustCompile(`^v\d+\.\d+\.\d+(-[a-z0-9]+)*(\+\d+-g[0-9a-f]+)?(-dirty)?$`) - if !exp.MatchString(Version) { - l.Fatalf("Invalid version string %q;\n\tdoes not match regexp %v", Version, exp) + if !allowedVersionExp.MatchString(Version) { + l.Fatalf("Invalid version string %q;\n\tdoes not match regexp %v", Version, allowedVersionExp) } } diff --git a/cmd/syncthing/main_test.go b/cmd/syncthing/main_test.go index b42b4be13..cfe8a6d35 100644 --- a/cmd/syncthing/main_test.go +++ b/cmd/syncthing/main_test.go @@ -175,3 +175,29 @@ func TestShortIDCheck(t *testing.T) { t.Error("Should have gotten an error") } } + +func TestAllowedVersions(t *testing.T) { + testcases := []struct { + ver string + allowed bool + }{ + {"v0.13.0", true}, + {"v0.12.11+22-gabcdef0", true}, + {"v0.13.0-beta0", true}, + {"v0.13.0-beta47", true}, + {"v0.13.0-beta47+1-gabcdef0", true}, + {"v0.13.0-beta.0", true}, + {"v0.13.0-beta.47", true}, + {"v0.13.0-beta.0+1-gabcdef0", true}, + {"v0.13.0-beta.47+1-gabcdef0", true}, + {"v0.13.0-some-weird-but-allowed-tag", true}, + {"v0.13.0-not.allowed.to.do.this", false}, + {"v0.13.0+not.allowed.to.do.this", false}, + } + + for i, c := range testcases { + if allowed := allowedVersionExp.MatchString(c.ver); allowed != c.allowed { + t.Errorf("%d: incorrect result %v != %v for %q", i, allowed, c.allowed, c.ver) + } + } +}