support.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package evaluator
  2. import (
  3. "regexp"
  4. "strings"
  5. )
  6. var (
  7. TOKEN_ENV_INTERPOLATION = regexp.MustCompile("(\\\\\\\\+|[^\\\\]|\\b|\\A)\\$({?)([[:alnum:]_]+)(}?)")
  8. )
  9. // handle environment replacement. Used in dispatcher.
  10. func (b *BuildFile) replaceEnv(str string) string {
  11. for _, match := range TOKEN_ENV_INTERPOLATION.FindAllString(str, -1) {
  12. match = match[strings.Index(match, "$"):]
  13. matchKey := strings.Trim(match, "${}")
  14. for _, keyval := range b.Config.Env {
  15. tmp := strings.SplitN(keyval, "=", 2)
  16. if tmp[0] == matchKey {
  17. str = strings.Replace(str, match, tmp[1], -1)
  18. }
  19. }
  20. }
  21. return str
  22. }
  23. func (b *BuildFile) FindEnvKey(key string) int {
  24. for k, envVar := range b.Config.Env {
  25. envParts := strings.SplitN(envVar, "=", 2)
  26. if key == envParts[0] {
  27. return k
  28. }
  29. }
  30. return -1
  31. }
  32. func handleJsonArgs(args []string, attributes map[string]bool) []string {
  33. if attributes != nil && attributes["json"] {
  34. return args
  35. }
  36. // literal string command, not an exec array
  37. return append([]string{"/bin/sh", "-c", strings.Join(args, " ")})
  38. }