From 76012e39e9201b9dfcbbad546c7c2b38512903cb Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Wed, 11 Mar 2020 10:49:15 +0300 Subject: auto dial, tunnel limit --- pkg/server/env/env.go | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) (limited to 'pkg/server/env') diff --git a/pkg/server/env/env.go b/pkg/server/env/env.go index 118f853..16f5760 100644 --- a/pkg/server/env/env.go +++ b/pkg/server/env/env.go @@ -14,6 +14,7 @@ type env struct { type Env struct { *env + p *env } const namePattern = "[a-zA-Z][a-zA-Z0-9.]*" @@ -25,7 +26,7 @@ var errBadVariable = errors.New("bad variable name") var errEmptyVariable = errors.New("empty variable") func New() Env { - return Env{new(env)} + return Env{env: new(env)} } func (e *env) init() { @@ -34,18 +35,10 @@ func (e *env) init() { } } -func (e *env) Copy() Env { - c := New() - - if len(e.m) > 0 { - c.init() - - for k, v := range e.m { - c.m[k] = v - } - } - - return c +func (e *env) Fork() Env { + t := New() + t.p = e + return t } func (e *env) Find(key string) (string, bool) { @@ -57,7 +50,17 @@ func (e *env) Find(key string) (string, bool) { return v, ok } -func (e *env) Get(key string) string { +func (e Env) Find(key string) (string, bool) { + if e.p != nil { + if v, ok := e.p.Find(key); ok { + return v, ok + } + } + + return e.env.Find(key) +} + +func (e Env) Get(key string) string { v, _ := e.Find(key) return v } @@ -124,20 +127,13 @@ func (e *env) Clear() { e.m = nil } -func (e *env) Eval(s string) string { - e.Lock() - defer e.Unlock() - +func (e Env) Eval(s string) string { repl := func(v string) string { key := v[1:] if key[0] == '{' { key = key[1 : len(key)-1] } - - if v, ok := e.m[key]; ok { - return v - } - return "" + return e.Get(key) } for { -- cgit v1.2.3-70-g09d2