mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-04 03:27:23 -05: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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user