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 {
var asset Asset
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)
}
asset.Func = safeFunctionName(asset.Name)
asset.Func = safeFunctionName(asset.Name, knownFuncs)
asset.Path, _ = filepath.Abs(asset.Path)
*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_]`)
// safeFunctionName converts the given name into a name
// which qualifies as a valid function identifier.
func safeFunctionName(name string) string {
// which qualifies as a valid function identifier. It
// 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 = regFuncName.ReplaceAllString(name, "_")
@ -181,5 +185,12 @@ func safeFunctionName(name string) string {
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
}