| 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) |
| } |
| if p != dependency.Importpath { |
| return fmt.Errorf("a parent of the specified dependency is vendored, remove that instead: %v", |
| dependency.Importpath) |
| } |
| 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, |
| } |