clean_menu.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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, pkgbuildDirsByBase map[string]string) error {
  21. if len(pkgbuildDirsByBase) == 0 {
  22. return nil // no work to do
  23. }
  24. if !anyExistInCache(pkgbuildDirsByBase) {
  25. return nil
  26. }
  27. skipFunc := func(pkg string) bool {
  28. dir := pkgbuildDirsByBase[pkg]
  29. // TOFIX: new install engine dir will always exist, check if unclean instead
  30. if _, err := os.Stat(dir); os.IsNotExist(err) {
  31. return true
  32. }
  33. return false
  34. }
  35. bases := make([]string, 0, len(pkgbuildDirsByBase))
  36. for pkg := range pkgbuildDirsByBase {
  37. bases = append(bases, pkg)
  38. }
  39. // TOFIX: empty installed slice means installed filter is disabled
  40. toClean, errClean := selectionMenu(w, pkgbuildDirsByBase, bases, mapset.NewSet[string](),
  41. gotext.Get("Packages to cleanBuild?"),
  42. settings.NoConfirm, config.AnswerClean, skipFunc)
  43. if errClean != nil {
  44. return errClean
  45. }
  46. for i, base := range toClean {
  47. dir := pkgbuildDirsByBase[base]
  48. text.OperationInfoln(gotext.Get("Deleting (%d/%d): %s", i+1, len(toClean), text.Cyan(dir)))
  49. if err := config.Runtime.CmdBuilder.Show(config.Runtime.CmdBuilder.BuildGitCmd(ctx, dir, "reset", "--hard", "origin/HEAD")); err != nil {
  50. text.Warnln(gotext.Get("Unable to clean:"), dir)
  51. return err
  52. }
  53. if err := config.Runtime.CmdBuilder.Show(config.Runtime.CmdBuilder.BuildGitCmd(ctx, dir, "clean", "-fdx")); err != nil {
  54. text.Warnln(gotext.Get("Unable to clean:"), dir)
  55. return err
  56. }
  57. }
  58. return nil
  59. }