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  }