clean_menu.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Clean Build Menu functions
  2. package menus
  3. import (
  4. "fmt"
  5. "os"
  6. "path/filepath"
  7. "github.com/leonelquinteros/gotext"
  8. "github.com/Jguer/yay/v11/pkg/dep"
  9. "github.com/Jguer/yay/v11/pkg/stringset"
  10. "github.com/Jguer/yay/v11/pkg/text"
  11. )
  12. func anyExistInCache(buildDir string, bases []dep.Base) bool {
  13. for _, base := range bases {
  14. pkg := base.Pkgbase()
  15. dir := filepath.Join(buildDir, pkg)
  16. if _, err := os.Stat(dir); !os.IsNotExist(err) {
  17. return true
  18. }
  19. }
  20. return false
  21. }
  22. func Clean(cleanMenuOption bool, buildDir string, bases []dep.Base,
  23. installed stringset.StringSet, noConfirm bool, answerClean string) error {
  24. if !(cleanMenuOption && anyExistInCache(buildDir, bases)) {
  25. return nil
  26. }
  27. skipFunc := func(pkg string) bool {
  28. dir := filepath.Join(buildDir, pkg)
  29. if _, err := os.Stat(dir); os.IsNotExist(err) {
  30. return true
  31. }
  32. return false
  33. }
  34. toClean, errClean := selectionMenu(buildDir, bases, installed, gotext.Get("Packages to cleanBuild?"),
  35. noConfirm, answerClean, skipFunc)
  36. if errClean != nil {
  37. return errClean
  38. }
  39. for i, base := range toClean {
  40. dir := filepath.Join(buildDir, base.Pkgbase())
  41. text.OperationInfoln(gotext.Get("Deleting (%d/%d): %s", i+1, len(toClean), text.Cyan(dir)))
  42. if err := os.RemoveAll(dir); err != nil {
  43. fmt.Fprintln(os.Stderr, err)
  44. }
  45. }
  46. return nil
  47. }