diff options
Diffstat (limited to 'pkg/server/env/env.go')
| -rw-r--r-- | pkg/server/env/env.go | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/pkg/server/env/env.go b/pkg/server/env/env.go index fe8af25..237c0c5 100644 --- a/pkg/server/env/env.go +++ b/pkg/server/env/env.go @@ -3,6 +3,7 @@ package env import ( "errors" "regexp" + "sort" "sync" ) @@ -18,7 +19,7 @@ type Env struct { const namePattern = "[a-zA-Z][a-zA-Z0-9.]*" var isNamePattern = regexp.MustCompile("^" + namePattern + "$").MatchString -var namePatternRe = regexp.MustCompile("@" + namePattern) +var namePatternRe = regexp.MustCompile("@(" + namePattern + "|{" + namePattern + "})") var errBadVariable = errors.New("bad variable name") @@ -93,11 +94,19 @@ func (e *env) Del(key string) bool { } func (e *env) Each(f func(string, string) bool) { + var keys []string + e.Lock() defer e.Unlock() - for k, v := range e.m { - if !f(k, v) { + for k := range e.m { + keys = append(keys, k) + } + + sort.Strings(keys) + + for _, k := range keys { + if !f(k, e.m[k]) { break } } @@ -115,7 +124,12 @@ func (e *env) Eval(s string) string { defer e.Unlock() repl := func(v string) string { - if v, ok := e.m[v[1:]]; ok { + key := v[1:] + if key[0] == '{' { + key = key[1 : len(key)-1] + } + + if v, ok := e.m[key]; ok { return v } return "" |
