github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/exec/build_vars.go (about) 1 package exec 2 3 import ( 4 "github.com/pf-qiu/concourse/v6/vars" 5 ) 6 7 type buildVariables struct { 8 parentScope interface { 9 vars.Variables 10 IterateInterpolatedCreds(iter vars.TrackedVarsIterator) 11 } 12 13 localVars vars.StaticVariables 14 tracker *vars.Tracker 15 } 16 17 func newBuildVariables(credVars vars.Variables, enableRedaction bool) *buildVariables { 18 return &buildVariables{ 19 parentScope: &vars.CredVarsTracker{ 20 CredVars: credVars, 21 Tracker: vars.NewTracker(enableRedaction), 22 }, 23 localVars: vars.StaticVariables{}, 24 tracker: vars.NewTracker(enableRedaction), 25 } 26 } 27 28 func (b *buildVariables) Get(ref vars.Reference) (interface{}, bool, error) { 29 if ref.Source == "." { 30 val, found, err := b.localVars.Get(ref) 31 if found || err != nil { 32 return val, found, err 33 } 34 } 35 return b.parentScope.Get(ref) 36 } 37 38 func (b *buildVariables) List() ([]vars.Reference, error) { 39 list, err := b.parentScope.List() 40 if err != nil { 41 return nil, err 42 } 43 for k := range b.localVars { 44 list = append(list, vars.Reference{Source: ".", Path: k}) 45 } 46 return list, nil 47 } 48 49 func (b *buildVariables) IterateInterpolatedCreds(iter vars.TrackedVarsIterator) { 50 b.tracker.IterateInterpolatedCreds(iter) 51 b.parentScope.IterateInterpolatedCreds(iter) 52 } 53 54 func (b *buildVariables) NewLocalScope() *buildVariables { 55 return &buildVariables{ 56 parentScope: b, 57 localVars: vars.StaticVariables{}, 58 tracker: vars.NewTracker(b.tracker.Enabled), 59 } 60 } 61 62 func (b *buildVariables) AddLocalVar(name string, val interface{}, redact bool) { 63 b.localVars[name] = val 64 if redact { 65 b.tracker.Track(vars.Reference{Source: ".", Path: name}, val) 66 } 67 } 68 69 func (b *buildVariables) RedactionEnabled() bool { 70 return b.tracker.Enabled 71 }