]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/dist: improve isGitRepo to handle git "worktree"s
authorTamir Duberstein <tamird@gmail.com>
Wed, 30 Dec 2015 16:15:38 +0000 (11:15 -0500)
committerRuss Cox <rsc@golang.org>
Thu, 7 Jan 2016 01:23:05 +0000 (01:23 +0000)
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 <iant@golang.org>
src/cmd/dist/build.go

index 634c52c3b0fe554fab7ef18de9a626849ea81bb5..39a88ccab591f3cfa2f985550c0d2ba19583900a 100644 (file)
@@ -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()
 }
 
 /*