github.com/bingoohuang/pkger@v0.0.0-20210127185155-a71b9df4c4c7/cmd/pkger/cmds/list.go (about) 1 package cmds 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "flag" 7 "fmt" 8 "os" 9 "path/filepath" 10 11 "github.com/bingoohuang/pkger" 12 "github.com/bingoohuang/pkger/parser" 13 ) 14 15 type listCmd struct { 16 *flag.FlagSet 17 help bool 18 json bool 19 include slice 20 subs []command 21 } 22 23 func (e *listCmd) Name() string { 24 return e.Flags().Name() 25 } 26 27 func (e *listCmd) Exec(args []string) error { 28 e.Parse(args) 29 30 if e.help { 31 e.Usage() 32 return nil 33 } 34 35 args = e.Args() 36 37 info, err := pkger.Current() 38 if err != nil { 39 return err 40 } 41 42 fp := filepath.Join(info.Dir, outName) 43 os.RemoveAll(fp) 44 45 decls, err := parser.Parse(info, e.include...) 46 if err != nil { 47 return err 48 } 49 50 jay := struct { 51 ImportPath string 52 Files []*parser.File 53 }{ 54 ImportPath: info.ImportPath, 55 } 56 57 files, err := decls.Files() 58 if err != nil { 59 return err 60 } 61 jay.Files = files 62 63 if e.json { 64 bb := &bytes.Buffer{} 65 66 enc := json.NewEncoder(bb) 67 enc.SetIndent("", " ") 68 if err := enc.Encode(jay); err != nil { 69 return err 70 } 71 72 _, err = os.Stdout.Write(bb.Bytes()) 73 return err 74 } 75 76 fmt.Println(jay.ImportPath) 77 for _, f := range jay.Files { 78 fmt.Println(" >", f.Path) 79 } 80 return nil 81 } 82 83 func (e *listCmd) Flags() *flag.FlagSet { 84 if e.FlagSet == nil { 85 e.FlagSet = flag.NewFlagSet("list", flag.ExitOnError) 86 e.BoolVar(&e.json, "json", false, "prints in JSON format") 87 e.Var(&e.include, "include", "packages the specified file or directory") 88 } 89 e.Usage = Usage(os.Stderr, e.FlagSet) 90 return e.FlagSet 91 }