From e1e2df656a46c428bfb487e5ec3d126905ff003e Mon Sep 17 00:00:00 2001
From: Felix Lange <fjl@twurst.com>
Date: Mon, 21 Nov 2016 12:44:42 +0100
Subject: [PATCH] internal/build: add support for git tag in local Environment

I didn't add this initially because the command I tried was too slow.
The 'git for-each-ref ...' invocation takes 40ms on my machine. That
ought to be acceptable.
---
 internal/build/env.go  | 5 +++--
 internal/build/util.go | 7 ++++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/internal/build/env.go b/internal/build/env.go
index cd3355092..95281df86 100644
--- a/internal/build/env.go
+++ b/internal/build/env.go
@@ -88,8 +88,9 @@ func LocalEnv() Environment {
 			env.Branch = b
 		}
 	}
-	// Note that we don't get the current git tag. It would slow down
-	// builds and isn't used by anything.
+	if env.Tag == "" {
+		env.Tag = RunGit("for-each-ref", "--points-at=HEAD", "--count=1", "--format=%(refname:short)", "refs/tags")
+	}
 	return env
 }
 
diff --git a/internal/build/util.go b/internal/build/util.go
index c7e0614f2..1523a067b 100644
--- a/internal/build/util.go
+++ b/internal/build/util.go
@@ -76,6 +76,8 @@ func VERSION() string {
 	return string(bytes.TrimSpace(version))
 }
 
+var warnedAboutGit bool
+
 // RunGit runs a git subcommand and returns its output.
 // The command must complete successfully.
 func RunGit(args ...string) string {
@@ -83,7 +85,10 @@ func RunGit(args ...string) string {
 	var stdout, stderr bytes.Buffer
 	cmd.Stdout, cmd.Stderr = &stdout, &stderr
 	if err := cmd.Run(); err == exec.ErrNotFound {
-		log.Println("no git in PATH")
+		if !warnedAboutGit {
+			log.Println("Warning: can't find 'git' in PATH")
+			warnedAboutGit = true
+		}
 		return ""
 	} else if err != nil {
 		log.Fatal(strings.Join(cmd.Args, " "), ": ", err, "\n", stderr.String())
-- 
GitLab