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  }