github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/cmd_pkg_ls.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  
     7  	"github.com/gonuts/commander"
     8  	"github.com/gonuts/flag"
     9  )
    10  
    11  func hwaf_make_cmd_pkg_ls() *commander.Command {
    12  	cmd := &commander.Command{
    13  		Run:       hwaf_run_cmd_pkg_ls,
    14  		UsageLine: "ls [options] [pattern]",
    15  		Short:     "list locally checked out packages",
    16  		Long: `
    17  ls lists the locally checked out packages.
    18  
    19  ex:
    20   $ hwaf pkg ls
    21   $ hwaf pkg ls ".*?Athena.*?"
    22  `,
    23  		Flag: *flag.NewFlagSet("hwaf-pkg-ls", flag.ExitOnError),
    24  	}
    25  	cmd.Flag.Bool("v", false, "enable verbose output")
    26  
    27  	return cmd
    28  }
    29  
    30  func hwaf_run_cmd_pkg_ls(cmd *commander.Command, args []string) error {
    31  	var err error
    32  	n := "hwaf-pkg-" + cmd.Name()
    33  	pat := ".*?"
    34  	switch len(args) {
    35  	case 0:
    36  		pat = ".*?"
    37  	case 1:
    38  		pat = args[0]
    39  	default:
    40  		return fmt.Errorf("%s: you need to give a package pattern to list", n)
    41  	}
    42  
    43  	verbose := cmd.Flag.Lookup("v").Value.Get().(bool)
    44  
    45  	if verbose {
    46  		fmt.Printf("%s: listing packages [%s]...\n", n, pat)
    47  	}
    48  
    49  	re_pkg, err := regexp.Compile(pat)
    50  	if err != nil {
    51  		return err
    52  	}
    53  
    54  	pkgs := g_ctx.PkgDb.Pkgs()
    55  	for _, v := range pkgs {
    56  		if re_pkg.MatchString(v) {
    57  			pkg, err := g_ctx.PkgDb.GetPkg(v)
    58  			if err != nil {
    59  				return err
    60  			}
    61  			fmt.Printf("%s (%s)\n", pkg.Path, pkg.Type)
    62  		}
    63  	}
    64  
    65  	if verbose {
    66  		fmt.Printf("%s: listing packages [%s]... [ok]\n", n, pat)
    67  	}
    68  
    69  	return err
    70  }
    71  
    72  // EOF