// RunCommand runs a command with the specified args. The returned error // may come from either the parsing of the args, the command initialisation, or // the actual running of the command. Access to the resulting output streams // is provided through the returned context instance. func RunCommand(c *gc.C, com cmd.Command, args ...string) (*cmd.Context, error) { if err := InitCommand(com, args); err != nil { return nil, err } var context = Context(c) return context, com.Run(context) }
// RunCommandInDir works like RunCommand, but runs with a context that uses dir. func RunCommandInDir(c *gc.C, com cmd.Command, args []string, dir string) (*cmd.Context, error) { if err := InitCommand(com, args); err != nil { return nil, err } var context = ContextForDir(c, dir) return context, com.Run(context) }
func runCommand(ctx *cmd.Context, com cmd.Command, args ...string) (opc chan dummy.Operation, errc chan error) { if ctx == nil { panic("ctx == nil") } errc = make(chan error, 1) opc = make(chan dummy.Operation, 200) dummy.Listen(opc) go func() { // signal that we're done with this ops channel. defer dummy.Listen(nil) err := coretesting.InitCommand(com, args) if err != nil { errc <- err return } err = com.Run(ctx) errc <- err }() return }