updates.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. //
  3. // Copyright (c) 2013 The go-alpm Authors
  4. //
  5. // MIT Licensed. See LICENSE for details.
  6. package main
  7. import (
  8. "fmt"
  9. "github.com/demizer/go-alpm"
  10. "log"
  11. "os"
  12. )
  13. func human(size int64) string {
  14. floatsize := float32(size)
  15. units := [...]string{"", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi"}
  16. for _, unit := range units {
  17. if floatsize < 1024 {
  18. return fmt.Sprintf("%.1f %sB", floatsize, unit)
  19. }
  20. floatsize /= 1024
  21. }
  22. return fmt.Sprintf("%d%s", size, "B")
  23. }
  24. func upgrades(h *alpm.Handle) ([]alpm.Package, error) {
  25. localDb, err := h.LocalDb()
  26. if err != nil {
  27. return nil, err
  28. }
  29. syncDbs, err := h.SyncDbs()
  30. if err != nil {
  31. return nil, err
  32. }
  33. slice := []alpm.Package{}
  34. for _, pkg := range localDb.PkgCache().Slice() {
  35. newPkg := pkg.NewVersion(syncDbs)
  36. if newPkg != nil {
  37. slice = append(slice, *newPkg)
  38. }
  39. }
  40. return slice, nil
  41. }
  42. func main() {
  43. file, err := os.Open("/etc/pacman.conf")
  44. if err != nil {
  45. log.Fatalln(err)
  46. }
  47. conf, err := alpm.ParseConfig(file)
  48. if err != nil {
  49. log.Fatalln(err)
  50. }
  51. h, err := conf.CreateHandle()
  52. defer h.Release()
  53. if err != nil {
  54. log.Fatalln(err)
  55. }
  56. upgrades, err := upgrades(h)
  57. if err != nil {
  58. log.Fatalln(err)
  59. }
  60. var size int64 = 0
  61. for _, pkg := range upgrades {
  62. size += pkg.Size()
  63. fmt.Printf("%s %s -> %s\n", pkg.Name(), pkg.Version(),
  64. pkg.Version())
  65. }
  66. fmt.Printf("Total Download Size: %s\n", human(size))
  67. }