| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /*
- Copyright 2017 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package util
- import (
- gobuild "go/build"
- "path"
- "path/filepath"
- "reflect"
- "strings"
- )
- type empty struct{}
- // CurrentPackage returns the go package of the current directory, or "" if it cannot
- // be derived from the GOPATH.
- func CurrentPackage() string {
- for _, root := range gobuild.Default.SrcDirs() {
- if pkg, ok := hasSubdir(root, "."); ok {
- return pkg
- }
- }
- return ""
- }
- func hasSubdir(root, dir string) (rel string, ok bool) {
- // ensure a tailing separator to properly compare on word-boundaries
- const sep = string(filepath.Separator)
- root = filepath.Clean(root)
- if !strings.HasSuffix(root, sep) {
- root += sep
- }
- // check whether root dir starts with root
- dir = filepath.Clean(dir)
- if !strings.HasPrefix(dir, root) {
- return "", false
- }
- // cut off root
- return filepath.ToSlash(dir[len(root):]), true
- }
- // BoilerplatePath uses the boilerplate in code-generator by calculating the relative path to it.
- func BoilerplatePath() string {
- return path.Join(reflect.TypeOf(empty{}).PkgPath(), "/../../hack/boilerplate.go.txt")
- }
- // Vendorless trims vendor prefix from a package path to make it canonical
- func Vendorless(p string) string {
- if pos := strings.LastIndex(p, "/vendor/"); pos != -1 {
- return p[pos+len("/vendor/"):]
- }
- return p
- }
|