|
@@ -9,6 +9,7 @@ import (
|
|
"os"
|
|
"os"
|
|
"path/filepath"
|
|
"path/filepath"
|
|
"runtime"
|
|
"runtime"
|
|
|
|
+ "sort"
|
|
"strings"
|
|
"strings"
|
|
)
|
|
)
|
|
|
|
|
|
@@ -110,6 +111,12 @@ func New(root string) (*Engine, error) {
|
|
Stderr: os.Stderr,
|
|
Stderr: os.Stderr,
|
|
Stdin: os.Stdin,
|
|
Stdin: os.Stdin,
|
|
}
|
|
}
|
|
|
|
+ eng.Register("commands", func(job *Job) Status {
|
|
|
|
+ for _, name := range eng.commands() {
|
|
|
|
+ job.Printf("%s\n", name)
|
|
|
|
+ }
|
|
|
|
+ return StatusOK
|
|
|
|
+ })
|
|
// Copy existing global handlers
|
|
// Copy existing global handlers
|
|
for k, v := range globalHandlers {
|
|
for k, v := range globalHandlers {
|
|
eng.handlers[k] = v
|
|
eng.handlers[k] = v
|
|
@@ -121,6 +128,17 @@ func (eng *Engine) String() string {
|
|
return fmt.Sprintf("%s|%s", eng.Root(), eng.id[:8])
|
|
return fmt.Sprintf("%s|%s", eng.Root(), eng.id[:8])
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// Commands returns a list of all currently registered commands,
|
|
|
|
+// sorted alphabetically.
|
|
|
|
+func (eng *Engine) commands() []string {
|
|
|
|
+ names := make([]string, 0, len(eng.handlers))
|
|
|
|
+ for name := range eng.handlers {
|
|
|
|
+ names = append(names, name)
|
|
|
|
+ }
|
|
|
|
+ sort.Strings(names)
|
|
|
|
+ return names
|
|
|
|
+}
|
|
|
|
+
|
|
// Job creates a new job which can later be executed.
|
|
// Job creates a new job which can later be executed.
|
|
// This function mimics `Command` from the standard os/exec package.
|
|
// This function mimics `Command` from the standard os/exec package.
|
|
func (eng *Engine) Job(name string, args ...string) *Job {
|
|
func (eng *Engine) Job(name string, args ...string) *Job {
|