config,lfs: introduce Include/Exclude path helpers to config.Configuration

This commit is contained in:
Taylor Blau 2016-05-27 13:11:24 -06:00
parent 0a16cf853e
commit d7ee3d3c25
2 changed files with 64 additions and 15 deletions

@ -291,11 +291,12 @@ func (c *Configuration) SetEndpointAccess(e Endpoint, authType string) {
}
}
func (c *Configuration) FetchIncludePaths() []string {
func (c *Configuration) GlobalFetchIncludePaths() []string {
c.loadGitConfig()
return c.fetchIncludePaths
}
func (c *Configuration) FetchExcludePaths() []string {
func (c *Configuration) GlobalFetchExcludePaths() []string {
c.loadGitConfig()
return c.fetchExcludePaths
}
@ -587,20 +588,68 @@ func (c *Configuration) readGitConfig(output string, uniqRemotes map[string]bool
c.gitConfig[key] = value
if len(keyParts) == 2 && keyParts[0] == "lfs" && keyParts[1] == "fetchinclude" {
for _, inc := range strings.Split(value, ",") {
inc = strings.TrimSpace(inc)
c.fetchIncludePaths = append(c.fetchIncludePaths, inc)
}
} else if len(keyParts) == 2 && keyParts[0] == "lfs" && keyParts[1] == "fetchexclude" {
for _, ex := range strings.Split(value, ",") {
ex = strings.TrimSpace(ex)
c.fetchExcludePaths = append(c.fetchExcludePaths, ex)
if len(keyParts) == 2 && keyParts[0] == "lfs" {
switch keyParts[1] {
case "fetchinclude":
c.fetchIncludePaths = cleanPaths(value, ",")
case "fetchexclude":
c.fetchExcludePaths = cleanPaths(value, ",")
}
}
}
}
// FetchIncludeExcludePaths is a convenience method for returning both the
// include and exclude path for a given set of arguments by delegating into the
// FetchIncludePaths and FetchExcludePaths functions respectively.
func (c *Configuration) FetchIncludeExcludePaths(include, exclude string) (includes, exclues []string) {
return c.FetchIncludePaths(include), c.FetchExcludePaths(exclude)
}
// FetchIncludePaths returns the comma seperated include paths contained in the
// given argument, or the GlobalFetchIncludePaths, if none were present.
func (c *Configuration) FetchIncludePaths(args string) (includes []string) {
return cleanPathsDefault(args, ",", c.GlobalFetchIncludePaths())
}
// FetchExcludePaths returns the comma seperated include paths contained in the
// given argument, or the GlobalFetchExcludePaths, if none were present.
func (c *Configuration) FetchExcludePaths(args string) (excludes []string) {
return cleanPathsDefault(args, ",", c.GlobalFetchExcludePaths())
}
// cleanPathsDefault cleans the paths contained in the given `paths` argument
// delimited by the `delim`, argument. If an empty set is returned from that
// split, then the fallback argument is returned instead.
func cleanPathsDefault(paths, delim string, fallback []string) []string {
cleaned := cleanPaths(paths, delim)
if len(cleaned) == 0 {
return fallback
}
return cleaned
}
// cleanPaths splits the given `paths` argument by the delimiter argument, and
// then "cleans" that path according to the filepath.Clean function (see
// https://golang.org/pkg/file/filepath#Clean).
func cleanPaths(paths, delim string) (cleaned []string) {
// If paths is an empty string, splitting it will yield [""], which will
// become the filepath ".". To avoid this, bail out if trimmed paths
// argument is empty.
if paths = strings.TrimSpace(paths); len(paths) == 0 {
return
}
for _, part := range strings.Split(paths, delim) {
part = strings.TrimSpace(part)
cleaned = append(cleaned, filepath.Clean(part))
}
return cleaned
}
func keyIsUnsafe(key string) bool {
for _, safe := range safeKeys {
if safe == key {

@ -84,11 +84,11 @@ func Environ() []string {
fmt.Sprintf("AccessDownload=%s", config.Config.Access("download")),
fmt.Sprintf("AccessUpload=%s", config.Config.Access("upload")),
)
if len(config.Config.FetchExcludePaths()) > 0 {
env = append(env, fmt.Sprintf("FetchExclude=%s", strings.Join(config.Config.FetchExcludePaths(), ", ")))
if len(config.Config.GlobalFetchExcludePaths()) > 0 {
env = append(env, fmt.Sprintf("FetchExclude=%s", strings.Join(config.Config.GlobalFetchExcludePaths(), ", ")))
}
if len(config.Config.FetchIncludePaths()) > 0 {
env = append(env, fmt.Sprintf("FetchInclude=%s", strings.Join(config.Config.FetchIncludePaths(), ", ")))
if len(config.Config.GlobalFetchIncludePaths()) > 0 {
env = append(env, fmt.Sprintf("FetchInclude=%s", strings.Join(config.Config.GlobalFetchIncludePaths(), ", ")))
}
for _, ext := range config.Config.Extensions() {
env = append(env, fmt.Sprintf("Extension[%d]=%s", ext.Priority, ext.Name))