.dockerignore, internal/build: Read git information directly from file (#15458)

* .dockerignore, internal/build: Read git information directly from file

This commit changes the way of retrieving git commit and branch for build
environment from running git command to reading git files directly.

This commit also adds required git files into Docker build context.

fixes: #15346

* .dockerignore: workaround for including some files in .git
pull/15464/head
Arba Sasmoyo 7 years ago committed by Péter Szilágyi
parent 86f6568f66
commit f47adc9ea8
  1. 3
      .dockerignore
  2. 13
      internal/build/env.go
  3. 10
      internal/build/util.go

@ -1,4 +1,7 @@
**/.git **/.git
/.git
!/.git/HEAD
!/.git/refs/heads
**/*_test.go **/*_test.go
build/_workspace build/_workspace

@ -82,18 +82,21 @@ func Env() Environment {
// LocalEnv returns build environment metadata gathered from git. // LocalEnv returns build environment metadata gathered from git.
func LocalEnv() Environment { func LocalEnv() Environment {
env := applyEnvFlags(Environment{Name: "local", Repo: "ethereum/go-ethereum"}) env := applyEnvFlags(Environment{Name: "local", Repo: "ethereum/go-ethereum"})
if _, err := os.Stat(".git"); err != nil { head := ReadGitFile("HEAD")
if splits := strings.Split(head, " "); len(splits) == 2 {
head = splits[1]
} else {
return env return env
} }
if env.Commit == "" { if env.Commit == "" {
env.Commit = RunGit("rev-parse", "HEAD") env.Commit = ReadGitFile(head)
} }
if env.Branch == "" { if env.Branch == "" {
if b := RunGit("rev-parse", "--abbrev-ref", "HEAD"); b != "HEAD" { if head != "HEAD" {
env.Branch = b env.Branch = strings.TrimLeft(head, "refs/heads/")
} }
} }
if env.Tag == "" { if info, err := os.Stat(".git/objects"); err == nil && info.IsDir() && env.Tag == "" {
env.Tag = firstLine(RunGit("tag", "-l", "--points-at", "HEAD")) env.Tag = firstLine(RunGit("tag", "-l", "--points-at", "HEAD"))
} }
return env return env

@ -25,6 +25,7 @@ import (
"log" "log"
"os" "os"
"os/exec" "os/exec"
"path"
"path/filepath" "path/filepath"
"runtime" "runtime"
"strings" "strings"
@ -88,6 +89,15 @@ func RunGit(args ...string) string {
return strings.TrimSpace(stdout.String()) return strings.TrimSpace(stdout.String())
} }
// ReadGitFile returns content of file in .git directory.
func ReadGitFile(file string) string {
content, err := ioutil.ReadFile(path.Join(".git", file))
if err != nil {
return ""
}
return strings.TrimSpace(string(content))
}
// Render renders the given template file into outputFile. // Render renders the given template file into outputFile.
func Render(templateFile, outputFile string, outputPerm os.FileMode, x interface{}) { func Render(templateFile, outputFile string, outputPerm os.FileMode, x interface{}) {
tpl := template.Must(template.ParseFiles(templateFile)) tpl := template.Must(template.ParseFiles(templateFile))

Loading…
Cancel
Save