pkg/tool/os: remove env manualipulate tasks
Change-Id: Ieda7d1e6b0836384ffbce9f1557ea85ca3ed0c8e
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/4943
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cmd/cue/cmd/testdata/script/cmd_env.txt b/cmd/cue/cmd/testdata/script/cmd_env.txt
index bfda9d4..ac4329b 100644
--- a/cmd/cue/cmd/testdata/script/cmd_env.txt
+++ b/cmd/cue/cmd/testdata/script/cmd_env.txt
@@ -1,8 +1,9 @@
+env TESTNUM=10
+env MYTEXT=World
cue cmd env
cmp stdout cmd_env.out
-- cmd_env.out --
Hello World!
-Hello someone else!
-- task_tool.cue --
package home
@@ -12,28 +13,11 @@
)
command: env: {
- setenv1: os.Setenv & {
- TESTNUM: 10
- MYTEXT: "World"
- }
- env1: os.Getenv & {
- $after: setenv1
-
+ env: os.Getenv & {
TESTNUM: *<10 | string
MYTEXT: string
}
- print1: cli.Print & {
- text: "Hello \(env1.MYTEXT)!"
- }
- setenv2: os.Clearenv & {
- $after: print1
- }
- env2: os.Environ & {
- $after: setenv2
-
- MYTEXT: string | *"someone else"
- }
- print2: cli.Print & {
- text: "Hello \(env2.MYTEXT)!"
+ print: cli.Print & {
+ text: "Hello \(env.MYTEXT)!"
}
}
diff --git a/pkg/tool/exec/exec.go b/pkg/tool/exec/exec.go
index 7c93e4b..7c2db97 100644
--- a/pkg/tool/exec/exec.go
+++ b/pkg/tool/exec/exec.go
@@ -154,9 +154,14 @@
for iter, _ := ctx.Obj.Lookup("env").Fields(); iter.Next(); {
label := iter.Label()
v := iter.Value()
- str, err := v.String()
- if err != nil {
- return nil, "", errors.Wrapf(err, v.Pos(),
+ var str string
+ switch v.Kind() {
+ case cue.StringKind:
+ str, _ = v.String()
+ case cue.IntKind, cue.FloatKind, cue.NumberKind:
+ str = fmt.Sprint(v)
+ default:
+ return nil, "", errors.Newf(v.Pos(),
"invalid environment variable value %q", v)
}
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", label, str))
diff --git a/pkg/tool/os/env.go b/pkg/tool/os/env.go
index 962ec03..5065ce8 100644
--- a/pkg/tool/os/env.go
+++ b/pkg/tool/os/env.go
@@ -17,7 +17,6 @@
//go:generate go run gen.go
import (
- "fmt"
"os"
"strings"
@@ -29,10 +28,8 @@
)
func init() {
- task.Register("tool/os.Setenv", newSetenvCmd)
task.Register("tool/os.Getenv", newGetenvCmd)
task.Register("tool/os.Environ", newEnvironCmd)
- task.Register("tool/os.Clearenv", newClearenvCmd)
// TODO:
// Tasks:
@@ -44,72 +41,6 @@
// - UserCache/Home/Config (or in os/user?)
}
-type clearenvCmd struct{}
-
-func newClearenvCmd(v cue.Value) (task.Runner, error) {
- return &clearenvCmd{}, nil
-}
-
-func (c *clearenvCmd) Run(ctx *task.Context) (res interface{}, err error) {
- os.Clearenv()
- return map[string]interface{}{}, nil
-}
-
-type setenvCmd struct{}
-
-func newSetenvCmd(v cue.Value) (task.Runner, error) {
- return &setenvCmd{}, nil
-}
-
-func (c *setenvCmd) Run(ctx *task.Context) (res interface{}, err error) {
- iter, err := ctx.Obj.Fields()
- if err != nil {
- return nil, err
- }
-
- for iter.Next() {
- name := iter.Label()
- if strings.HasPrefix(name, "$") {
- continue
- }
-
- v, _ := iter.Value().Default()
-
- if !v.IsConcrete() {
- return nil, errors.Newf(v.Pos(),
- "non-concrete environment variable %s", name)
- }
- switch k := v.IncompleteKind(); k {
- case cue.ListKind, cue.StructKind:
- return nil, errors.Newf(v.Pos(),
- "unsupported type %s for environment variable %s", k, name)
-
- case cue.NullKind:
- err = os.Unsetenv(name)
-
- case cue.BoolKind:
- if b, _ := v.Bool(); b {
- err = os.Setenv(name, "1")
- } else {
- err = os.Setenv(name, "0")
- }
-
- case cue.StringKind:
- s, _ := v.String()
- err = os.Setenv(name, s)
-
- default:
- err = os.Setenv(name, fmt.Sprint(v))
- }
-
- if err != nil {
- return nil, err
- }
- }
-
- return map[string]interface{}{}, err
-}
-
type getenvCmd struct{}
func newGetenvCmd(v cue.Value) (task.Runner, error) {
diff --git a/pkg/tool/os/env_test.go b/pkg/tool/os/env_test.go
index 40c6161..8a6d9fb 100644
--- a/pkg/tool/os/env_test.go
+++ b/pkg/tool/os/env_test.go
@@ -30,45 +30,6 @@
"cuelang.org/go/internal/task"
)
-func TestSetenv(t *testing.T) {
- os.Setenv("CUEOSTESTUNSET", "SET")
- v := parse(t, "tool/os.Setenv", `{
- CUEOSTESTMOOD: "yippie"
- CUEOSTESTTRUE: true
- CUEOSTESTFALSE: false
- CUEOSTESTNUM: 34K
- CUEOSTESTUNSET: null
- }`)
- _, err := (*setenvCmd).Run(nil, &task.Context{Obj: v})
- if err != nil {
- t.Fatal(err)
- }
- for _, p := range [][2]string{
- {"CUEOSTESTMOOD", "yippie"},
- {"CUEOSTESTTRUE", "1"},
- {"CUEOSTESTFALSE", "0"},
- {"CUEOSTESTNUM", "34000"},
- } {
- got := os.Getenv(p[0])
- if got != p[1] {
- t.Errorf("got %v; want %v", got, p[1])
- }
- }
-
- if _, ok := os.LookupEnv("CUEOSTESTUNSET"); ok {
- t.Error("CUEOSTESTUNSET should have been unset")
- }
-
- v = parse(t, "tool/os.Setenv", `{
- CUEOSTESTMOOD: string
- }`)
- _, err = (*setenvCmd).Run(nil, &task.Context{Obj: v})
- if err == nil {
- t.Fatal("expected incomplete error")
- }
- // XXX: ensure error is not concrete.
-}
-
func TestGetenv(t *testing.T) {
for _, p := range [][2]string{