| package main | 
 |  | 
 | import ( | 
 | 	"flag" | 
 | 	"fmt" | 
 | 	"path/filepath" | 
 |  | 
 | 	"github.com/FiloSottile/gvt/fileutils" | 
 |  | 
 | 	"github.com/FiloSottile/gvt/gbvendor" | 
 | ) | 
 |  | 
 | var ( | 
 | 	deleteAll bool // delete all dependencies | 
 | ) | 
 |  | 
 | func addDeleteFlags(fs *flag.FlagSet) { | 
 | 	fs.BoolVar(&deleteAll, "all", false, "delete all dependencies") | 
 | } | 
 |  | 
 | var cmdDelete = &Command{ | 
 | 	Name:      "delete", | 
 | 	UsageLine: "delete [-all] importpath", | 
 | 	Short:     "delete a local dependency", | 
 | 	Long: `delete removes a dependency from the vendor directory and the manifest | 
 |  | 
 | Flags: | 
 | 	-all | 
 | 		remove all dependencies | 
 |  | 
 | `, | 
 | 	Run: func(args []string) error { | 
 | 		if len(args) != 1 && !deleteAll { | 
 | 			return fmt.Errorf("delete: import path or --all flag is missing") | 
 | 		} else if len(args) == 1 && deleteAll { | 
 | 			return fmt.Errorf("delete: you cannot specify path and --all flag at once") | 
 | 		} | 
 |  | 
 | 		m, err := vendor.ReadManifest(manifestFile()) | 
 | 		if err != nil { | 
 | 			return fmt.Errorf("could not load manifest: %v", err) | 
 | 		} | 
 |  | 
 | 		var dependencies []vendor.Dependency | 
 | 		if deleteAll { | 
 | 			dependencies = make([]vendor.Dependency, len(m.Dependencies)) | 
 | 			copy(dependencies, m.Dependencies) | 
 | 		} else { | 
 | 			p := args[0] | 
 | 			dependency, err := m.GetDependencyForImportpath(p) | 
 | 			if err != nil { | 
 | 				return fmt.Errorf("could not get dependency: %v", err) | 
 | 			} | 
 | 			dependencies = append(dependencies, dependency) | 
 | 		} | 
 |  | 
 | 		for _, d := range dependencies { | 
 | 			path := d.Importpath | 
 |  | 
 | 			if err := m.RemoveDependency(d); err != nil { | 
 | 				return fmt.Errorf("dependency could not be deleted: %v", err) | 
 | 			} | 
 |  | 
 | 			if err := fileutils.RemoveAll(filepath.Join(vendorDir(), filepath.FromSlash(path))); err != nil { | 
 | 				// TODO(dfc) need to apply vendor.cleanpath here to remove indermediate directories. | 
 | 				return fmt.Errorf("dependency could not be deleted: %v", err) | 
 | 			} | 
 | 		} | 
 | 		return vendor.WriteManifest(manifestFile(), m) | 
 | 	}, | 
 | 	AddFlags: addDeleteFlags, | 
 | } |