mirror of
https://github.com/go-task/task.git
synced 2025-10-08 23:02:02 +02:00
49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
package ast
|
|
|
|
import (
|
|
"cmp"
|
|
"maps"
|
|
"time"
|
|
|
|
"github.com/Masterminds/semver/v3"
|
|
)
|
|
|
|
type TaskRC struct {
|
|
Version *semver.Version `yaml:"version"`
|
|
Verbose *bool `yaml:"verbose"`
|
|
Concurrency *int `yaml:"concurrency"`
|
|
Remote Remote `yaml:"remote"`
|
|
Experiments map[string]int `yaml:"experiments"`
|
|
}
|
|
|
|
type Remote struct {
|
|
Insecure *bool `yaml:"insecure"`
|
|
Offline *bool `yaml:"offline"`
|
|
Timeout *time.Duration `yaml:"timeout"`
|
|
CacheExpiry *time.Duration `yaml:"cache-expiry"`
|
|
}
|
|
|
|
// Merge combines the current TaskRC with another TaskRC, prioritizing non-nil fields from the other TaskRC.
|
|
func (t *TaskRC) Merge(other *TaskRC) {
|
|
if other == nil {
|
|
return
|
|
}
|
|
|
|
t.Version = cmp.Or(other.Version, t.Version)
|
|
|
|
if t.Experiments == nil && other.Experiments != nil {
|
|
t.Experiments = other.Experiments
|
|
} else if t.Experiments != nil && other.Experiments != nil {
|
|
maps.Copy(t.Experiments, other.Experiments)
|
|
}
|
|
|
|
// Merge Remote fields
|
|
t.Remote.Insecure = cmp.Or(other.Remote.Insecure, t.Remote.Insecure)
|
|
t.Remote.Offline = cmp.Or(other.Remote.Offline, t.Remote.Offline)
|
|
t.Remote.Timeout = cmp.Or(other.Remote.Timeout, t.Remote.Timeout)
|
|
t.Remote.CacheExpiry = cmp.Or(other.Remote.CacheExpiry, t.Remote.CacheExpiry)
|
|
|
|
t.Verbose = cmp.Or(other.Verbose, t.Verbose)
|
|
t.Concurrency = cmp.Or(other.Concurrency, t.Concurrency)
|
|
}
|