feat(commands): refactor and add more commands
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
package dev
|
||||
|
||||
import (
|
||||
"github.com/versenilvis/iris/commands/core"
|
||||
)
|
||||
|
||||
func init() {
|
||||
core.Register(&core.Spec{
|
||||
Name: "cargo",
|
||||
Description: "rust toolchain",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "build", Description: "compile project",
|
||||
Options: []core.Option{
|
||||
{Name: "--release", Description: "optimized build"},
|
||||
},
|
||||
},
|
||||
{Name: "run", Description: "run project"},
|
||||
{Name: "test", Description: "run tests"},
|
||||
{Name: "new", Description: "create project"},
|
||||
{Name: "add", Description: "add dependency"},
|
||||
{Name: "fmt", Description: "format code"},
|
||||
{Name: "clippy", Description: "lint code"},
|
||||
{Name: "check", Description: "check without build"},
|
||||
{Name: "clean", Description: "remove build artifacts"},
|
||||
{Name: "publish", Description: "publish crate"},
|
||||
{Name: "doc", Description: "build documentation"},
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package dev
|
||||
|
||||
import (
|
||||
"github.com/versenilvis/iris/commands/core"
|
||||
)
|
||||
|
||||
func init() {
|
||||
core.Register(&core.Spec{
|
||||
Name: "docker",
|
||||
Description: "container engine",
|
||||
Subcommands: []core.Subcommand{
|
||||
{
|
||||
Name: "ps",
|
||||
Description: "list containers",
|
||||
Options: []core.Option{
|
||||
{Name: "-a", Description: "show all"},
|
||||
{Name: "-q", Description: "only show IDs"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "build",
|
||||
Description: "build image",
|
||||
Options: []core.Option{
|
||||
{Name: "-t", Description: "tag name"},
|
||||
{Name: "-f", Description: "dockerfile path"},
|
||||
{Name: "--no-cache", Description: "no build cache"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "run",
|
||||
Description: "run container",
|
||||
Options: []core.Option{
|
||||
{Name: "-d", Description: "detached mode"},
|
||||
{Name: "-p", Description: "port mapping"},
|
||||
{Name: "-v", Description: "volume mount"},
|
||||
{Name: "--rm", Description: "auto remove"},
|
||||
{Name: "--name", Description: "container name"},
|
||||
{Name: "-it", Description: "interactive tty"},
|
||||
{Name: "-e", Description: "set env variable"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "pull",
|
||||
Description: "pull image",
|
||||
},
|
||||
{
|
||||
Name: "push",
|
||||
Description: "push image",
|
||||
},
|
||||
{
|
||||
Name: "exec",
|
||||
Description: "exec in container",
|
||||
Options: []core.Option{
|
||||
{Name: "-it", Description: "interactive tty"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "stop",
|
||||
Description: "stop container",
|
||||
},
|
||||
{
|
||||
Name: "rm",
|
||||
Description: "remove container",
|
||||
Options: []core.Option{
|
||||
{Name: "-f", Description: "force remove"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "rmi",
|
||||
Description: "remove image",
|
||||
},
|
||||
{
|
||||
Name: "images",
|
||||
Description: "list images",
|
||||
},
|
||||
{
|
||||
Name: "logs",
|
||||
Description: "view logs",
|
||||
Options: []core.Option{
|
||||
{Name: "-f", Description: "follow output"},
|
||||
{Name: "--tail", Description: "last n lines"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "compose",
|
||||
Description: "multi-container",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "up", Description: "start services"},
|
||||
{Name: "down", Description: "stop services"},
|
||||
{Name: "build", Description: "build services"},
|
||||
{Name: "logs", Description: "view logs"},
|
||||
{Name: "ps", Description: "list services"},
|
||||
{Name: "exec", Description: "execute command"},
|
||||
{Name: "restart", Description: "restart services"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "network",
|
||||
Description: "manage networks",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "ls", Description: "list networks"},
|
||||
{Name: "create", Description: "create network"},
|
||||
{Name: "rm", Description: "remove network"},
|
||||
{Name: "inspect", Description: "show details"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "volume",
|
||||
Description: "manage volumes",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "ls", Description: "list volumes"},
|
||||
{Name: "create", Description: "create volume"},
|
||||
{Name: "rm", Description: "remove volume"},
|
||||
{Name: "prune", Description: "remove unused"},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
package dev
|
||||
|
||||
import (
|
||||
"github.com/versenilvis/iris/commands/core"
|
||||
)
|
||||
|
||||
func init() {
|
||||
core.Register(&core.Spec{
|
||||
Name: "git",
|
||||
Description: "version control",
|
||||
Options: []core.Option{
|
||||
{Name: "--version", Description: "print version"},
|
||||
{Name: "--help", Description: "show help"},
|
||||
},
|
||||
Subcommands: []core.Subcommand{
|
||||
{
|
||||
Name: "init",
|
||||
Description: "create empty repo",
|
||||
Options: []core.Option{
|
||||
{Name: "--bare", Description: "create bare repo"},
|
||||
{Name: "-b", Description: "initial branch name"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "clone",
|
||||
Description: "clone a repository",
|
||||
Options: []core.Option{
|
||||
{Name: "--depth", Description: "shallow clone depth"},
|
||||
{Name: "--branch", Description: "specific branch"},
|
||||
{Name: "--bare", Description: "clone as bare"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "status",
|
||||
Description: "show working tree",
|
||||
Options: []core.Option{
|
||||
{Name: "-s", Description: "short format"},
|
||||
{Name: "--porcelain", Description: "machine format"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "add",
|
||||
Description: "stage changes",
|
||||
Generator: core.FileGenerator(),
|
||||
Options: []core.Option{
|
||||
{Name: "-A", Description: "add all files"},
|
||||
{Name: "-p", Description: "interactive patch"},
|
||||
{Name: ".", Description: "add current dir"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "commit",
|
||||
Description: "record changes",
|
||||
Options: []core.Option{
|
||||
{Name: "-m", Description: "commit message"},
|
||||
{Name: "-a", Description: "auto stage tracked"},
|
||||
{Name: "--amend", Description: "amend last commit"},
|
||||
{Name: "--no-edit", Description: "keep message"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "push",
|
||||
Description: "update remote refs",
|
||||
Options: []core.Option{
|
||||
{Name: "-u", Description: "set upstream"},
|
||||
{Name: "--force", Description: "force push"},
|
||||
{Name: "--tags", Description: "push tags"},
|
||||
{Name: "origin", Description: "default remote"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "pull",
|
||||
Description: "fetch and merge",
|
||||
Options: []core.Option{
|
||||
{Name: "--rebase", Description: "rebase on pull"},
|
||||
{Name: "origin", Description: "default remote"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "fetch",
|
||||
Description: "download objects",
|
||||
Options: []core.Option{
|
||||
{Name: "--all", Description: "fetch all remotes"},
|
||||
{Name: "--prune", Description: "remove stale refs"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "checkout",
|
||||
Description: "switch branches",
|
||||
Options: []core.Option{
|
||||
{Name: "-b", Description: "create new branch"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "switch",
|
||||
Description: "switch branches",
|
||||
Options: []core.Option{
|
||||
{Name: "-c", Description: "create and switch"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "branch",
|
||||
Description: "manage branches",
|
||||
Options: []core.Option{
|
||||
{Name: "-d", Description: "delete branch"},
|
||||
{Name: "-D", Description: "force delete"},
|
||||
{Name: "-a", Description: "list all"},
|
||||
{Name: "-m", Description: "rename branch"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "merge",
|
||||
Description: "join branches",
|
||||
Options: []core.Option{
|
||||
{Name: "--no-ff", Description: "no fast forward"},
|
||||
{Name: "--squash", Description: "squash commits"},
|
||||
{Name: "--abort", Description: "abort merge"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "rebase",
|
||||
Description: "reapply commits",
|
||||
Options: []core.Option{
|
||||
{Name: "-i", Description: "interactive"},
|
||||
{Name: "--onto", Description: "rebase onto"},
|
||||
{Name: "--abort", Description: "abort rebase"},
|
||||
{Name: "--continue", Description: "continue rebase"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "log",
|
||||
Description: "show commit log",
|
||||
Options: []core.Option{
|
||||
{Name: "--oneline", Description: "compact format"},
|
||||
{Name: "--graph", Description: "show graph"},
|
||||
{Name: "-n", Description: "limit count"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "diff",
|
||||
Description: "show changes",
|
||||
Options: []core.Option{
|
||||
{Name: "--staged", Description: "staged changes"},
|
||||
{Name: "--stat", Description: "diffstat only"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "stash",
|
||||
Description: "stash changes",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "pop", Description: "apply and drop"},
|
||||
{Name: "apply", Description: "apply stash"},
|
||||
{Name: "drop", Description: "remove stash"},
|
||||
{Name: "list", Description: "list stashes"},
|
||||
{Name: "show", Description: "show stash diff"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "reset",
|
||||
Description: "reset HEAD",
|
||||
Options: []core.Option{
|
||||
{Name: "--hard", Description: "discard changes"},
|
||||
{Name: "--soft", Description: "keep staged"},
|
||||
{Name: "--mixed", Description: "unstage changes"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "tag",
|
||||
Description: "manage tags",
|
||||
Options: []core.Option{
|
||||
{Name: "-a", Description: "annotated tag"},
|
||||
{Name: "-d", Description: "delete tag"},
|
||||
{Name: "-l", Description: "list tags"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "remote",
|
||||
Description: "manage remotes",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "add", Description: "add remote"},
|
||||
{Name: "remove", Description: "remove remote"},
|
||||
{Name: "rename", Description: "rename remote"},
|
||||
{Name: "-v", Description: "verbose list"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "cherry-pick",
|
||||
Description: "apply commit",
|
||||
Options: []core.Option{
|
||||
{Name: "--no-commit", Description: "no auto commit"},
|
||||
{Name: "--abort", Description: "abort pick"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "bisect",
|
||||
Description: "binary search bug",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "start", Description: "start bisect"},
|
||||
{Name: "good", Description: "mark good"},
|
||||
{Name: "bad", Description: "mark bad"},
|
||||
{Name: "reset", Description: "end bisect"},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package dev
|
||||
|
||||
import (
|
||||
"github.com/versenilvis/iris/commands/core"
|
||||
)
|
||||
|
||||
func init() {
|
||||
globalBuildOptions := []core.Option{
|
||||
{Name: "-v", Description: "print package names"},
|
||||
{Name: "-n", Description: "print commands but do not run"},
|
||||
{Name: "-x", Description: "print commands as they run"},
|
||||
{Name: "-race", Description: "enable data race detection"},
|
||||
{Name: "-tags", Description: "comma-separated build tags"},
|
||||
{Name: "-ldflags", Description: "arguments to pass to linker"},
|
||||
{Name: "-gcflags", Description: "arguments to pass to compiler"},
|
||||
{Name: "-asmflags", Description: "arguments to pass to assembler"},
|
||||
{Name: "-compiler", Description: "name of compiler to use (gccgo or gc)"},
|
||||
{Name: "-work", Description: "print temporary work directory"},
|
||||
{Name: "-mod", Description: "module download mode (readonly, vendor, or mod)"},
|
||||
{Name: "-trimpath", Description: "remove file system paths from executable"},
|
||||
{Name: "-p", Description: "number of programs to run in parallel"},
|
||||
{Name: "-a", Description: "force rebuilding of up-to-date packages"},
|
||||
}
|
||||
|
||||
buildModeSubcommands := []core.Subcommand{
|
||||
{Name: "archive", Description: "build non-main packages into .a files"},
|
||||
{Name: "c-archive", Description: "build main package into C archive"},
|
||||
{Name: "c-shared", Description: "build main package into C shared library"},
|
||||
{Name: "exe", Description: "build main packages into executables"},
|
||||
{Name: "pie", Description: "build position independent executables"},
|
||||
{Name: "plugin", Description: "build main packages into Go plugin"},
|
||||
{Name: "shared", Description: "combine packages into single shared library"},
|
||||
}
|
||||
|
||||
core.Register(&core.Spec{
|
||||
Name: "go",
|
||||
Description: "tool for managing Go source code",
|
||||
Subcommands: []core.Subcommand{
|
||||
{
|
||||
Name: "build",
|
||||
Description: "compile packages and dependencies",
|
||||
Generator: core.FileGenerator(".go"),
|
||||
Options: append(globalBuildOptions,
|
||||
core.Option{Name: ".", Description: "current package"},
|
||||
core.Option{Name: "./...", Description: "all packages"},
|
||||
core.Option{Name: "-o", Description: "output file or directory"},
|
||||
core.Option{Name: "-i", Description: "install dependency packages"},
|
||||
core.Option{Name: "-buildmode", Description: "build mode to use"},
|
||||
),
|
||||
Subcommands: buildModeSubcommands,
|
||||
},
|
||||
{
|
||||
Name: "run",
|
||||
Description: "compile and run Go program",
|
||||
Generator: core.FileGenerator(".go"),
|
||||
Options: append(globalBuildOptions,
|
||||
core.Option{Name: ".", Description: "current package"},
|
||||
core.Option{Name: "-exec", Description: "invoke binary using xprog"},
|
||||
),
|
||||
},
|
||||
{
|
||||
Name: "test",
|
||||
Description: "test packages",
|
||||
Generator: core.FileGenerator(".go"),
|
||||
Options: append(globalBuildOptions,
|
||||
core.Option{Name: ".", Description: "current package"},
|
||||
core.Option{Name: "./...", Description: "all packages"},
|
||||
core.Option{Name: "-c", Description: "compile test binary but do not run"},
|
||||
core.Option{Name: "-i", Description: "install test dependencies"},
|
||||
core.Option{Name: "-json", Description: "convert output to JSON"},
|
||||
core.Option{Name: "-bench", Description: "run benchmarks"},
|
||||
core.Option{Name: "-run", Description: "run specific test regex"},
|
||||
core.Option{Name: "-cover", Description: "enable coverage report"},
|
||||
),
|
||||
},
|
||||
{
|
||||
Name: "mod",
|
||||
Description: "module maintenance",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "init", Description: "initialize new module"},
|
||||
{Name: "tidy", Description: "add missing and remove unused modules"},
|
||||
{Name: "download", Description: "download modules to local cache"},
|
||||
{Name: "vendor", Description: "make vendored copy of dependencies"},
|
||||
{Name: "edit", Description: "edit go.mod from tools or scripts"},
|
||||
{Name: "graph", Description: "print module requirement graph"},
|
||||
{Name: "verify", Description: "verify dependencies have expected content"},
|
||||
{Name: "why", Description: "explain why packages or modules are needed"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "get",
|
||||
Description: "add dependencies to current module and install them",
|
||||
Options: append(globalBuildOptions,
|
||||
core.Option{Name: "-u", Description: "update to newer minor/patch releases"},
|
||||
core.Option{Name: "-t", Description: "download modules needed for tests"},
|
||||
core.Option{Name: "-d", Description: "only download, do not install"},
|
||||
),
|
||||
},
|
||||
{
|
||||
Name: "install",
|
||||
Description: "compile and install packages and dependencies",
|
||||
Options: globalBuildOptions,
|
||||
},
|
||||
{
|
||||
Name: "list",
|
||||
Description: "list packages or modules",
|
||||
Options: append(globalBuildOptions,
|
||||
core.Option{Name: "-m", Description: "list modules instead of packages"},
|
||||
core.Option{Name: "-u", Description: "add upgrade information"},
|
||||
core.Option{Name: "-json", Description: "print in JSON format"},
|
||||
core.Option{Name: "-f", Description: "specify alternate format"},
|
||||
),
|
||||
},
|
||||
{
|
||||
Name: "fmt",
|
||||
Description: "gofmt (reformat) package sources",
|
||||
Options: []core.Option{
|
||||
{Name: "-n", Description: "print commands that would be executed"},
|
||||
{Name: "-x", Description: "print commands as they are executed"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "vet",
|
||||
Description: "report likely mistakes in packages",
|
||||
Options: globalBuildOptions,
|
||||
},
|
||||
{
|
||||
Name: "env",
|
||||
Description: "print Go environment information",
|
||||
Options: []core.Option{
|
||||
{Name: "-json", Description: "print environment in JSON format"},
|
||||
{Name: "-u", Description: "unset named environment variables"},
|
||||
{Name: "-w", Description: "change default settings of environment variables"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "version",
|
||||
Description: "print Go version",
|
||||
Options: []core.Option{
|
||||
{Name: "-m", Description: "print embedded module version info"},
|
||||
{Name: "-v", Description: "report unrecognized files"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "clean",
|
||||
Description: "remove object files and cached files",
|
||||
Options: append(globalBuildOptions,
|
||||
core.Option{Name: "-i", Description: "remove installed archive or binary"},
|
||||
core.Option{Name: "-cache", Description: "remove entire go build cache"},
|
||||
core.Option{Name: "-modcache", Description: "remove entire module cache"},
|
||||
),
|
||||
},
|
||||
{
|
||||
Name: "tool",
|
||||
Description: "run specified go tool",
|
||||
Options: []core.Option{
|
||||
{Name: "-n", Description: "print command but do not execute"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "work",
|
||||
Description: "workspace maintenance",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "init", Description: "initialize workspace file"},
|
||||
{Name: "edit", Description: "edit go.work from tools or scripts"},
|
||||
{Name: "sync", Description: "sync workspace build list to modules"},
|
||||
{Name: "use", Description: "add modules to workspace file"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "doc",
|
||||
Description: "show documentation for package or symbol",
|
||||
Options: []core.Option{
|
||||
{Name: "-all", Description: "show all documentation"},
|
||||
{Name: "-cmd", Description: "treat package main like regular package"},
|
||||
{Name: "-src", Description: "show full source code"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "bug",
|
||||
Description: "start a bug report",
|
||||
},
|
||||
{
|
||||
Name: "fix",
|
||||
Description: "update packages to use new APIs",
|
||||
},
|
||||
{
|
||||
Name: "generate",
|
||||
Description: "generate Go files by processing source",
|
||||
Options: globalBuildOptions,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package dev
|
||||
|
||||
import (
|
||||
"github.com/versenilvis/iris/commands/core"
|
||||
)
|
||||
|
||||
func init() {
|
||||
core.Register(&core.Spec{
|
||||
Name: "kubectl",
|
||||
Description: "kubernetes cli",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "get", Description: "display resources",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "pods", Description: "list pods"},
|
||||
{Name: "services", Description: "list services"},
|
||||
{Name: "deployments", Description: "list deployments"},
|
||||
{Name: "nodes", Description: "list nodes"},
|
||||
{Name: "namespaces", Description: "list namespaces"},
|
||||
},
|
||||
},
|
||||
{Name: "apply", Description: "apply config",
|
||||
Options: []core.Option{
|
||||
{Name: "-f", Description: "filename"},
|
||||
},
|
||||
},
|
||||
{Name: "describe", Description: "show details"},
|
||||
{Name: "logs", Description: "view pod logs",
|
||||
Options: []core.Option{
|
||||
{Name: "-f", Description: "follow logs"},
|
||||
},
|
||||
},
|
||||
{Name: "delete", Description: "delete resource"},
|
||||
{Name: "exec", Description: "execute in pod"},
|
||||
{Name: "port-forward", Description: "forward ports"},
|
||||
{Name: "scale", Description: "scale resource"},
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package dev
|
||||
|
||||
import (
|
||||
"github.com/versenilvis/iris/commands/core"
|
||||
)
|
||||
|
||||
func init() {
|
||||
core.Register(&core.Spec{
|
||||
Name: "npm",
|
||||
Description: "node packages",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "install", Description: "install packages"},
|
||||
{Name: "run", Description: "run script",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "dev", Description: "development server"},
|
||||
{Name: "build", Description: "build for production"},
|
||||
{Name: "start", Description: "start application"},
|
||||
{Name: "test", Description: "run test suite"},
|
||||
{Name: "lint", Description: "run linter"},
|
||||
},
|
||||
},
|
||||
{Name: "test", Description: "run tests"},
|
||||
{Name: "init", Description: "create package.json"},
|
||||
{Name: "publish", Description: "publish package"},
|
||||
{Name: "update", Description: "update packages"},
|
||||
{Name: "uninstall", Description: "remove package"},
|
||||
{Name: "ls", Description: "list installed"},
|
||||
{Name: "audit", Description: "security audit"},
|
||||
{Name: "cache", Description: "manage cache",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "clean", Description: "clear cache"},
|
||||
{Name: "verify", Description: "verify cache"},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package dev
|
||||
|
||||
import (
|
||||
"github.com/versenilvis/iris/commands/core"
|
||||
)
|
||||
|
||||
func init() {
|
||||
core.Register(&core.Spec{
|
||||
Name: "pip",
|
||||
Description: "python packages",
|
||||
Subcommands: []core.Subcommand{
|
||||
{Name: "install", Description: "install package"},
|
||||
{Name: "uninstall", Description: "remove package"},
|
||||
{Name: "freeze", Description: "list packages"},
|
||||
{Name: "list", Description: "list installed"},
|
||||
{Name: "show", Description: "show package info"},
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user