示例#1
0
// this helps whenever a 'task' gets refactored to become an 'alias' (e.g. 'pkg-build' task renamed to 'deb', and 'pkg-build' became a task alias)
// note that the task settings take precedence over the alias' settings.
func (s *Settings) MergeAliasedTaskSettings(aliases map[string][]string) {
	//for each per-task setting name/value pair:
	for taskSettingTaskName, taskSettingValue := range s.TaskSettings {
		//loop through aliases, getting alias,tasks:
		for staticSettingAlias, aliasedTasks := range aliases {
			// if the specified TaskSetting == this alias:
			if staticSettingAlias == taskSettingTaskName {
				//merge into results ...
				for _, aliasedTask := range aliasedTasks {
					aliasedTaskValue, exists := s.TaskSettings[aliasedTask]
					//if settings already exists for the actual task - merge
					if exists {
						if s.IsVerbose() {
							log.Printf("Task settings specified for %s. Merging %v with %v", aliasedTask, aliasedTaskValue, taskSettingValue)
						}
						// merge
						s.TaskSettings[aliasedTask] = typeutils.MergeMaps(aliasedTaskValue, taskSettingValue)
					} else {
						if s.IsVerbose() {
							log.Printf("alias didnt exist. Setting %s to %v", aliasedTask, taskSettingValue)
						}
						//add ...
						s.TaskSettings[aliasedTask] = taskSettingValue
					}
				}
			}
		}
	}
}
示例#2
0
func LoadJsonConfigs(dir string, configs []string, verbose bool) (Settings, error) {
	//most-important first
	mergedSettingsMap := map[string]interface{}{}
	for _, jsonFile := range configs {
		settingsMap, err := loadJsonFileAsMap(jsonFile, verbose)
		if err != nil {
			if os.IsNotExist(err) {
				//continue onto next file
			} else {
				//parse error. Stop right there.
				return Settings{}, err
			}
		} else {
			mergedSettingsMap = typeutils.MergeMaps(mergedSettingsMap, settingsMap)
		}
	}
	return loadSettingsSection(mergedSettingsMap)
}