aboutsummaryrefslogtreecommitdiff
path: root/package.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2018-05-19 20:04:28 +0700
committerShulhan <ms@kilabit.info>2018-05-19 20:04:28 +0700
commitae7867ff2091a5360bc7eddaff0d1d8a97bdb11e (patch)
tree437ba1b9d21165d9ef7ff1cde9be3e0bcddd6662 /package.go
parent2d351be9315454915a156fd85112c2cf23413fa6 (diff)
downloadbeku-ae7867ff2091a5360bc7eddaff0d1d8a97bdb11e.tar.xz
Add remove operation
Diffstat (limited to 'package.go')
-rw-r--r--package.go69
1 files changed, 68 insertions, 1 deletions
diff --git a/package.go b/package.go
index e13ddf7..1537b85 100644
--- a/package.go
+++ b/package.go
@@ -82,6 +82,28 @@ func (pkg *Package) Fetch() (err error) {
}
//
+// GoClean will remove the package binaries and archives.
+//
+func (pkg *Package) GoClean() (err error) {
+ //nolint:gas
+ cmd := exec.Command("go", "clean", "-i", "-cache", "-testcache", "./...")
+ if Debug >= DebugL1 {
+ fmt.Println(">>>", cmd.Args)
+ }
+ cmd.Dir = pkg.FullPath
+ cmd.Stdout = defStdout
+ cmd.Stderr = defStderr
+
+ err = cmd.Run()
+ if err != nil {
+ err = fmt.Errorf("GoClean: %s", err)
+ return
+ }
+
+ return
+}
+
+//
// Install a package. Clone package to GOPATH/src, set to the latest tag if
// exist or to the latest commit, and scan dependencies.
//
@@ -124,6 +146,51 @@ func (pkg *Package) IsEqual(other *Package) bool {
}
//
+// Remove package installed binaries, archives, and source from GOPATH.
+//
+func (pkg *Package) Remove() (err error) {
+ err = pkg.GoClean()
+ if err != nil {
+ err = fmt.Errorf("Remove: %s", err)
+ return
+ }
+
+ if Debug >= DebugL1 {
+ fmt.Println(">>> Remove source:", pkg.FullPath)
+ }
+
+ err = os.RemoveAll(pkg.FullPath)
+ if err != nil {
+ err = fmt.Errorf("Remove: %s", err)
+ return
+ }
+
+ return
+}
+
+//
+// RemoveRequiredBy will remove package import path from current
+// package list of required-by.
+// If import-path found as required-by, it will return true, otherwise it will
+// return false.
+//
+func (pkg *Package) RemoveRequiredBy(importPath string) (ok bool) {
+ var requiredBy []string
+
+ for x := 0; x < len(pkg.RequiredBy); x++ {
+ if pkg.RequiredBy[x] == importPath {
+ ok = true
+ continue
+ }
+ requiredBy = append(requiredBy, pkg.RequiredBy[x])
+ }
+ if ok {
+ pkg.RequiredBy = requiredBy
+ }
+ return
+}
+
+//
// Scan will set the package version, `isTag` status, and remote URL using
// metadata in package repository.
//
@@ -172,7 +239,7 @@ func (pkg *Package) ScanDeps(env *Env) (err error) {
func (pkg *Package) GetRecursiveImports() (
imports []string, err error,
) {
- //nolint: gas
+ //nolint:gas
cmd := exec.Command("go", "list", "-e", "-f", `{{ join .Deps "\n"}}`, "./...")
fmt.Println(">>>", cmd.Args)