21
21
setVersionErr error
22
22
)
23
23
24
+ const (
25
+ // bazelisk environment variable name that skips tools/bazel if set to a
26
+ // non-empty string.
27
+ skipWrapperEnvVar = "BAZELISK_SKIP_WRAPPER"
28
+ )
29
+
24
30
type RunOpts struct {
25
31
// Stdout is the Writer where bazelisk should write its stdout.
26
32
// Defaults to os.Stdout if nil.
@@ -29,9 +35,26 @@ type RunOpts struct {
29
35
// Stderr is the Writer where bazelisk should write its stderr.
30
36
// Defaults to os.Stderr if nil.
31
37
Stderr io.Writer
38
+
39
+ // SkipWrapper skips the tools/bazel wrapper if it exists.
40
+ SkipWrapper bool
32
41
}
33
42
34
43
func Run (args []string , opts * RunOpts ) (exitCode int , err error ) {
44
+ if opts .SkipWrapper {
45
+ prev , ok := os .LookupEnv (skipWrapperEnvVar )
46
+ if err := os .Setenv (skipWrapperEnvVar , "true" ); err != nil {
47
+ return - 1 , fmt .Errorf ("failed to set %s: %s" , skipWrapperEnvVar , err )
48
+ }
49
+ // Reset BAZELISK_SKIP_WRAPPER to its previous state after running
50
+ // bazelisk.
51
+ if ok {
52
+ defer os .Setenv (skipWrapperEnvVar , prev )
53
+ } else {
54
+ defer os .Unsetenv (skipWrapperEnvVar )
55
+ }
56
+ }
57
+
35
58
// If we were already invoked via bazelisk, then set the bazel version to
36
59
// the next version appearing in the .bazelversion file so that bazelisk
37
60
// doesn't just invoke us again (resulting in an infinite loop).
@@ -80,7 +103,7 @@ func Run(args []string, opts *RunOpts) (exitCode int, err error) {
80
103
// This will return true when referencing a CLI release in .bazelversion such as
81
104
// "buildbuddy-io/0.0.13" and then running `bazelisk`.
82
105
func IsInvokedByBazelisk () bool {
83
- return filepath .Base (os .Args [0 ]) == "bazelisk" || os .Getenv ("BAZELISK_SKIP_WRAPPER" ) == "true"
106
+ return filepath .Base (os .Args [0 ]) == "bazelisk" || os .Getenv (skipWrapperEnvVar ) == "true"
84
107
}
85
108
86
109
// makePipeWriter adapts a writer to an *os.File by using an os.Pipe().
0 commit comments