github.com/MealCraft/glide@v0.13.4/action/list.go (about) 1 package action 2 3 import ( 4 "encoding/json" 5 "path/filepath" 6 "sort" 7 8 "github.com/Masterminds/glide/dependency" 9 "github.com/Masterminds/glide/msg" 10 ) 11 12 // List lists all of the dependencies of the current project. 13 // 14 // Params: 15 // - dir (string): basedir 16 // - deep (bool): whether to do a deep scan or a shallow scan 17 // - format (string): The format to output (text, json, json-pretty) 18 func List(basedir string, deep bool, format string) { 19 basedir, err := filepath.Abs(basedir) 20 if err != nil { 21 msg.Die("Could not read directory: %s", err) 22 } 23 24 r, err := dependency.NewResolver(basedir) 25 if err != nil { 26 msg.Die("Could not create a resolver: %s", err) 27 } 28 h := &dependency.DefaultMissingPackageHandler{Missing: []string{}, Gopath: []string{}, Prefix: "vendor"} 29 r.Handler = h 30 31 localPkgs, _, err := r.ResolveLocal(deep) 32 if err != nil { 33 msg.Die("Error listing dependencies: %s", err) 34 } 35 sort.Strings(localPkgs) 36 installed := make([]string, len(localPkgs)) 37 for i, pkg := range localPkgs { 38 relPkg, err := filepath.Rel(basedir, pkg) 39 if err != nil { 40 // msg.Warn("Failed to Rel path: %s", err) 41 relPkg = pkg 42 } 43 installed[i] = relPkg 44 } 45 l := PackageList{ 46 Installed: installed, 47 Missing: h.Missing, 48 Gopath: h.Gopath, 49 } 50 51 outputList(l, format) 52 } 53 54 // PackageList contains the packages being used by their location 55 type PackageList struct { 56 Installed []string `json:"installed"` 57 Missing []string `json:"missing"` 58 Gopath []string `json:"gopath"` 59 } 60 61 const ( 62 textFormat = "text" 63 jsonFormat = "json" 64 jsonPrettyFormat = "json-pretty" 65 ) 66 67 func outputList(l PackageList, format string) { 68 switch format { 69 case textFormat: 70 msg.Puts("INSTALLED packages:") 71 for _, pkg := range l.Installed { 72 msg.Puts("\t%s", pkg) 73 } 74 75 if len(l.Missing) > 0 { 76 msg.Puts("\nMISSING packages:") 77 for _, pkg := range l.Missing { 78 msg.Puts("\t%s", pkg) 79 } 80 } 81 if len(l.Gopath) > 0 { 82 msg.Puts("\nGOPATH packages:") 83 for _, pkg := range l.Gopath { 84 msg.Puts("\t%s", pkg) 85 } 86 } 87 case jsonFormat: 88 json.NewEncoder(msg.Default.Stdout).Encode(l) 89 case jsonPrettyFormat: 90 b, err := json.MarshalIndent(l, "", " ") 91 if err != nil { 92 msg.Die("could not unmarshal package list: %s", err) 93 } 94 msg.Puts(string(b)) 95 default: 96 msg.Die("invalid output format: must be one of: json|json-pretty|text") 97 } 98 }