1*9bb1b549SSpandan Das// Copyright 2021 The Bazel Authors. All rights reserved. 2*9bb1b549SSpandan Das// 3*9bb1b549SSpandan Das// Licensed under the Apache License, Version 2.0 (the "License"); 4*9bb1b549SSpandan Das// you may not use this file except in compliance with the License. 5*9bb1b549SSpandan Das// You may obtain a copy of the License at 6*9bb1b549SSpandan Das// 7*9bb1b549SSpandan Das// http://www.apache.org/licenses/LICENSE-2.0 8*9bb1b549SSpandan Das// 9*9bb1b549SSpandan Das// Unless required by applicable law or agreed to in writing, software 10*9bb1b549SSpandan Das// distributed under the License is distributed on an "AS IS" BASIS, 11*9bb1b549SSpandan Das// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9bb1b549SSpandan Das// See the License for the specific language governing permissions and 13*9bb1b549SSpandan Das// limitations under the License. 14*9bb1b549SSpandan Das 15*9bb1b549SSpandan Daspackage main 16*9bb1b549SSpandan Das 17*9bb1b549SSpandan Dasimport ( 18*9bb1b549SSpandan Das "context" 19*9bb1b549SSpandan Das "fmt" 20*9bb1b549SSpandan Das "go/build" 21*9bb1b549SSpandan Das "os" 22*9bb1b549SSpandan Das "os/signal" 23*9bb1b549SSpandan Das "path" 24*9bb1b549SSpandan Das "path/filepath" 25*9bb1b549SSpandan Das) 26*9bb1b549SSpandan Das 27*9bb1b549SSpandan Dasfunc getenvDefault(key, defaultValue string) string { 28*9bb1b549SSpandan Das if v, ok := os.LookupEnv(key); ok { 29*9bb1b549SSpandan Das return v 30*9bb1b549SSpandan Das } 31*9bb1b549SSpandan Das return defaultValue 32*9bb1b549SSpandan Das} 33*9bb1b549SSpandan Das 34*9bb1b549SSpandan Dasfunc concatStringsArrays(values ...[]string) []string { 35*9bb1b549SSpandan Das ret := []string{} 36*9bb1b549SSpandan Das for _, v := range values { 37*9bb1b549SSpandan Das ret = append(ret, v...) 38*9bb1b549SSpandan Das } 39*9bb1b549SSpandan Das return ret 40*9bb1b549SSpandan Das} 41*9bb1b549SSpandan Das 42*9bb1b549SSpandan Dasfunc ensureAbsolutePathFromWorkspace(path string) string { 43*9bb1b549SSpandan Das if filepath.IsAbs(path) { 44*9bb1b549SSpandan Das return path 45*9bb1b549SSpandan Das } 46*9bb1b549SSpandan Das return filepath.Join(workspaceRoot, path) 47*9bb1b549SSpandan Das} 48*9bb1b549SSpandan Das 49*9bb1b549SSpandan Dasfunc signalContext(parentCtx context.Context, signals ...os.Signal) (ctx context.Context, stop context.CancelFunc) { 50*9bb1b549SSpandan Das ctx, cancel := context.WithCancel(parentCtx) 51*9bb1b549SSpandan Das ch := make(chan os.Signal, 1) 52*9bb1b549SSpandan Das go func() { 53*9bb1b549SSpandan Das select { 54*9bb1b549SSpandan Das case <-ch: 55*9bb1b549SSpandan Das cancel() 56*9bb1b549SSpandan Das case <-ctx.Done(): 57*9bb1b549SSpandan Das } 58*9bb1b549SSpandan Das }() 59*9bb1b549SSpandan Das signal.Notify(ch, signals...) 60*9bb1b549SSpandan Das 61*9bb1b549SSpandan Das return ctx, cancel 62*9bb1b549SSpandan Das} 63*9bb1b549SSpandan Das 64*9bb1b549SSpandan Dasfunc isLocalPattern(pattern string) bool { 65*9bb1b549SSpandan Das return build.IsLocalImport(pattern) || filepath.IsAbs(pattern) 66*9bb1b549SSpandan Das} 67*9bb1b549SSpandan Das 68*9bb1b549SSpandan Dasfunc packageID(pattern string) string { 69*9bb1b549SSpandan Das pattern = path.Clean(pattern) 70*9bb1b549SSpandan Das if filepath.IsAbs(pattern) { 71*9bb1b549SSpandan Das if relPath, err := filepath.Rel(workspaceRoot, pattern); err == nil { 72*9bb1b549SSpandan Das pattern = relPath 73*9bb1b549SSpandan Das } 74*9bb1b549SSpandan Das } 75*9bb1b549SSpandan Das 76*9bb1b549SSpandan Das return fmt.Sprintf("//%s", pattern) 77*9bb1b549SSpandan Das} 78