summaryrefslogtreecommitdiff
path: root/pkg/server/env/env.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-03-11 10:49:15 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-03-11 10:49:15 +0300
commit76012e39e9201b9dfcbbad546c7c2b38512903cb (patch)
tree389e35734416c2bfea9ceeb720757cdca3d29675 /pkg/server/env/env.go
parent9b85a2f18b2be51dd099beb169e7e30a9eacb816 (diff)
auto dial, tunnel limit
Diffstat (limited to 'pkg/server/env/env.go')
-rw-r--r--pkg/server/env/env.go42
1 files changed, 19 insertions, 23 deletions
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 {