From 1a580178171260d96ced3b2f9186d539951c697f Mon Sep 17 00:00:00 2001 From: Jguer Date: Sun, 7 May 2017 13:52:08 +0100 Subject: [PATCH] Changed upgrade logic to use alpm.pkg --- aur/aur.go | 17 +++++++++-------- pacman/pacman.go | 47 ++++++++++++++++++++++------------------------- query.go | 7 +++++-- 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/aur/aur.go b/aur/aur.go index 96f563db..76bd790a 100644 --- a/aur/aur.go +++ b/aur/aur.go @@ -90,11 +90,10 @@ func Install(pkgName []string, flags []string) (err error) { func Upgrade(flags []string) error { fmt.Println("\x1b[1;36;1m::\x1b[0m\x1b[1m Starting AUR upgrade...\x1b[0m") - foreign, n, err := pacman.ForeignPackages() - if err != nil || n == 0 { + foreign, err := pacman.ForeignPackages() + if err != nil { return err } - keys := make([]string, len(foreign)) i := 0 for k := range foreign { @@ -108,12 +107,14 @@ func Upgrade(flags []string) error { } outdated := q[:0] - for _, res := range q { + for i, res := range q { + fmt.Printf("\r Checking %d/%d packages...", i+1, len(q)) + if _, ok := foreign[res.Name]; ok { // Leaving this here for now, warn about downgrades later - if res.LastModified > int(foreign[res.Name].Date) { + if int64(res.LastModified) > foreign[res.Name].BuildDate().UnixNano() { fmt.Printf("\x1b[1m\x1b[32m==>\x1b[33;1m %s: \x1b[0m%s \x1b[33;1m-> \x1b[0m%s\n", - res.Name, foreign[res.Name].Version, res.Version) + res.Name, foreign[res.Name].Version(), res.Version) outdated = append(outdated, res) } } @@ -121,12 +122,12 @@ func Upgrade(flags []string) error { //If there are no outdated packages, don't prompt if len(outdated) == 0 { - fmt.Println(" there is nothing to do") + fmt.Println("\n there is nothing to do") return nil } // Install updated packages - if !config.ContinueTask("Proceed with upgrade?", "nN") { + if !config.ContinueTask("\nProceed with upgrade?", "nN") { return nil } diff --git a/pacman/pacman.go b/pacman/pacman.go index 0a59cd4d..1d0b9e03 100644 --- a/pacman/pacman.go +++ b/pacman/pacman.go @@ -23,11 +23,9 @@ func Search(pkgInputN []string) (s Query, n int, err error) { initL := func(len int) int { return len - 1 } - compL := func(len int, i int) bool { return i > -1 } - finalL := func(i int) int { return i - 1 } @@ -37,11 +35,9 @@ func Search(pkgInputN []string) (s Query, n int, err error) { initL = func(len int) int { return 0 } - compL = func(len int, i int) bool { return i < len } - finalL = func(i int) int { return i + 1 } @@ -202,6 +198,14 @@ func DepSatisfier(toCheck []string) (repo []string, notFound []string, err error return } +// PkgNameSlice returns a slice of package names +// func (s Query) PkgNameSlice() (pkgNames []string) { +// for _, e := range s { +// pkgNames = append(pkgNames, e.Name()) +// } +// return +// } + // CleanRemove sends a full removal command to pacman with the pkgName slice func CleanRemove(pkgName []string) (err error) { if len(pkgName) == 0 { @@ -213,11 +217,7 @@ func CleanRemove(pkgName []string) (err error) { } // ForeignPackages returns a map of foreign packages, with their version and date as values. -func ForeignPackages() (foreign map[string]*struct { - Version string - Date int64 -}, n int, err error) { - +func ForeignPackages() (foreign map[string]alpm.Package, err error) { localDb, err := config.AlpmHandle.LocalDb() if err != nil { return @@ -227,31 +227,28 @@ func ForeignPackages() (foreign map[string]*struct { return } - foreign = make(map[string]*struct { - Version string - Date int64 - }) - // Find foreign packages in system - for _, pkg := range localDb.PkgCache().Slice() { - // Change to more effective method + foreign = make(map[string]alpm.Package) + + f := func(k alpm.Package) error { found := false - for _, db := range dbList.Slice() { - _, err = db.PkgByName(pkg.Name()) + dbList.ForEach(func(d alpm.Db) error { + if found { + return nil + } + _, err = d.PkgByName(k.Name()) if err == nil { found = true - break } - } + return nil + }) if !found { - foreign[pkg.Name()] = &struct { - Version string - Date int64 - }{pkg.Version(), pkg.InstallDate().Unix()} - n++ + foreign[k.Name()] = k } + return nil } + err = localDb.PkgCache().ForEach(f) return } diff --git a/query.go b/query.go index 394380c7..1afa3441 100644 --- a/query.go +++ b/query.go @@ -96,12 +96,15 @@ func localStatistics(version string) error { return err } - foreignS, foreign, _ := pac.ForeignPackages() + foreignS, err := pac.ForeignPackages() + if err != nil { + return err + } fmt.Printf("\n Yay version r%s\n", version) fmt.Println("\x1B[1;34m===========================================\x1B[0m") fmt.Printf("\x1B[1;32mTotal installed packages: \x1B[0;33m%d\x1B[0m\n", info.Totaln) - fmt.Printf("\x1B[1;32mTotal foreign installed packages: \x1B[0;33m%d\x1B[0m\n", foreign) + fmt.Printf("\x1B[1;32mTotal foreign installed packages: \x1B[0;33m%d\x1B[0m\n", len(foreignS)) fmt.Printf("\x1B[1;32mExplicitly installed packages: \x1B[0;33m%d\x1B[0m\n", info.Expln) fmt.Printf("\x1B[1;32mTotal Size occupied by packages: \x1B[0;33m%s\x1B[0m\n", size(info.TotalSize)) fmt.Println("\x1B[1;34m===========================================\x1B[0m")