mirror of
https://github.com/Jguer/yay.git
synced 2024-11-06 17:17:22 +01:00
Sort package statistics using CGo
This commit is contained in:
parent
d8e8a7e6e4
commit
9dcc9194ee
@ -185,7 +185,7 @@ func Search(pkg string) (err error) {
|
||||
|
||||
// LocalStatistics returns installed packages statistics.
|
||||
func LocalStatistics(version string) error {
|
||||
pkgmap, info, err := pac.Statistics()
|
||||
info, err := pac.Statistics()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -200,10 +200,7 @@ func LocalStatistics(version string) error {
|
||||
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")
|
||||
fmt.Println("\x1B[1;32mTen biggest packages\x1B[0m")
|
||||
|
||||
for name, psize := range pkgmap {
|
||||
fmt.Printf("%s: \x1B[0;33m%s\x1B[0m\n", name, size(psize))
|
||||
}
|
||||
pac.BiggestPackages()
|
||||
fmt.Println("\x1B[1;34m===========================================\x1B[0m")
|
||||
|
||||
keys := make([]string, len(foreignS))
|
||||
|
@ -405,12 +405,11 @@ func ForeignPackages() (foreign map[string]*struct {
|
||||
}
|
||||
|
||||
// Statistics returns statistics about packages installed in system
|
||||
func Statistics() (packages map[string]int64, info struct {
|
||||
func Statistics() (info struct {
|
||||
Totaln int
|
||||
Expln int
|
||||
TotalSize int64
|
||||
}, err error) {
|
||||
var pkgs [10]alpm.Package
|
||||
var tS int64 // TotalSize
|
||||
var nPkg int
|
||||
var ePkg int
|
||||
@ -426,40 +425,14 @@ func Statistics() (packages map[string]int64, info struct {
|
||||
return
|
||||
}
|
||||
|
||||
var k int
|
||||
for e, pkg := range localDb.PkgCache().Slice() {
|
||||
for _, pkg := range localDb.PkgCache().Slice() {
|
||||
tS += pkg.ISize()
|
||||
k = -1
|
||||
nPkg++
|
||||
if pkg.Reason() == 0 {
|
||||
ePkg++
|
||||
}
|
||||
if e < 10 {
|
||||
pkgs[e] = pkg
|
||||
continue
|
||||
}
|
||||
|
||||
for i, pkw := range pkgs {
|
||||
if k == -1 {
|
||||
if pkw.ISize() < pkg.ISize() {
|
||||
k = i
|
||||
}
|
||||
} else {
|
||||
if pkw.ISize() < pkgs[k].ISize() && pkw.ISize() < pkg.ISize() {
|
||||
k = i
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if k != -1 {
|
||||
pkgs[k] = pkg
|
||||
}
|
||||
}
|
||||
|
||||
packages = make(map[string]int64)
|
||||
for _, pkg := range pkgs {
|
||||
packages[pkg.Name()] = pkg.ISize()
|
||||
}
|
||||
info = struct {
|
||||
Totaln int
|
||||
Expln int
|
||||
@ -470,3 +443,29 @@ func Statistics() (packages map[string]int64, info struct {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// BiggestPackages prints the name of the ten biggest packages in the system.
|
||||
func BiggestPackages() {
|
||||
h, err := conf.CreateHandle()
|
||||
defer h.Release()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
localDb, err := h.LocalDb()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
pkgCache := localDb.PkgCache()
|
||||
pkgS := pkgCache.SortBySize().Slice()
|
||||
|
||||
if len(pkgS) < 10 {
|
||||
return
|
||||
}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
fmt.Printf("%s: \x1B[0;33m%dMB\x1B[0m\n", pkgS[i].Name(), pkgS[i].ISize()/(1024*1024))
|
||||
}
|
||||
// Could implement size here as well, but we just want the general idea
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user