github.com/safing/portbase@v0.19.5/modules/flags.go (about) 1 package modules 2 3 import ( 4 "flag" 5 "fmt" 6 ) 7 8 var ( 9 // HelpFlag triggers printing flag.Usage. It's exported for custom help handling. 10 HelpFlag bool 11 printGraphFlag bool 12 ) 13 14 func init() { 15 flag.BoolVar(&HelpFlag, "help", false, "print help") 16 flag.BoolVar(&printGraphFlag, "print-module-graph", false, "print the module dependency graph") 17 } 18 19 func parseFlags() error { 20 // parse flags 21 if !flag.Parsed() { 22 flag.Parse() 23 } 24 25 if HelpFlag { 26 flag.Usage() 27 return ErrCleanExit 28 } 29 30 if printGraphFlag { 31 printGraph() 32 return ErrCleanExit 33 } 34 35 return nil 36 } 37 38 func printGraph() { 39 // mark roots 40 for _, module := range modules { 41 if len(module.depReverse) == 0 { 42 // is root, dont print deps in dep tree 43 module.stopFlag.Set() 44 } 45 } 46 // print 47 for _, module := range modules { 48 if module.stopFlag.IsSet() { 49 // print from root 50 printModuleGraph("", module, true) 51 } 52 } 53 } 54 55 func printModuleGraph(prefix string, module *Module, root bool) { 56 fmt.Printf("%sāāā %s\n", prefix, module.Name) 57 if root || !module.stopFlag.IsSet() { 58 for _, dep := range module.Dependencies() { 59 printModuleGraph(fmt.Sprintf("ā %s", prefix), dep, false) 60 } 61 } 62 }