mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
updates for new shellvars
This commit is contained in:
+14
-14
@@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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" {
|
||||||
|
|||||||
Reference in New Issue
Block a user