sources.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package upgrade
  2. import (
  3. "sync"
  4. alpm "github.com/Jguer/go-alpm/v2"
  5. "github.com/leonelquinteros/gotext"
  6. rpc "github.com/mikkeloscar/aur"
  7. "github.com/Jguer/yay/v10/pkg/text"
  8. "github.com/Jguer/yay/v10/pkg/vcs"
  9. )
  10. func UpDevel(
  11. remote []alpm.IPackage,
  12. aurdata map[string]*rpc.Pkg,
  13. localCache *vcs.InfoStore) UpSlice {
  14. toUpdate := make([]alpm.IPackage, 0, len(aurdata))
  15. toRemove := make([]string, 0)
  16. var mux1, mux2 sync.Mutex
  17. var wg sync.WaitGroup
  18. checkUpdate := func(pkgName string, e vcs.OriginInfoByURL) {
  19. defer wg.Done()
  20. if localCache.NeedsUpdate(e) {
  21. if _, ok := aurdata[pkgName]; ok {
  22. for _, pkg := range remote {
  23. if pkg.Name() == pkgName {
  24. mux1.Lock()
  25. toUpdate = append(toUpdate, pkg)
  26. mux1.Unlock()
  27. return
  28. }
  29. }
  30. }
  31. mux2.Lock()
  32. toRemove = append(toRemove, pkgName)
  33. mux2.Unlock()
  34. }
  35. }
  36. for pkgName, e := range localCache.OriginsByPackage {
  37. wg.Add(1)
  38. go checkUpdate(pkgName, e)
  39. }
  40. wg.Wait()
  41. toUpgrade := make(UpSlice, 0, len(toUpdate))
  42. for _, pkg := range toUpdate {
  43. if pkg.ShouldIgnore() {
  44. printIgnoringPackage(pkg, "latest-commit")
  45. } else {
  46. toUpgrade = append(toUpgrade,
  47. Upgrade{
  48. Name: pkg.Name(),
  49. Repository: "devel",
  50. LocalVersion: pkg.Version(),
  51. RemoteVersion: "latest-commit",
  52. })
  53. }
  54. }
  55. localCache.RemovePackage(toRemove)
  56. return toUpgrade
  57. }
  58. func printIgnoringPackage(pkg alpm.IPackage, newPkgVersion string) {
  59. left, right := GetVersionDiff(pkg.Version(), newPkgVersion)
  60. text.Warnln(gotext.Get("%s: ignoring package upgrade (%s => %s)",
  61. text.Cyan(pkg.Name()),
  62. left, right,
  63. ))
  64. }
  65. // UpAUR gathers foreign packages and checks if they have new versions.
  66. // Output: Upgrade type package list.
  67. func UpAUR(remote []alpm.IPackage, aurdata map[string]*rpc.Pkg, timeUpdate bool) UpSlice {
  68. toUpgrade := make(UpSlice, 0)
  69. for _, pkg := range remote {
  70. aurPkg, ok := aurdata[pkg.Name()]
  71. if !ok {
  72. continue
  73. }
  74. if (timeUpdate && (int64(aurPkg.LastModified) > pkg.BuildDate().Unix())) ||
  75. (alpm.VerCmp(pkg.Version(), aurPkg.Version) < 0) {
  76. if pkg.ShouldIgnore() {
  77. printIgnoringPackage(pkg, aurPkg.Version)
  78. } else {
  79. toUpgrade = append(toUpgrade,
  80. Upgrade{
  81. Name: aurPkg.Name,
  82. Repository: "aur",
  83. LocalVersion: pkg.Version(),
  84. RemoteVersion: aurPkg.Version,
  85. })
  86. }
  87. }
  88. }
  89. return toUpgrade
  90. }