1*9bb1b549SSpandan Das// Copyright 2017 Google Inc. 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 Das// Package bazel provides utilities for interacting with the surrounding Bazel environment. 16*9bb1b549SSpandan Daspackage bazel 17*9bb1b549SSpandan Das 18*9bb1b549SSpandan Dasimport ( 19*9bb1b549SSpandan Das "fmt" 20*9bb1b549SSpandan Das "io/ioutil" 21*9bb1b549SSpandan Das "os" 22*9bb1b549SSpandan Das) 23*9bb1b549SSpandan Das 24*9bb1b549SSpandan Dasconst TEST_SRCDIR = "TEST_SRCDIR" 25*9bb1b549SSpandan Dasconst TEST_TMPDIR = "TEST_TMPDIR" 26*9bb1b549SSpandan Dasconst TEST_WORKSPACE = "TEST_WORKSPACE" 27*9bb1b549SSpandan Das 28*9bb1b549SSpandan Das// NewTmpDir creates a new temporary directory in TestTmpDir(). 29*9bb1b549SSpandan Dasfunc NewTmpDir(prefix string) (string, error) { 30*9bb1b549SSpandan Das return ioutil.TempDir(TestTmpDir(), prefix) 31*9bb1b549SSpandan Das} 32*9bb1b549SSpandan Das 33*9bb1b549SSpandan Das// TestTmpDir returns the path the Bazel test temp directory. 34*9bb1b549SSpandan Das// If TEST_TMPDIR is not defined, it returns the OS default temp dir. 35*9bb1b549SSpandan Dasfunc TestTmpDir() string { 36*9bb1b549SSpandan Das if tmp, ok := os.LookupEnv(TEST_TMPDIR); ok { 37*9bb1b549SSpandan Das return tmp 38*9bb1b549SSpandan Das } 39*9bb1b549SSpandan Das return os.TempDir() 40*9bb1b549SSpandan Das} 41*9bb1b549SSpandan Das 42*9bb1b549SSpandan Das// SpliceDelimitedOSArgs is a utility function that scans the os.Args list for 43*9bb1b549SSpandan Das// entries delimited by the begin and end delimiters (typically the values 44*9bb1b549SSpandan Das// "-begin_files" and "-end_files" are used). Entries between these delimiters 45*9bb1b549SSpandan Das// are spliced out of from os.Args and returned to the caller. If the ordering 46*9bb1b549SSpandan Das// of -begin_files or -end_files is malformed, error is returned. 47*9bb1b549SSpandan Dasfunc SpliceDelimitedOSArgs(begin, end string) ([]string, error) { 48*9bb1b549SSpandan Das var files []string 49*9bb1b549SSpandan Das beginFiles, endFiles := -1, -1 50*9bb1b549SSpandan Das for i, arg := range os.Args { 51*9bb1b549SSpandan Das if arg == begin { 52*9bb1b549SSpandan Das beginFiles = i 53*9bb1b549SSpandan Das } else if arg == end { 54*9bb1b549SSpandan Das endFiles = i 55*9bb1b549SSpandan Das break 56*9bb1b549SSpandan Das } else if arg == "--" { 57*9bb1b549SSpandan Das break 58*9bb1b549SSpandan Das } 59*9bb1b549SSpandan Das } 60*9bb1b549SSpandan Das 61*9bb1b549SSpandan Das if beginFiles >= 0 && endFiles < 0 || 62*9bb1b549SSpandan Das beginFiles < 0 && endFiles >= 0 || 63*9bb1b549SSpandan Das beginFiles >= 0 && beginFiles >= endFiles { 64*9bb1b549SSpandan Das return nil, fmt.Errorf("error: %s, %s not set together or in order", begin, end) 65*9bb1b549SSpandan Das } 66*9bb1b549SSpandan Das 67*9bb1b549SSpandan Das if beginFiles >= 0 { 68*9bb1b549SSpandan Das files = os.Args[beginFiles+1 : endFiles] 69*9bb1b549SSpandan Das os.Args = append(os.Args[:beginFiles:beginFiles], os.Args[endFiles+1:]...) 70*9bb1b549SSpandan Das } 71*9bb1b549SSpandan Das 72*9bb1b549SSpandan Das return files, nil 73*9bb1b549SSpandan Das} 74