fix(cmd/joj3): deep copy default values
All checks were successful
submodules sync / sync (push) Successful in 45s
build / build (push) Successful in 1m31s
build / trigger-build-image (push) Successful in 7s

This commit is contained in:
张泊明518370910136 2024-11-14 01:54:42 -05:00
parent 70804cdce2
commit 5efc3007e4
GPG Key ID: D47306D7062CDA9D

View File

@ -41,7 +41,11 @@ func generateStages(conf *conf.Conf, groups []string) ([]stage.Stage, error) {
defaultCmd := s.Executor.With.Default
for _, optionalCmd := range s.Executor.With.Cases {
cmd := s.Executor.With.Default
err := copier.Copy(&cmd, &optionalCmd)
err := copier.CopyWithOption(
&cmd,
&optionalCmd,
copier.Option{DeepCopy: true},
)
if err != nil {
slog.Error("generate stages", "error", err)
return stages, err
@ -49,13 +53,43 @@ func generateStages(conf *conf.Conf, groups []string) ([]stage.Stage, error) {
// since these 3 values are pointers, copier will always copy
// them, so we need to check them manually
if defaultCmd.Stdin != nil && optionalCmd.Stdin == nil {
cmd.Stdin = defaultCmd.Stdin
var stdin stage.CmdFile
err := copier.CopyWithOption(
&stdin,
defaultCmd.Stdin,
copier.Option{DeepCopy: true},
)
if err != nil {
slog.Error("generate stages", "error", err)
return stages, err
}
cmd.Stdin = &stdin
}
if defaultCmd.Stdout != nil && optionalCmd.Stdout == nil {
cmd.Stdout = defaultCmd.Stdout
var stdout stage.CmdFile
err := copier.CopyWithOption(
&stdout,
defaultCmd.Stdout,
copier.Option{DeepCopy: true},
)
if err != nil {
slog.Error("generate stages", "error", err)
return stages, err
}
cmd.Stdout = &stdout
}
if defaultCmd.Stderr != nil && optionalCmd.Stderr == nil {
cmd.Stderr = defaultCmd.Stderr
var stderr stage.CmdFile
err := copier.CopyWithOption(
&stderr,
defaultCmd.Stderr,
copier.Option{DeepCopy: true},
)
if err != nil {
slog.Error("generate stages", "error", err)
return stages, err
}
cmd.Stderr = &stderr
}
cmds = append(cmds, cmd)
}