fix panic based error reporting
diff --git a/pathutil.go b/pathutil.go
index cb5eea9..eb7c2c0 100644
--- a/pathutil.go
+++ b/pathutil.go
@@ -36,7 +36,7 @@
m: make(map[string][]string),
}
-func wildcardGlob(pat string) []string {
+func wildcardGlob(pat string) ([]string, error) {
// TODO(ukai): use find cache for glob if exists.
pattern := filepath.Clean(pat)
if pattern != pat {
@@ -48,9 +48,9 @@
// return pat.
_, err := os.Stat(pat)
if err != nil {
- return nil
+ return nil, nil
}
- return []string{pat}
+ return []string{pat}, nil
}
if strings.Contains(pattern[i+1:], "..") {
// We ask shell to expand a glob to avoid this.
@@ -66,18 +66,18 @@
for ws.Scan() {
files = append(files, string(ws.Bytes()))
}
- return files
+ return files, nil
}
// prefix + meta + suffix, and suffix doesn't have '..'
prefix := pattern[:i]
i = strings.IndexAny(pat, "*?[")
if i < 0 {
- panic(fmt.Sprintf("wildcard metachar mismatch? pattern=%q pat=%q", pattern, pat))
+ return nil, fmt.Errorf("wildcard metachar mismatch? pattern=%q pat=%q", pattern, pat)
}
oprefix := pat[:i]
matched, err := filepath.Glob(pattern)
if err != nil {
- panic(err)
+ return nil, err
}
var files []string
for _, m := range matched {
@@ -88,16 +88,12 @@
}
files = append(files, file)
}
- return files
+ return files, nil
}
- files, err := filepath.Glob(pat)
- if err != nil {
- panic(err)
- }
- return files
+ return filepath.Glob(pat)
}
-func wildcard(sw *ssvWriter, pat string) {
+func wildcard(sw *ssvWriter, pat string) error {
if UseWildcardCache {
// TODO(ukai): make sure it didn't chdir?
wildcardCache.mu.Lock()
@@ -107,10 +103,13 @@
for _, file := range files {
sw.WriteString(file)
}
- return
+ return nil
}
}
- files := wildcardGlob(pat)
+ files, err := wildcardGlob(pat)
+ if err != nil {
+ return err
+ }
for _, file := range files {
sw.WriteString(file)
}
@@ -119,6 +118,7 @@
wildcardCache.m[pat] = files
wildcardCache.mu.Unlock()
}
+ return nil
}
type fileInfo struct {
@@ -140,6 +140,7 @@
androidDefaultLeafNames = []string{"CleanSpec.mk", "Android.mk"}
)
+// AndroidFindCacheInit initializes find cache for android build.
func AndroidFindCacheInit(prunes, leafNames []string) {
if leafNames != nil {
androidDefaultLeafNames = leafNames