forked from rosa/hakurei
cmd/app: optionally override configured command
Useful for multiple applications sharing state. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
+1
-1
@@ -80,7 +80,7 @@ func parse(id string, base *check.Absolute, r io.Reader) (*hst.Config, error) {
|
|||||||
Shell: shell,
|
Shell: shell,
|
||||||
Home: home,
|
Home: home,
|
||||||
Path: shell,
|
Path: shell,
|
||||||
Args: []string{"zsh", "-c"},
|
Args: []string{"zsh", "-ic"},
|
||||||
|
|
||||||
Flags: hst.FCoverRun,
|
Flags: hst.FCoverRun,
|
||||||
},
|
},
|
||||||
|
|||||||
+1
-1
@@ -118,7 +118,7 @@ talk com.canonical.Unity
|
|||||||
Home: hst.AbsPrivateTmp.Append("home"),
|
Home: hst.AbsPrivateTmp.Append("home"),
|
||||||
Path: fhs.AbsRoot.Append("bin", "zsh"),
|
Path: fhs.AbsRoot.Append("bin", "zsh"),
|
||||||
Args: []string{
|
Args: []string{
|
||||||
"zsh", "-c",
|
"zsh", "-ic",
|
||||||
"exec Discord --ozone-platform-hint=wayland",
|
"exec Discord --ozone-platform-hint=wayland",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
+56
-42
@@ -141,57 +141,71 @@ func main() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.NewCommand(
|
{
|
||||||
"run", "Start the named application",
|
var (
|
||||||
func(args []string) error {
|
flagCommand string
|
||||||
if len(args) != 1 {
|
)
|
||||||
dents, err := os.ReadDir(base.Append("app").String())
|
c.NewCommand(
|
||||||
|
"run", "Start the named application",
|
||||||
|
func(args []string) error {
|
||||||
|
if len(args) != 1 {
|
||||||
|
dents, err := os.ReadDir(base.Append("app").String())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, dent := range dents {
|
||||||
|
if dent.IsDir() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fmt.Println(dent.Name())
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var config *hst.Config
|
||||||
|
var r io.Reader
|
||||||
|
f, err := os.Open(base.Append("app", args[0]).String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, dent := range dents {
|
r = f
|
||||||
if dent.IsDir() {
|
|
||||||
continue
|
var common *os.File
|
||||||
|
if common, err = os.Open(base.Append("common").String()); err != nil {
|
||||||
|
if !errors.Is(err, os.ErrNotExist) {
|
||||||
|
_ = f.Close()
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
fmt.Println(dent.Name())
|
} else {
|
||||||
|
r = io.MultiReader(f, common)
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var config *hst.Config
|
config, err = parse(args[0], base, r)
|
||||||
var r io.Reader
|
if closeErr := f.Close(); err == nil {
|
||||||
f, err := os.Open(base.Append("app", args[0]).String())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
r = f
|
|
||||||
|
|
||||||
var common *os.File
|
|
||||||
if common, err = os.Open(base.Append("common").String()); err != nil {
|
|
||||||
if !errors.Is(err, os.ErrNotExist) {
|
|
||||||
_ = f.Close()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
r = io.MultiReader(f, common)
|
|
||||||
}
|
|
||||||
|
|
||||||
config, err = parse(args[0], base, r)
|
|
||||||
if closeErr := f.Close(); err == nil {
|
|
||||||
err = closeErr
|
|
||||||
}
|
|
||||||
if common != nil {
|
|
||||||
if closeErr := common.Close(); err == nil {
|
|
||||||
err = closeErr
|
err = closeErr
|
||||||
}
|
}
|
||||||
}
|
if common != nil {
|
||||||
if err != nil {
|
if closeErr := common.Close(); err == nil {
|
||||||
return err
|
err = closeErr
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return run(ctx, msg, config)
|
if flagCommand != "" {
|
||||||
},
|
config.Container.Args[2] = flagCommand
|
||||||
)
|
}
|
||||||
|
|
||||||
|
return run(ctx, msg, config)
|
||||||
|
},
|
||||||
|
).
|
||||||
|
Flag(
|
||||||
|
&flagCommand,
|
||||||
|
"command", command.StringFlag(""),
|
||||||
|
"Override configured command",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
c.MustParse(os.Args[1:], func(err error) {
|
c.MustParse(os.Args[1:], func(err error) {
|
||||||
if e, ok := errors.AsType[*exec.ExitError](err); ok && e != nil {
|
if e, ok := errors.AsType[*exec.ExitError](err); ok && e != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user