Prevent glob from accessing hidden files

Hidden files are often source control related (".git", ".repo", etc) or
editor related (vim's .*.swp), so are not guaranteed to exist, and may
be temporary. The build system shouldn't be using these files by
default.

If the glob pattern explicitly uses "." at the beginning of a path
component, allow returning hidden files for that component. Because of
this behavior, non-wildcard globs remain unchanged.

The one behavior that cannot be handled anymore is including hidden
files in recursive globs.

Change-Id: I583c506e9a18ed2ff7ca011a791165d9582de90f
diff --git a/pathtools/glob.go b/pathtools/glob.go
index 0b9ea14..286d933 100644
--- a/pathtools/glob.go
+++ b/pathtools/glob.go
@@ -131,6 +131,9 @@
 				if err != nil {
 					return nil, nil, err
 				}
+				if file[0] != '.' {
+					newMatches = filterDotFiles(newMatches)
+				}
 				matches = append(matches, newMatches...)
 			}
 		}
@@ -170,6 +173,11 @@
 		}
 
 		if info.Mode().IsDir() {
+			name := info.Name()
+			if name[0] == '.' && name != "." {
+				return filepath.SkipDir
+			}
+
 			dirs = append(dirs, path)
 		}
 		return nil
@@ -203,6 +211,21 @@
 	return ret, nil
 }
 
+// filterDotFiles filters out files that start with '.'
+func filterDotFiles(matches []string) []string {
+	ret := make([]string, 0, len(matches))
+
+	for _, match := range matches {
+		_, name := filepath.Split(match)
+		if name[0] == '.' {
+			continue
+		}
+		ret = append(ret, match)
+	}
+
+	return ret
+}
+
 // match returns true if name matches pattern using the same rules as filepath.Match, but supporting
 // hierarchical patterns (a/*) and recursive globs (**).
 func match(pattern, name string) (bool, error) {