59 lines
1.8 KiB
Go
59 lines
1.8 KiB
Go
package runtime
|
|
|
|
import "github.com/sirupsen/logrus"
|
|
|
|
// Config is an internal configuration modifier. It can be instantiated on a
|
|
// command call and can be changed on the fly to help make decisions further
|
|
// down in the internals, e.g. whether or not to clone the recipe locally or
|
|
// not.
|
|
type Config struct {
|
|
EnsureRecipeExists bool // ensure that the recipe is cloned locally
|
|
EnsureRecipeLatest bool // ensure the local recipe has latest changes
|
|
}
|
|
|
|
// Option modified a Config.
|
|
type Option func(c *Config)
|
|
|
|
// New instantiates a new Config.
|
|
func New(opts ...Option) *Config {
|
|
conf := &Config{
|
|
EnsureRecipeExists: true,
|
|
}
|
|
|
|
for _, optFunc := range opts {
|
|
optFunc(conf)
|
|
}
|
|
|
|
return conf
|
|
}
|
|
|
|
// WithEnsureRecipeExists determines whether or not we should be cloning the
|
|
// local recipe or not. This can be useful for being more adaptable to offline
|
|
// scenarios.
|
|
func WithEnsureRecipeExists(ensureRecipeExists bool) Option {
|
|
return func(c *Config) {
|
|
if ensureRecipeExists {
|
|
logrus.Debugf("runtime config: EnsureRecipeExists = %v, ensuring recipes are cloned", ensureRecipeExists)
|
|
} else {
|
|
logrus.Debugf("runtime config: EnsureRecipeExists = %v, not cloning recipes", ensureRecipeExists)
|
|
}
|
|
|
|
c.EnsureRecipeExists = ensureRecipeExists
|
|
}
|
|
}
|
|
|
|
// WithEnsureRecipeLatest determines whether we should update the local recipes
|
|
// remotely via Git. This can be useful when e.g. ensuring we have the latest
|
|
// changes before making new ones.
|
|
func WithEnsureRecipeLatest(ensureRecipeLatest bool) Option {
|
|
return func(c *Config) {
|
|
if ensureRecipeLatest {
|
|
logrus.Debugf("runtime config: EnsureRecipeLatest = %v, ensuring recipes have latest changes", ensureRecipeLatest)
|
|
} else {
|
|
logrus.Debugf("runtime config: EnsureRecipeLatest = %v, leaving recipes alone", ensureRecipeLatest)
|
|
}
|
|
|
|
c.EnsureRecipeLatest = ensureRecipeLatest
|
|
}
|
|
}
|