parent
							
								
									49c3a73563
								
							
						
					
					
						commit
						81073a0561
					
				| 
						 | 
					@ -28,48 +28,63 @@ import (
 | 
				
			||||||
	"github.com/docker/machine/libmachine/shell"
 | 
						"github.com/docker/machine/libmachine/shell"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var shellConfigMap = map[string]map[string]string{
 | 
					type shellData struct {
 | 
				
			||||||
	"fish": {
 | 
						Prefix         string
 | 
				
			||||||
		"Prefix":      "set -gx ",
 | 
						Suffix         string
 | 
				
			||||||
		"Suffix":      "\";\n", // semi-colon required for fish 2.7
 | 
						Delimiter      string
 | 
				
			||||||
		"Delimiter":   " \"",
 | 
						UnsetPrefix    string
 | 
				
			||||||
		"UnsetPrefix": "set -e ",
 | 
						UnsetSuffix    string
 | 
				
			||||||
		"UnsetSuffix": ";\n",
 | 
						UnsetDelimiter string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var shellConfigMap = map[string]shellData{
 | 
				
			||||||
 | 
						"fish": shellData{
 | 
				
			||||||
 | 
							"set -gx ",
 | 
				
			||||||
 | 
							"\";\n",
 | 
				
			||||||
 | 
							" \"",
 | 
				
			||||||
 | 
							"set -e ",
 | 
				
			||||||
 | 
							";\n",
 | 
				
			||||||
 | 
							" \"",
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"powershell": {
 | 
						"powershell": shellData{
 | 
				
			||||||
		"Prefix":      "$Env:",
 | 
							"$Env:",
 | 
				
			||||||
		"Suffix":      "\"\n",
 | 
							"\"\n",
 | 
				
			||||||
		"Delimiter":   " = \"",
 | 
							" = \"",
 | 
				
			||||||
		"UnsetPrefix": `Remove-Item Env:\\`,
 | 
							`Remove-Item Env:\\`,
 | 
				
			||||||
		"UnsetSuffix": "\n",
 | 
							"\n",
 | 
				
			||||||
 | 
							" = \"",
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"cmd": {
 | 
						"cmd": shellData{
 | 
				
			||||||
		"Prefix":      "SET ",
 | 
							"SET ",
 | 
				
			||||||
		"Suffix":      "\n",
 | 
							"\n",
 | 
				
			||||||
		"Delimiter":   "=",
 | 
							"=",
 | 
				
			||||||
		"UnsetPrefix": "SET ",
 | 
							"SET ",
 | 
				
			||||||
		"UnsetSuffix": "\n",
 | 
							"\n",
 | 
				
			||||||
		"setDelim":    "=",
 | 
							"=",
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"emacs": {
 | 
						"emacs": shellData{
 | 
				
			||||||
		"Prefix":      "(setenv \"",
 | 
							"(setenv \"",
 | 
				
			||||||
		"Suffix":      "\")\n",
 | 
							"\")\n",
 | 
				
			||||||
		"Delimiter":   "\" \"",
 | 
							"\" \"",
 | 
				
			||||||
		"UnsetPrefix": "(setenv \"",
 | 
							"(setenv \"",
 | 
				
			||||||
		"UnsetSuffix": ")\n",
 | 
							")\n",
 | 
				
			||||||
		"UnsetDelim":  "\" nil",
 | 
							"\" nil",
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"bash": {
 | 
						"bash": shellData{
 | 
				
			||||||
		"Prefix":      "export ",
 | 
							"export ",
 | 
				
			||||||
		"Suffix":      "\"\n",
 | 
							"\"\n",
 | 
				
			||||||
		"Delimiter":   "=\"",
 | 
							"=\"",
 | 
				
			||||||
		"UnsetPrefix": "unset ",
 | 
							"unset ",
 | 
				
			||||||
		"UnsetSuffix": "\n",
 | 
							"\n",
 | 
				
			||||||
 | 
							"=\"",
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"none": {
 | 
						"none": shellData{
 | 
				
			||||||
		"Prefix":    "",
 | 
							"",
 | 
				
			||||||
		"Suffix":    "\n",
 | 
							"\n",
 | 
				
			||||||
		"Delimiter": "=",
 | 
							"=",
 | 
				
			||||||
 | 
							"",
 | 
				
			||||||
 | 
							"\n",
 | 
				
			||||||
 | 
							"=",
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -127,7 +142,7 @@ func CfgSet(ec EnvConfig, plz, cmd string) *Config {
 | 
				
			||||||
		shellKey = "bash"
 | 
							shellKey = "bash"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	shellParams := shellConfigMap[shellKey]
 | 
						shellParams := shellConfigMap[shellKey]
 | 
				
			||||||
	s.Suffix, s.Prefix, s.Delimiter = shellParams["Suffix"], shellParams["Prefix"], shellParams["Delimiter"]
 | 
						s.Suffix, s.Prefix, s.Delimiter = shellParams.Suffix, shellParams.Prefix, shellParams.Delimiter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if shellKey != "none" {
 | 
						if shellKey != "none" {
 | 
				
			||||||
		s.UsageHint = generateUsageHint(ec.Shell, plz, cmd)
 | 
							s.UsageHint = generateUsageHint(ec.Shell, plz, cmd)
 | 
				
			||||||
| 
						 | 
					@ -151,16 +166,22 @@ func SetScript(ec EnvConfig, w io.Writer, envTmpl string, data interface{}) erro
 | 
				
			||||||
func UnsetScript(ec EnvConfig, w io.Writer, vars []string) error {
 | 
					func UnsetScript(ec EnvConfig, w io.Writer, vars []string) error {
 | 
				
			||||||
	var sb strings.Builder
 | 
						var sb strings.Builder
 | 
				
			||||||
	shCfg := shellConfigMap[ec.Shell]
 | 
						shCfg := shellConfigMap[ec.Shell]
 | 
				
			||||||
	pfx, sfx, delim := shCfg["Prefix"], shCfg["Suffix"], shCfg["Delimiter"]
 | 
						pfx, sfx, delim := shCfg.UnsetPrefix, shCfg.UnsetSuffix, shCfg.UnsetDelimiter
 | 
				
			||||||
	switch ec.Shell {
 | 
						switch ec.Shell {
 | 
				
			||||||
	case "cmd", "emacs", "fish":
 | 
						case "cmd", "emacs", "fish":
 | 
				
			||||||
		for _, v := range vars {
 | 
							for _, v := range vars {
 | 
				
			||||||
			sb.WriteString(fmt.Sprintf("%s%s%s%s", pfx, v, delim, sfx))
 | 
								if _, err := sb.WriteString(fmt.Sprintf("%s%s%s%s", pfx, v, delim, sfx)); err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	case "powershell":
 | 
						case "powershell":
 | 
				
			||||||
		sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " Env:\\\\"), sfx))
 | 
							if _, err := sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " Env:\\\\"), sfx)); err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " "), sfx))
 | 
							if _, err := sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " "), sfx)); err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err := w.Write([]byte(sb.String()))
 | 
						_, err := w.Write([]byte(sb.String()))
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,8 +68,8 @@ func TestUnsetScript(t *testing.T) {
 | 
				
			||||||
		ec       EnvConfig
 | 
							ec       EnvConfig
 | 
				
			||||||
		expected string
 | 
							expected string
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{[]string{"foo"}, EnvConfig{"bash"}, `export foo"`},
 | 
							{[]string{"foo"}, EnvConfig{"bash"}, `unset foo`},
 | 
				
			||||||
		{[]string{"bar"}, EnvConfig{"powershell"}, `$Env:bar"`},
 | 
							{[]string{"bar"}, EnvConfig{"powershell"}, `Remove-Item Env:\\bar`},
 | 
				
			||||||
		{[]string{"baz"}, EnvConfig{"cmd"}, `SET baz=`},
 | 
							{[]string{"baz"}, EnvConfig{"cmd"}, `SET baz=`},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for _, tc := range testCases {
 | 
						for _, tc := range testCases {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue