From: Tamir Duberstein Date: Wed, 30 Dec 2015 16:15:38 +0000 (-0500) Subject: cmd/dist: improve isGitRepo to handle git "worktree"s X-Git-Tag: go1.6beta2~101 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=24ef1d60f09314a84ce5915da9caa700cb51f816;p=gostls13.git cmd/dist: improve isGitRepo to handle git "worktree"s Simply checking the exit code of `git rev-parse --git-dir` should suffice here, but that requires deviating from the infrastructure provided by `run`, so I've left that for a future change. Originally by Tamir Duberstein but updated by iant & rsc to add the filepath.Join logic. Fixes #11211 (again). Change-Id: I6d29b5ae39ba456088ae1fb5d41014cb91c86897 Reviewed-on: https://go-review.googlesource.com/18323 Reviewed-by: Ian Lance Taylor --- diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go index 634c52c3b0..39a88ccab5 100644 --- a/src/cmd/dist/build.go +++ b/src/cmd/dist/build.go @@ -322,18 +322,15 @@ func findgoversion() string { // isGitRepo reports whether the working directory is inside a Git repository. func isGitRepo() bool { - p := ".git" - for { - fi, err := os.Stat(p) - if os.IsNotExist(err) { - p = filepath.Join("..", p) - continue - } - if err != nil || !fi.IsDir() { - return false - } - return true - } + // NB: simply checking the exit code of `git rev-parse --git-dir` would + // suffice here, but that requires deviating from the infrastructure + // provided by `run`. + gitDir := chomp(run(goroot, 0, "git", "rev-parse", "--git-dir")) + if !filepath.IsAbs(gitDir) { + gitDir = filepath.Join(goroot, gitDir) + } + fi, err := os.Stat(gitDir) + return err == nil && fi.IsDir() } /*