github.com/kekek/gb@v0.4.5-0.20170222120241-d4ba64b0b297/cmd/gb-vendor/delete.go (about) 1 package main 2 3 import ( 4 "flag" 5 "path/filepath" 6 7 "github.com/constabulary/gb" 8 "github.com/constabulary/gb/cmd" 9 "github.com/constabulary/gb/internal/fileutils" 10 "github.com/constabulary/gb/internal/vendor" 11 "github.com/pkg/errors" 12 ) 13 14 var ( 15 // gb vendor delete flags 16 17 // delete all dependencies 18 deleteAll bool 19 ) 20 21 func addDeleteFlags(fs *flag.FlagSet) { 22 fs.BoolVar(&deleteAll, "all", false, "delete all dependencies") 23 } 24 25 var cmdDelete = &cmd.Command{ 26 Name: "delete", 27 UsageLine: "delete [-all] importpath", 28 Short: "deletes a local dependency", 29 Long: `delete removes a dependency from $PROJECT/vendor/src and the vendor manifest 30 31 Flags: 32 -all 33 remove all dependencies 34 35 `, 36 Run: func(ctx *gb.Context, args []string) error { 37 if len(args) != 1 && !deleteAll { 38 return errors.New("delete: import path or --all flag is missing") 39 } else if len(args) >= 1 && deleteAll { 40 return errors.New("delete: you cannot specify path and --all flag at once") 41 } 42 43 m, err := vendor.ReadManifest(manifestFile(ctx)) 44 if err != nil { 45 return errors.Errorf("could not load manifest: %v", err) 46 } 47 48 var dependencies []vendor.Dependency 49 if deleteAll { 50 dependencies = make([]vendor.Dependency, len(m.Dependencies)) 51 copy(dependencies, m.Dependencies) 52 } else { 53 p := args[0] 54 dependency, err := m.GetDependencyForImportpath(p) 55 if err != nil { 56 return errors.Wrap(err, "could not get dependency") 57 } 58 dependencies = append(dependencies, dependency) 59 } 60 61 for _, d := range dependencies { 62 path := d.Importpath 63 64 if err := m.RemoveDependency(d); err != nil { 65 return errors.Wrap(err, "dependency could not be deleted") 66 } 67 68 if err := fileutils.RemoveAll(filepath.Join(ctx.Projectdir(), "vendor", "src", filepath.FromSlash(path))); err != nil { 69 // TODO(dfc) need to apply vendor.cleanpath here to remove intermediate directories. 70 return errors.Wrap(err, "dependency could not be deleted") 71 } 72 } 73 return vendor.WriteManifest(manifestFile(ctx), m) 74 }, 75 AddFlags: addDeleteFlags, 76 }