mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-22 08:04:02 +08:00
cmd: Organize list-modules output; --packages flag (#3925)
This commit is contained in:
parent
c8557dc00b
commit
144b65cf99
|
@ -360,12 +360,37 @@ func cmdBuildInfo(fl Flags) (int, error) {
|
|||
}
|
||||
|
||||
func cmdListModules(fl Flags) (int, error) {
|
||||
packages := fl.Bool("packages")
|
||||
versions := fl.Bool("versions")
|
||||
|
||||
type moduleInfo struct {
|
||||
caddyModuleID string
|
||||
goModule *debug.Module
|
||||
err error
|
||||
}
|
||||
printModuleInfo := func(mi moduleInfo) {
|
||||
fmt.Print(mi.caddyModuleID)
|
||||
if versions && mi.goModule != nil {
|
||||
fmt.Print(" " + mi.goModule.Version)
|
||||
}
|
||||
if packages && mi.goModule != nil {
|
||||
fmt.Print(" " + mi.goModule.Path)
|
||||
if mi.goModule.Replace != nil {
|
||||
fmt.Print(" => " + mi.goModule.Replace.Path)
|
||||
}
|
||||
}
|
||||
if mi.err != nil {
|
||||
fmt.Printf(" [%v]", mi.err)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
// organize modules by whether they come with the standard distribution
|
||||
var standard, nonstandard, unknown []moduleInfo
|
||||
|
||||
bi, ok := debug.ReadBuildInfo()
|
||||
if !ok || !versions {
|
||||
// if there's no build information,
|
||||
// just print out the modules
|
||||
if !ok {
|
||||
// oh well, just print the module IDs and exit
|
||||
for _, m := range caddy.Modules() {
|
||||
fmt.Println(m)
|
||||
}
|
||||
|
@ -375,8 +400,8 @@ func cmdListModules(fl Flags) (int, error) {
|
|||
for _, modID := range caddy.Modules() {
|
||||
modInfo, err := caddy.GetModule(modID)
|
||||
if err != nil {
|
||||
// that's weird
|
||||
fmt.Println(modID)
|
||||
// that's weird, shouldn't happen
|
||||
unknown = append(unknown, moduleInfo{caddyModuleID: modID, err: err})
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -404,16 +429,40 @@ func cmdListModules(fl Flags) (int, error) {
|
|||
}
|
||||
}
|
||||
|
||||
// if we could find no matching module, just print out
|
||||
// the module ID instead
|
||||
if matched == nil {
|
||||
fmt.Println(modID)
|
||||
continue
|
||||
}
|
||||
caddyModGoMod := moduleInfo{caddyModuleID: modID, goModule: matched}
|
||||
|
||||
fmt.Printf("%s %s\n", modID, matched.Version)
|
||||
if strings.HasPrefix(modPkgPath, caddy.ImportPath) {
|
||||
standard = append(standard, caddyModGoMod)
|
||||
} else {
|
||||
nonstandard = append(nonstandard, caddyModGoMod)
|
||||
}
|
||||
}
|
||||
|
||||
if len(standard) > 0 {
|
||||
for _, mod := range standard {
|
||||
printModuleInfo(mod)
|
||||
}
|
||||
}
|
||||
fmt.Printf("\n Standard modules: %d\n", len(standard))
|
||||
if len(nonstandard) > 0 {
|
||||
if len(standard) > 0 {
|
||||
fmt.Println()
|
||||
}
|
||||
for _, mod := range nonstandard {
|
||||
printModuleInfo(mod)
|
||||
}
|
||||
}
|
||||
fmt.Printf("\n Non-standard modules: %d\n", len(nonstandard))
|
||||
if len(unknown) > 0 {
|
||||
if len(standard) > 0 || len(nonstandard) > 0 {
|
||||
fmt.Println()
|
||||
}
|
||||
for _, mod := range unknown {
|
||||
printModuleInfo(mod)
|
||||
}
|
||||
}
|
||||
fmt.Printf("\n Unknown modules: %d\n", len(unknown))
|
||||
|
||||
return caddy.ExitCodeSuccess, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -191,10 +191,11 @@ config file; otherwise the default is assumed.`,
|
|||
RegisterCommand(Command{
|
||||
Name: "list-modules",
|
||||
Func: cmdListModules,
|
||||
Usage: "[--versions]",
|
||||
Usage: "[--packages] [--versions]",
|
||||
Short: "Lists the installed Caddy modules",
|
||||
Flags: func() *flag.FlagSet {
|
||||
fs := flag.NewFlagSet("list-modules", flag.ExitOnError)
|
||||
fs.Bool("packages", false, "Print package paths")
|
||||
fs.Bool("versions", false, "Print version information")
|
||||
return fs
|
||||
}(),
|
||||
|
|
Loading…
Reference in New Issue
Block a user