mirror of
https://github.com/tailscale/tailscale.git
synced 2025-01-08 09:07:44 +00:00
tool/gocross: support running from outside the repo dir
A bunch of us invoke tool/go from outside the repo that hosts gocross, as a way of accessing our version-controlled toolchain. This removes assumptions from gocross that it's being invoked within the repository that contains its source code and toolchain configuration. Fixes tailscale/corp#9627 Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:
parent
df02bb013a
commit
e7a78bc28f
@ -19,6 +19,13 @@ fi
|
|||||||
(
|
(
|
||||||
repo_root="$(dirname $0)/../.."
|
repo_root="$(dirname $0)/../.."
|
||||||
|
|
||||||
|
# Figuring out if gocross needs a rebuild, as well as the rebuild itself, need
|
||||||
|
# to happen with CWD inside this repo. Since we're in a subshell entirely
|
||||||
|
# dedicated to wrangling gocross and toolchains, cd over now before doing
|
||||||
|
# anything further so that the rest of this logic works the same if gocross is
|
||||||
|
# being invoked from somewhere else.
|
||||||
|
cd "$repo_root"
|
||||||
|
|
||||||
toolchain="$HOME/.cache/tailscale-go"
|
toolchain="$HOME/.cache/tailscale-go"
|
||||||
|
|
||||||
if [ -d "$toolchain" ]; then
|
if [ -d "$toolchain" ]; then
|
||||||
|
@ -15,11 +15,21 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
func toolchainRev() (string, error) {
|
func toolchainRev() (string, error) {
|
||||||
cwd, err := os.Getwd()
|
// gocross gets built in the root of the repo that has toolchain
|
||||||
|
// information, so we can use os.Args[0] to locate toolchain info.
|
||||||
|
//
|
||||||
|
// We might be getting invoked via the synthetic goroot that we create, so
|
||||||
|
// walk symlinks to find the true location of gocross.
|
||||||
|
start, err := os.Executable()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("getting CWD: %v", err)
|
return "", err
|
||||||
}
|
}
|
||||||
d := cwd
|
start, err = filepath.EvalSymlinks(start)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("evaluating symlinks in %q: %v", os.Args[0], err)
|
||||||
|
}
|
||||||
|
start = filepath.Dir(start)
|
||||||
|
d := start
|
||||||
findTopLevel:
|
findTopLevel:
|
||||||
for {
|
for {
|
||||||
if _, err := os.Lstat(filepath.Join(d, ".git")); err == nil {
|
if _, err := os.Lstat(filepath.Join(d, ".git")); err == nil {
|
||||||
@ -29,7 +39,7 @@ func toolchainRev() (string, error) {
|
|||||||
}
|
}
|
||||||
d = filepath.Dir(d)
|
d = filepath.Dir(d)
|
||||||
if d == "/" {
|
if d == "/" {
|
||||||
return "", fmt.Errorf("couldn't find .git starting from %q, cannot manage toolchain", cwd)
|
return "", fmt.Errorf("couldn't find .git starting from %q, cannot manage toolchain", start)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user