updates for new shellvars

This commit is contained in:
sawka
2022-10-25 12:31:29 -07:00
parent c9195b3cfd
commit cabf8a50ff
2 changed files with 15 additions and 15 deletions
+14 -14
View File
@@ -527,21 +527,21 @@ func UnSetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot unset: %v", err) return nil, fmt.Errorf("cannot unset: %v", err)
} }
envMap := shexec.ParseEnv0(ids.Remote.RemoteState.Env0) declMap := shexec.DeclMapFromState(ids.Remote.RemoteState)
unsetVars := make(map[string]bool) unsetVars := make(map[string]bool)
for _, argStr := range pk.Args { for _, argStr := range pk.Args {
eqIdx := strings.Index(argStr, "=") eqIdx := strings.Index(argStr, "=")
if eqIdx != -1 { if eqIdx != -1 {
return nil, fmt.Errorf("invalid argument to setenv, '%s' (cannot contain equal sign)", argStr) return nil, fmt.Errorf("invalid argument to setenv, '%s' (cannot contain equal sign)", argStr)
} }
delete(envMap, argStr) delete(declMap, argStr)
unsetVars[argStr] = true unsetVars[argStr] = true
} }
if len(unsetVars) == 0 { if len(unsetVars) == 0 {
return nil, fmt.Errorf("no variables provided to unset") return nil, fmt.Errorf("no variables provided to unset")
} }
state := *ids.Remote.RemoteState state := *ids.Remote.RemoteState
state.Env0 = shexec.MakeEnv0(envMap) state.ShellVars = shexec.SerializeDeclMap(declMap)
remoteInst, err := sstore.UpdateRemoteState(ctx, ids.SessionId, ids.WindowId, ids.Remote.RemotePtr, state) remoteInst, err := sstore.UpdateRemoteState(ctx, ids.SessionId, ids.WindowId, ids.Remote.RemotePtr, state)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -944,11 +944,11 @@ func SetEnvCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstor
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot setenv: %v", err) return nil, fmt.Errorf("cannot setenv: %v", err)
} }
envMap := shexec.ParseEnv0(ids.Remote.RemoteState.Env0) declMap := shexec.DeclMapFromState(ids.Remote.RemoteState)
if len(pk.Args) == 0 { if len(pk.Args) == 0 {
var infoLines []string var infoLines []string
for varName, varVal := range envMap { for _, decl := range declMap {
line := fmt.Sprintf("%s=%s", shellescape.Quote(varName), shellescape.Quote(varVal)) line := fmt.Sprintf("%s=%s", decl.Name, shellescape.Quote(decl.Value))
infoLines = append(infoLines, line) infoLines = append(infoLines, line)
} }
update := sstore.ModelUpdate{ update := sstore.ModelUpdate{
@@ -967,11 +967,11 @@ func SetEnvCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstor
} }
envName := argStr[:eqIdx] envName := argStr[:eqIdx]
envVal := argStr[eqIdx+1:] envVal := argStr[eqIdx+1:]
envMap[envName] = envVal declMap[envName] = &shexec.DeclareDeclType{Args: "x", Name: envName, Value: envVal}
setVars[envName] = true setVars[envName] = true
} }
state := *ids.Remote.RemoteState state := *ids.Remote.RemoteState
state.Env0 = shexec.MakeEnv0(envMap) state.ShellVars = shexec.SerializeDeclMap(declMap)
remoteInst, err := sstore.UpdateRemoteState(ctx, ids.SessionId, ids.WindowId, ids.Remote.RemotePtr, state) remoteInst, err := sstore.UpdateRemoteState(ctx, ids.SessionId, ids.WindowId, ids.Remote.RemotePtr, state)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -1816,19 +1816,19 @@ func displayStateUpdate(buf *bytes.Buffer, oldState packet.ShellState, newState
if newState.Cwd != oldState.Cwd { if newState.Cwd != oldState.Cwd {
buf.WriteString(fmt.Sprintf("cwd %s\r\n", newState.Cwd)) buf.WriteString(fmt.Sprintf("cwd %s\r\n", newState.Cwd))
} }
if !bytes.Equal(newState.Env0, oldState.Env0) { if !bytes.Equal(newState.ShellVars, oldState.ShellVars) {
newEnvMap := shexec.ParseEnv0(newState.Env0) newEnvMap := shexec.DeclMapFromState(&newState)
oldEnvMap := shexec.ParseEnv0(oldState.Env0) oldEnvMap := shexec.DeclMapFromState(&oldState)
for key, newVal := range newEnvMap { for key, newVal := range newEnvMap {
oldVal, found := oldEnvMap[key] oldVal, found := oldEnvMap[key]
if !found || oldVal != newVal { if !found || oldVal.Value != newVal.Value {
buf.WriteString(fmt.Sprintf("%s=%s\r\n", shellescape.Quote(key), shellescape.Quote(newVal))) buf.WriteString(fmt.Sprintf("%s=%s\r\n", key, shellescape.Quote(newVal.Value)))
} }
} }
for key, _ := range oldEnvMap { for key, _ := range oldEnvMap {
_, found := newEnvMap[key] _, found := newEnvMap[key]
if !found { if !found {
buf.WriteString(fmt.Sprintf("unset %s\r\n", shellescape.Quote(key))) buf.WriteString(fmt.Sprintf("unset %s\r\n", key))
} }
} }
} }
+1 -1
View File
@@ -1383,7 +1383,7 @@ func evalPromptEsc(escCode string, vars map[string]string, state *packet.ShellSt
return "" return ""
} }
varName := escCode[2 : len(escCode)-1] varName := escCode[2 : len(escCode)-1]
varMap := shexec.ParseEnv0(state.Env0) varMap := shexec.ShellVarMapFromState(state)
return varMap[varName] return varMap[varName]
} }
if escCode == "h" { if escCode == "h" {