Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 49 additions & 2 deletions pkg/core/model/args_auto_map.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func autoMapArg2EnvForCmd(
targetCmd *Cmd,
stackDepth int) (done bool) {

targetCmd.GetArgsAutoMapStatus().MarkMet(srcCmd)
targetCmd.GetArgsAutoMapStatus().MarkMetWithArgv(srcCmd, argv)
if !srcCmd.HasSubFlow(true) {
return false
}
Expand All @@ -50,6 +50,10 @@ func autoMapArg2EnvForCmd(
flowEnv := env.NewLayer(EnvLayerSubFlow)
parsedFlow.GlobalEnv.WriteNotArgTo(flowEnv, cc.Cmds.Strs.EnvValDelAllMark)

for key := range parsedFlow.GlobalEnv {
targetCmd.GetArgsAutoMapStatus().RecordGlobalEnvKey(key)
}

return autoMapArg2EnvForCmdsInFlow(cc, flowEnv, parsedFlow, 0, envOpCmds, targetCmd, stackDepth)
}

Expand Down Expand Up @@ -83,9 +87,15 @@ func autoMapArg2EnvForCmdsInFlow(
return true
}

TryExeEnvOpCmds(argv, cc, cmdEnv, flow, i, envOpCmds, nil,
var checker EnvOpsChecker
checker = EnvOpsChecker{}
TryExeEnvOpCmds(argv, cc, cmdEnv, flow, i, envOpCmds, &checker,
"failed to execute env op-cmd in depends collecting")

for key := range checker {
targetCmd.GetArgsAutoMapStatus().RecordGlobalEnvKey(key)
}

//println(cic.Owner().DisplayPath(), " (arg2env) =>", targetCmd.Owner().DisplayPath())
targetCmd.AddArg2EnvFromAnotherCmd(cic)
if targetCmd.GetArgsAutoMapStatus().FullyMapped() {
Expand Down Expand Up @@ -216,6 +226,14 @@ func (self *ArgsAutoMapStatus) MarkMet(srcCmd *Cmd) {
self.recordProvidedKeys(srcCmd)
}

func (self *ArgsAutoMapStatus) MarkMetWithArgv(srcCmd *Cmd, argv ArgVals) {
if _, ok := self.metCmds[srcCmd]; ok {
return
}
self.metCmds[srcCmd] = true
self.recordProvidedKeysWithArgv(srcCmd, argv)
}

func (self *ArgsAutoMapStatus) FullyMappedOrMapAll() bool {
if self.mapAll || self.mapNoProvider {
return true
Expand Down Expand Up @@ -373,4 +391,33 @@ func (self *ArgsAutoMapStatus) recordProvidedKeys(srcCmd *Cmd) {
for _, key := range envOps.AllWriteKeys() {
self.providedKeys[key] = true
}

val2env := srcCmd.GetVal2Env()
for _, key := range val2env.EnvKeys() {
self.providedKeys[key] = true
}
}

func (self *ArgsAutoMapStatus) recordProvidedKeysWithArgv(srcCmd *Cmd, argv ArgVals) {
envOps := srcCmd.EnvOps()
for _, key := range envOps.AllWriteKeys() {
self.providedKeys[key] = true
}

val2env := srcCmd.GetVal2Env()
for _, key := range val2env.EnvKeys() {
self.providedKeys[key] = true
}

arg2env := srcCmd.GetArg2Env()
for _, envKey := range arg2env.EnvKeys() {
argName := arg2env.GetArgName(srcCmd, envKey, true)
if val, ok := argv[argName]; ok && val.Provided {
self.providedKeys[envKey] = true
}
}
}

func (self *ArgsAutoMapStatus) RecordGlobalEnvKey(key string) {
self.providedKeys[key] = true
}
Loading