From e028d1733ccae17a6ab2d24f4e345bfb5c050eb0 Mon Sep 17 00:00:00 2001 From: Tovi Jaeschke-Rogers Date: Tue, 20 Jul 2021 20:17:45 +0930 Subject: [PATCH] Add ability to uninstall pkg --- Archive/Unarchive.go | 41 ++++++++++++++++++++++++ Client/Filesystem/PickFiles.go | 10 ++++-- Client/Package/CreatePackage.go | 2 +- Client/Package/UninstallPackage.go | 51 ++++++++++++++++++++++++++++++ Client/main.go | 20 +++++++++--- 5 files changed, 116 insertions(+), 8 deletions(-) create mode 100644 Client/Package/UninstallPackage.go diff --git a/Archive/Unarchive.go b/Archive/Unarchive.go index 9105cc3..fa6c29a 100644 --- a/Archive/Unarchive.go +++ b/Archive/Unarchive.go @@ -149,3 +149,44 @@ func extractManifestFromArchive(tarReader *tar.Reader) (string, error) { return manifestBytes.String(), nil } + +func GetPackageFilePaths(source string) ([]string, error) { + var ( + inFile *os.File + gzipReader *gzip.Reader + tarReader *tar.Reader + info os.FileInfo + header *tar.Header + pkgFiles []string + e error + ) + + inFile, e = os.Open(source) + if e != nil { + return pkgFiles, e + } + defer inFile.Close() + + gzipReader, e = gzip.NewReader(inFile) + defer gzipReader.Close() + tarReader = tar.NewReader(gzipReader) + + for { + header, e = tarReader.Next() + if e == io.EOF { + break + } + if e != nil { + return pkgFiles, e + } + + info = header.FileInfo() + if filepath.Base(info.Name()) == "manifest.yml" { + continue + } + + pkgFiles = append(pkgFiles, header.Name) + } + + return pkgFiles, nil +} diff --git a/Client/Filesystem/PickFiles.go b/Client/Filesystem/PickFiles.go index 1362a83..288b230 100644 --- a/Client/Filesystem/PickFiles.go +++ b/Client/Filesystem/PickFiles.go @@ -3,6 +3,7 @@ package Filesystem import ( "os" "path/filepath" + "strings" "github.com/vbauerster/mpb" bolt "go.etcd.io/bbolt" @@ -39,6 +40,7 @@ func pickFilesRecursive(rootPath string) error { picksBucket *bolt.Bucket bar *mpb.Bar totalLen int + trimF string f string e error ) @@ -63,7 +65,8 @@ func pickFilesRecursive(rootPath string) error { if len(fsStatus.NewFiles) > 0 { for _, f = range fsStatus.NewFiles { bar.Increment() - e = AddFileToBucket(picksBucket, f, f) + trimF = strings.TrimPrefix(f, Variables.RootDir) + e = AddFileToBucket(picksBucket, trimF, f) if e != nil { return e } @@ -73,7 +76,8 @@ func pickFilesRecursive(rootPath string) error { if len(fsStatus.ModifiedFiles) > 0 { for _, f = range fsStatus.ModifiedFiles { bar.Increment() - e = AddFileToBucket(picksBucket, f, f) + trimF = strings.TrimPrefix(f, Variables.RootDir) + e = AddFileToBucket(picksBucket, trimF, f) if e != nil { return e } @@ -118,7 +122,7 @@ func PickFiles(rootPath string) error { return pickFilesSingle(rootPath, realRootPath) } - return pickFilesRecursive(rootPath) + return pickFilesRecursive(realRootPath) } func ResetAllPickedFiles() error { diff --git a/Client/Package/CreatePackage.go b/Client/Package/CreatePackage.go index 320e91c..1214df6 100644 --- a/Client/Package/CreatePackage.go +++ b/Client/Package/CreatePackage.go @@ -138,7 +138,7 @@ func CreatePackage() error { e = editManifestFile(filepath.Join("/tmp/", "manifest.yml")) if e != nil { - fmt.Println(Color.Fatal(e.Error)) + fmt.Println(Color.Fatal(e)) } // TODO: Write this file to a better spot? diff --git a/Client/Package/UninstallPackage.go b/Client/Package/UninstallPackage.go new file mode 100644 index 0000000..5bab399 --- /dev/null +++ b/Client/Package/UninstallPackage.go @@ -0,0 +1,51 @@ +package Package + +import ( + "PackageManager/Archive" + "PackageManager/Color" + "errors" + "fmt" + "os" +) + +func UninstallPackage(pkgs []string) error { + var ( + pkgFiles []string + pkg string + f string + e error + ) + + for _, pkg = range pkgs { + _, e = os.Stat(pkg) + if os.IsNotExist(e) { + return errors.New(fmt.Sprintf("Invalid package %s", pkg)) + } + } + + for _, pkg = range pkgs { + fmt.Printf( + "Uninstalling %s...\n", + pkg, + ) + + pkgFiles, e = Archive.GetPackageFilePaths(pkg) + if e != nil { + return e + } + + for _, f = range pkgFiles { + e = os.Remove(f) + if e != nil { + return e + } + } + + fmt.Printf( + Color.Green("%s uninstalled\n"), + pkg, + ) + } + + return nil +} diff --git a/Client/main.go b/Client/main.go index a23bc76..61272e2 100644 --- a/Client/main.go +++ b/Client/main.go @@ -40,6 +40,9 @@ Filesystem diff: -Il | -install-local Install package from local tarball + -Rl | -remove-local + Remove package from local tarball + -ignore-deps-check Skip dependancies check ` @@ -62,6 +65,8 @@ func main() { createPackageFlagLong bool installLocalPackageFlag bool installLocalPackageFlagLong bool + uninstallPackageFlag bool + uninstallPackageFlagLong bool ignoreDepsCheckFlag bool verboseOutputFlag bool @@ -110,6 +115,9 @@ func main() { flag.BoolVar(&installLocalPackageFlag, "Il", false, "Install package from local tarball") flag.BoolVar(&installLocalPackageFlagLong, "install-local", false, "Install package from local tarball") + flag.BoolVar(&uninstallPackageFlag, "Rl", false, "Uninstall local package") + flag.BoolVar(&uninstallPackageFlagLong, "remove-local", false, "Uninstall local package") + flag.BoolVar(&ignoreDepsCheckFlag, "ignore-deps-check", false, "Ignore dependancies check") flag.Parse() @@ -182,10 +190,14 @@ func main() { return } + if uninstallPackageFlag || uninstallPackageFlagLong { + e = Package.UninstallPackage(flag.Args()) + if e != nil { + panic(e) + } + return + } + flag.Usage() fmt.Println(Color.Fatal("Nothing to do")) - - //e := Archive.TarGzip("/tmp/test", "/tmp/test.tar.gz") - //e := Archive.UntarGzip("/tmp/test.tar.gz", "/tmp/test") - //fmt.Println(e) }