123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- // Clean Build Menu functions
- package main
- import (
- "fmt"
- "os"
- "path/filepath"
- "github.com/leonelquinteros/gotext"
- "github.com/Jguer/yay/v11/pkg/dep"
- "github.com/Jguer/yay/v11/pkg/intrange"
- "github.com/Jguer/yay/v11/pkg/settings"
- "github.com/Jguer/yay/v11/pkg/stringset"
- "github.com/Jguer/yay/v11/pkg/text"
- )
- func cleanNumberMenu(bases []dep.Base, installed stringset.StringSet, hasClean bool) ([]dep.Base, error) {
- toClean := make([]dep.Base, 0)
- if !hasClean {
- return toClean, nil
- }
- text.Infoln(gotext.Get("Packages to cleanBuild?"))
- text.Infoln(gotext.Get("%s [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)", text.Cyan(gotext.Get("[N]one"))))
- cleanInput, err := getInput(config.AnswerClean)
- if err != nil {
- return nil, err
- }
- cInclude, cExclude, cOtherInclude, cOtherExclude := intrange.ParseNumberMenu(cleanInput)
- cIsInclude := len(cExclude) == 0 && len(cOtherExclude) == 0
- if cOtherInclude.Get("abort") || cOtherInclude.Get("ab") {
- return nil, settings.ErrUserAbort{}
- }
- if !cOtherInclude.Get("n") && !cOtherInclude.Get("none") {
- for i, base := range bases {
- pkg := base.Pkgbase()
- anyInstalled := false
- for _, b := range base {
- anyInstalled = anyInstalled || installed.Get(b.Name)
- }
- dir := filepath.Join(config.BuildDir, pkg)
- if _, err := os.Stat(dir); os.IsNotExist(err) {
- continue
- }
- if !cIsInclude && cExclude.Get(len(bases)-i) {
- continue
- }
- if anyInstalled && (cOtherInclude.Get("i") || cOtherInclude.Get("installed")) {
- toClean = append(toClean, base)
- continue
- }
- if !anyInstalled && (cOtherInclude.Get("no") || cOtherInclude.Get("notinstalled")) {
- toClean = append(toClean, base)
- continue
- }
- if cOtherInclude.Get("a") || cOtherInclude.Get("all") {
- toClean = append(toClean, base)
- continue
- }
- if cIsInclude && (cInclude.Get(len(bases)-i) || cOtherInclude.Get(pkg)) {
- toClean = append(toClean, base)
- continue
- }
- if !cIsInclude && (!cExclude.Get(len(bases)-i) && !cOtherExclude.Get(pkg)) {
- toClean = append(toClean, base)
- continue
- }
- }
- }
- return toClean, nil
- }
- func anyExistInCache(bases []dep.Base) bool {
- for _, base := range bases {
- pkg := base.Pkgbase()
- dir := filepath.Join(config.BuildDir, pkg)
- if _, err := os.Stat(dir); !os.IsNotExist(err) {
- return true
- }
- }
- return false
- }
- func cleanMenu(cleanMenuOption bool, aurBases []dep.Base, installed stringset.StringSet) error {
- if !(cleanMenuOption && anyExistInCache(aurBases)) {
- return nil
- }
- askClean := pkgbuildNumberMenu(aurBases, installed)
- toClean, errClean := cleanNumberMenu(aurBases, installed, askClean)
- if errClean != nil {
- return errClean
- }
- for i, base := range toClean {
- dir := filepath.Join(config.BuildDir, base.Pkgbase())
- text.OperationInfoln(gotext.Get("Deleting (%d/%d): %s", i+1, len(toClean), text.Cyan(dir)))
- if err := os.RemoveAll(dir); err != nil {
- fmt.Fprintln(os.Stderr, err)
- }
- }
- return nil
- }
|