Appending a count for filenames that end up being duplicated by

sanitization. Addresses issue #46.
pull/4/head
Stephen Searles 2014-08-17 17:11:38 -07:00
parent 64e31e0c92
commit cfd1b4bd08
1 changed files with 14 additions and 3 deletions

View File

@ -113,6 +113,8 @@ func findFiles(dir, prefix string, recursive bool, toc *[]Asset, ignore []*regex
} }
} }
knownFuncs := make(map[string]int)
for _, file := range list { for _, file := range list {
var asset Asset var asset Asset
asset.Path = filepath.Join(dir, file.Name()) asset.Path = filepath.Join(dir, file.Name())
@ -150,7 +152,7 @@ func findFiles(dir, prefix string, recursive bool, toc *[]Asset, ignore []*regex
return fmt.Errorf("Invalid file: %v", asset.Path) return fmt.Errorf("Invalid file: %v", asset.Path)
} }
asset.Func = safeFunctionName(asset.Name) asset.Func = safeFunctionName(asset.Name, knownFuncs)
asset.Path, _ = filepath.Abs(asset.Path) asset.Path, _ = filepath.Abs(asset.Path)
*toc = append(*toc, asset) *toc = append(*toc, asset)
} }
@ -161,8 +163,10 @@ func findFiles(dir, prefix string, recursive bool, toc *[]Asset, ignore []*regex
var regFuncName = regexp.MustCompile(`[^a-zA-Z0-9_]`) var regFuncName = regexp.MustCompile(`[^a-zA-Z0-9_]`)
// safeFunctionName converts the given name into a name // safeFunctionName converts the given name into a name
// which qualifies as a valid function identifier. // which qualifies as a valid function identifier. It
func safeFunctionName(name string) string { // also compares against a known list of functions to
// prevent conflict based on name translation.
func safeFunctionName(name string, knownFuncs map[string]int) string {
name = strings.ToLower(name) name = strings.ToLower(name)
name = regFuncName.ReplaceAllString(name, "_") name = regFuncName.ReplaceAllString(name, "_")
@ -181,5 +185,12 @@ func safeFunctionName(name string) string {
name = "_" + name name = "_" + name
} }
if num, ok := knownFuncs[name]; ok {
knownFuncs[name] = num + 1
name = fmt.Sprintf("%s%d", name, num)
} else {
knownFuncs[name] = 2
}
return name return name
} }