in cmd/merge/main.go [112:155]
func loadOrgs(o options) (map[string]org.Config, error) {
config := map[string]org.Config{}
for name, path := range o.orgs {
cfg, err := unmarshal(path)
if err != nil {
return nil, fmt.Errorf("error in %s: %v", path, err)
}
switch {
case o.ignoreTeams:
cfg.Teams = nil
case o.mergeTeams:
if cfg.Teams == nil {
cfg.Teams = map[string]org.Team{}
}
prefix := filepath.Dir(path)
err := filepath.Walk(prefix, func(path string, info os.FileInfo, err error) error {
switch {
case path == prefix:
return nil // Skip base dir
case info.IsDir() && filepath.Dir(path) != prefix:
logrus.Infof("Skipping %s and its children", path)
return filepath.SkipDir // Skip prefix/foo/bar/ dirs
case !info.IsDir() && filepath.Dir(path) == prefix:
return nil // Ignore prefix/foo files
case filepath.Base(path) == "teams.yaml":
teamCfg, err := unmarshal(path)
if err != nil {
return fmt.Errorf("error in %s: %v", path, err)
}
for name, team := range teamCfg.Teams {
cfg.Teams[name] = team
}
}
return nil
})
if err != nil {
return nil, fmt.Errorf("merge teams %s: %v", path, err)
}
}
config[name] = *cfg
}
return config, nil
}