From 2aa38bfc4b5ac06f6b491c920756f501b478b085 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Thu, 12 Mar 2015 11:17:18 +0100 Subject: [PATCH] Get version from RELEASE file if it exists, or guess from directory (fixes #1449) --- .gitignore | 1 + build.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index e516c2210..6fa7aae2b 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ coverage.xml .DS_Store syncthing.md5 syncthing.exe.md5 +RELEASE diff --git a/build.go b/build.go index f727e3113..a2446d2d5 100644 --- a/build.go +++ b/build.go @@ -23,6 +23,7 @@ import ( "bytes" "compress/gzip" "crypto/md5" + "errors" "flag" "fmt" "io" @@ -350,16 +351,66 @@ func rmr(paths ...string) { } } -func getVersion() string { +func getReleaseVersion() (string, error) { + fd, err := os.Open("RELEASE") + if err != nil { + return "", err + } + defer fd.Close() + + bs, err := ioutil.ReadAll(fd) + if err != nil { + return "", err + } + return string(bytes.TrimSpace(bs)), nil +} + +func getGitVersion() (string, error) { v, err := runError("git", "describe", "--always", "--dirty") if err != nil { - return "unknown-dev" + return "", err } v = versionRe.ReplaceAllFunc(v, func(s []byte) []byte { s[0] = '+' return s }) - return string(v) + return string(v), nil +} + +func getDirectoryVersion() (string, error) { + wd, err := os.Getwd() + if err != nil { + return "", err + } + base := filepath.Base(filepath.Clean(wd)) + + re := regexp.MustCompile(`syncthing-(v?\d+\.\d+\.\d+)`) + parts := re.FindStringSubmatch(base) + + if len(parts) != 2 { + return "", errors.New("not a release directory") + } + if strings.HasPrefix(parts[1], "v") { + return parts[1], nil + } + return "v" + parts[1], nil +} + +func getVersion() string { + // First try for a RELEASE file, + if ver, err := getReleaseVersion(); err == nil { + return ver + } + // ... then see if we have a Git tag, + if ver, err := getGitVersion(); err == nil { + return ver + } + // ... otherwise try to guess from the directory name. + if ver, err := getDirectoryVersion(); err == nil { + return ver + } + // This seems to be a dev build. + return "unknown-dev" } func buildStamp() int64 {