grim/convey

closing merged branch
hostnames
2017-10-13, Gary Kramlich
33eae19fcbbe
closing merged branch
package convey
import (
"fmt"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/plans"
"bitbucket.org/rw_grim/convey/stages"
)
// mergePlan modifies parent in-place so that any stage declared in child
// will overwrite the stage of the same name in parent. Return an error if
// a stage exists in child but not parent. Environments are also merged.
func mergePlan(parent, child plans.Plan, name string) (plans.Plan, error) {
for _, stage := range child.Stages {
if !replaceStage(parent, stage) {
return plans.Plan{}, fmt.Errorf(
"cannot overwrite stage '%s' in plan '%s' (no such stage in parent)",
stage.Name,
name,
)
}
}
parent.Environment = environment.Merge(parent.Environment, child.Environment)
return parent, nil
}
func replaceStage(plan plans.Plan, stage stages.Stage) bool {
for i, match := range plan.Stages {
if match.Name == stage.Name {
plan.Stages[i] = stage
return true
}
}
return false
}