|  | 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, | 
|  | } |