...
1
12
13
14 package wspace
15
16 import (
17 "os"
18 "path/filepath"
19 "strings"
20 )
21
22 var workspaceFiles = []string{"WORKSPACE.bazel", "WORKSPACE"}
23
24
25 func IsWORKSPACE(path string) bool {
26 base := filepath.Base(path)
27 for _, workspaceFile := range workspaceFiles {
28 if base == workspaceFile {
29 return true
30 }
31 }
32 return false
33 }
34
35
36
37
38 func FindWORKSPACEFile(root string) string {
39 for _, workspaceFile := range workspaceFiles {
40 path := filepath.Join(root, workspaceFile)
41 if fileInfo, err := os.Stat(path); err == nil && !fileInfo.IsDir() {
42 return path
43 }
44 }
45 return filepath.Join(root, "WORKSPACE")
46 }
47
48
49
50 func FindRepoRoot(dir string) (string, error) {
51 dir, err := filepath.Abs(dir)
52 if err != nil {
53 return "", err
54 }
55
56 for {
57 for _, workspaceFile := range workspaceFiles {
58 filepath := filepath.Join(dir, workspaceFile)
59 info, err := os.Stat(filepath)
60 if err == nil && !info.IsDir() {
61 return dir, nil
62 }
63 if err != nil && !os.IsNotExist(err) {
64 return "", err
65 }
66 }
67 if strings.HasSuffix(dir, string(os.PathSeparator)) {
68 return "", os.ErrNotExist
69 }
70 dir = filepath.Dir(dir)
71 }
72 }
73
View as plain text