fix(init): removed unnecessary error message when waiting for child process; race with wait all
fix(exec): fallback to os.Args when no delimiter found fix(pidproxy): fallback to os.Args when no delimiter found fix(splitargs): return full selfArgs fix(experiment/starter): replaced bool no-wait with count test(docker/bookworm-newconfig): added test for background process + pid proxy
This commit is contained in:
@@ -23,7 +23,7 @@ func SplitArgs(args []string) ([]string, []string, error) {
|
||||
return nil, nil, errors.New("invalid argument")
|
||||
}
|
||||
|
||||
selfArgs = args[1:i]
|
||||
selfArgs = args[:i]
|
||||
childArgs = args[i+1:]
|
||||
break
|
||||
}
|
||||
|
||||
@@ -71,11 +71,13 @@ func main() {
|
||||
|
||||
app.version.Cmd(rootCmd)
|
||||
|
||||
selfArgs, childArgs, err = cli.SplitArgs(os.Args)
|
||||
if selfArgs, childArgs, err = cli.SplitArgs(os.Args); err != nil {
|
||||
selfArgs = os.Args
|
||||
}
|
||||
app.childArgs = childArgs
|
||||
app.err = err
|
||||
|
||||
rootCmd.SetArgs(selfArgs)
|
||||
rootCmd.SetArgs(selfArgs[1:])
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
log.Println(err)
|
||||
os.Exit(1)
|
||||
|
||||
@@ -35,24 +35,26 @@ func main() {
|
||||
)
|
||||
if selfArgs, childArgs, err = cli.SplitArgs(os.Args); err == nil {
|
||||
flagSet = pflag.NewFlagSet(selfArgs[0], pflag.ExitOnError)
|
||||
flagSet.Bool(NoWaitFlag, false, "do not wait for the child process")
|
||||
flagSet.Count(NoWaitFlag, "do not wait for the child process")
|
||||
if err = flagSet.Parse(selfArgs[1:]); err != nil {
|
||||
log.Printf("invalid argument: %+v", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
flagSet = pflag.NewFlagSet(os.Args[0], pflag.ExitOnError)
|
||||
flagSet.Bool(NoWaitFlag, false, "do not wait for the child process")
|
||||
if err = flagSet.Parse(selfArgs[1:]); err != nil {
|
||||
flagSet.Count(NoWaitFlag, "do not wait for the child process")
|
||||
if err = flagSet.Parse(os.Args[1:]); err != nil {
|
||||
log.Printf("invalid argument: %+v", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
viper.BindPFlag(NoWaitFlag, flagSet.Lookup(NoWaitFlag))
|
||||
noWait = viper.GetBool(NoWaitFlag)
|
||||
_ = viper.BindPFlag(NoWaitFlag, flagSet.Lookup(NoWaitFlag))
|
||||
if viper.GetInt(NoWaitFlag) > 0 {
|
||||
noWait = true
|
||||
}
|
||||
|
||||
viper.SetEnvPrefix(wingmate.EnvPrefix)
|
||||
viper.BindEnv(EnvDummyPath)
|
||||
_ = viper.BindEnv(EnvDummyPath)
|
||||
viper.SetDefault(EnvDummyPath, DummyPath)
|
||||
|
||||
exePath = viper.GetString(EnvDummyPath)
|
||||
|
||||
@@ -58,21 +58,23 @@ func main() {
|
||||
}
|
||||
|
||||
viper.SetEnvPrefix(wingmate.EnvPrefix)
|
||||
viper.BindEnv(EnvStartSecs)
|
||||
_ = viper.BindEnv(EnvStartSecs)
|
||||
viper.SetDefault(EnvStartSecs, EnvDefaultStartSecs)
|
||||
|
||||
rootCmd.PersistentFlags().StringP(pidFileFlag, "p", "", "location of pid file")
|
||||
rootCmd.MarkFlagRequired(pidFileFlag)
|
||||
viper.BindPFlag(pidFileFlag, rootCmd.PersistentFlags().Lookup(pidFileFlag))
|
||||
_ = rootCmd.MarkFlagRequired(pidFileFlag)
|
||||
_ = viper.BindPFlag(pidFileFlag, rootCmd.PersistentFlags().Lookup(pidFileFlag))
|
||||
|
||||
app.version.Flag(rootCmd)
|
||||
app.version.Cmd(rootCmd)
|
||||
|
||||
selfArgs, childArgs, err = cli.SplitArgs(os.Args)
|
||||
if selfArgs, childArgs, err = cli.SplitArgs(os.Args); err != nil {
|
||||
selfArgs = os.Args
|
||||
}
|
||||
app.childArgs = childArgs
|
||||
app.err = err
|
||||
|
||||
rootCmd.SetArgs(selfArgs)
|
||||
rootCmd.SetArgs(selfArgs[1:])
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
log.Println(err)
|
||||
os.Exit(1)
|
||||
@@ -111,7 +113,10 @@ check:
|
||||
}
|
||||
|
||||
if err = unix.Kill(pid, syscall.Signal(0)); err != nil {
|
||||
return err
|
||||
if !errors.Is(err, unix.ESRCH) {
|
||||
return err
|
||||
}
|
||||
break check
|
||||
}
|
||||
|
||||
select {
|
||||
|
||||
Reference in New Issue
Block a user