clean_menu.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Clean Build Menu functions
  2. package menus
  3. import (
  4. "context"
  5. "io"
  6. "os"
  7. mapset "github.com/deckarep/golang-set/v2"
  8. "github.com/leonelquinteros/gotext"
  9. "github.com/Jguer/yay/v12/pkg/settings"
  10. "github.com/Jguer/yay/v12/pkg/text"
  11. )
  12. func anyExistInCache(pkgbuildDirs map[string]string) bool {
  13. for _, dir := range pkgbuildDirs {
  14. if _, err := os.Stat(dir); !os.IsNotExist(err) {
  15. return true
  16. }
  17. }
  18. return false
  19. }
  20. func CleanFn(ctx context.Context, config *settings.Configuration, w io.Writer,
  21. pkgbuildDirsByBase map[string]string, installed mapset.Set[string],
  22. ) error {
  23. if len(pkgbuildDirsByBase) == 0 {
  24. return nil // no work to do
  25. }
  26. if !anyExistInCache(pkgbuildDirsByBase) {
  27. return nil
  28. }
  29. skipFunc := func(pkg string) bool {
  30. dir := pkgbuildDirsByBase[pkg]
  31. // TOFIX: new install engine dir will always exist, check if unclean instead
  32. if _, err := os.Stat(dir); os.IsNotExist(err) {
  33. return true
  34. }
  35. return false
  36. }
  37. bases := make([]string, 0, len(pkgbuildDirsByBase))
  38. for pkg := range pkgbuildDirsByBase {
  39. bases = append(bases, pkg)
  40. }
  41. toClean, errClean := selectionMenu(w, pkgbuildDirsByBase, bases, installed,
  42. gotext.Get("Packages to cleanBuild?"),
  43. settings.NoConfirm, config.AnswerClean, skipFunc)
  44. if errClean != nil {
  45. return errClean
  46. }
  47. for i, base := range toClean {
  48. dir := pkgbuildDirsByBase[base]
  49. text.OperationInfoln(gotext.Get("Deleting (%d/%d): %s", i+1, len(toClean), text.Cyan(dir)))
  50. if err := config.Runtime.CmdBuilder.Show(config.Runtime.CmdBuilder.BuildGitCmd(ctx, dir, "reset", "--hard", "origin/HEAD")); err != nil {
  51. text.Warnln(gotext.Get("Unable to clean:"), dir)
  52. return err
  53. }
  54. if err := config.Runtime.CmdBuilder.Show(config.Runtime.CmdBuilder.BuildGitCmd(ctx, dir, "clean", "-fdx")); err != nil {
  55. text.Warnln(gotext.Get("Unable to clean:"), dir)
  56. return err
  57. }
  58. }
  59. return nil
  60. }