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  }