Jelajahi Sumber

chore(menus): squish clean menu into diff/edit menu

jguer 3 tahun lalu
induk
melakukan
e4b1cb6e7d
5 mengubah file dengan 64 tambahan dan 116 penghapusan
  1. 12 69
      pkg/menus/clean_menu.go
  2. 2 3
      pkg/menus/diff_menu.go
  3. 2 3
      pkg/menus/edit_menu.go
  4. 47 38
      pkg/menus/menu.go
  5. 1 3
      upgrade.go

+ 12 - 69
pkg/menus/clean_menu.go

@@ -9,75 +9,10 @@ import (
 	"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(buildDir string, bases []dep.Base,
-	installed stringset.StringSet, answerClean string, noConfirm bool) ([]dep.Base, error) {
-	toClean := make([]dep.Base, 0)
-
-	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 := text.GetInput(answerClean, noConfirm)
-	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 := base.AnyIsInSet(installed)
-
-			dir := filepath.Join(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(buildDir string, bases []dep.Base) bool {
 	for _, base := range bases {
 		pkg := base.Pkgbase()
@@ -91,15 +26,23 @@ func anyExistInCache(buildDir string, bases []dep.Base) bool {
 	return false
 }
 
-func Clean(cleanMenuOption bool, buildDir string, aurBases []dep.Base,
+func Clean(cleanMenuOption bool, buildDir string, bases []dep.Base,
 	installed stringset.StringSet, noConfirm bool, answerClean string) error {
-	if !(cleanMenuOption && anyExistInCache(buildDir, aurBases)) {
+	if !(cleanMenuOption && anyExistInCache(buildDir, bases)) {
 		return nil
 	}
 
-	pkgbuildNumberMenu(buildDir, aurBases, installed)
+	skipFunc := func(pkg string) bool {
+		dir := filepath.Join(buildDir, pkg)
+		if _, err := os.Stat(dir); os.IsNotExist(err) {
+			return true
+		}
+
+		return false
+	}
 
-	toClean, errClean := cleanNumberMenu(buildDir, aurBases, installed, answerClean, noConfirm)
+	toClean, errClean := selectionMenu(buildDir, bases, installed, gotext.Get("Packages to cleanBuild?"),
+		noConfirm, answerClean, skipFunc)
 	if errClean != nil {
 		return errClean
 	}

+ 2 - 3
pkg/menus/diff_menu.go

@@ -154,9 +154,8 @@ func Diff(ctx context.Context, cmdBuilder exe.ICmdBuilder,
 		return nil
 	}
 
-	pkgbuildNumberMenu(buildDir, bases, installed)
-
-	toDiff, errMenu := editDiffNumberMenu(bases, installed, gotext.Get("Diffs to show?"), noConfirm, diffDefaultAnswer)
+	toDiff, errMenu := selectionMenu(buildDir, bases, installed, gotext.Get("Diffs to show?"),
+		noConfirm, diffDefaultAnswer, nil)
 	if errMenu != nil || len(toDiff) == 0 {
 		return errMenu
 	}

+ 2 - 3
pkg/menus/edit_menu.go

@@ -119,9 +119,8 @@ func Edit(editMenuOption bool, buildDir string, bases []dep.Base, editorConfig,
 		return nil
 	}
 
-	pkgbuildNumberMenu(buildDir, bases, installed)
-
-	toEdit, errMenu := editDiffNumberMenu(bases, installed, gotext.Get("PKGBUILDs to edit?"), noConfirm, editDefaultAnswer)
+	toEdit, errMenu := selectionMenu(buildDir, bases,
+		installed, gotext.Get("PKGBUILDs to edit?"), noConfirm, editDefaultAnswer, nil)
 	if errMenu != nil || len(toEdit) == 0 {
 		return errMenu
 	}

+ 47 - 38
pkg/menus/menu.go

@@ -38,58 +38,67 @@ func pkgbuildNumberMenu(buildDir string, bases []dep.Base, installed stringset.S
 	fmt.Print(toPrint)
 }
 
-func editDiffNumberMenu(bases []dep.Base, installed stringset.StringSet,
-	message string, noConfirm bool, defaultAnswer string) ([]dep.Base, error) {
-	toEdit := make([]dep.Base, 0)
+func selectionMenu(buildDir string, bases []dep.Base, installed stringset.StringSet,
+	message string, noConfirm bool, defaultAnswer string, skipFunc func(string) bool) ([]dep.Base, error) {
+	selected := make([]dep.Base, 0)
+
+	pkgbuildNumberMenu(buildDir, bases, installed)
 
 	text.Infoln(message)
 	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"))))
 
-	editInput, err := text.GetInput(defaultAnswer, noConfirm)
+	selectInput, err := text.GetInput(defaultAnswer, noConfirm)
 	if err != nil {
 		return nil, err
 	}
 
-	eInclude, eExclude, eOtherInclude, eOtherExclude := intrange.ParseNumberMenu(editInput)
+	eInclude, eExclude, eOtherInclude, eOtherExclude := intrange.ParseNumberMenu(selectInput)
 	eIsInclude := len(eExclude) == 0 && len(eOtherExclude) == 0
 
 	if eOtherInclude.Get("abort") || eOtherInclude.Get("ab") {
-		return nil, &settings.ErrUserAbort{}
+		return nil, settings.ErrUserAbort{}
+	}
+
+	if eOtherInclude.Get("n") || eOtherInclude.Get("none") {
+		return selected, nil
 	}
 
-	if !eOtherInclude.Get("n") && !eOtherInclude.Get("none") {
-		for i, base := range bases {
-			pkg := base.Pkgbase()
-			anyInstalled := base.AnyIsInSet(installed)
-
-			if !eIsInclude && eExclude.Get(len(bases)-i) {
-				continue
-			}
-
-			if anyInstalled && (eOtherInclude.Get("i") || eOtherInclude.Get("installed")) {
-				toEdit = append(toEdit, base)
-				continue
-			}
-
-			if !anyInstalled && (eOtherInclude.Get("no") || eOtherInclude.Get("notinstalled")) {
-				toEdit = append(toEdit, base)
-				continue
-			}
-
-			if eOtherInclude.Get("a") || eOtherInclude.Get("all") {
-				toEdit = append(toEdit, base)
-				continue
-			}
-
-			if eIsInclude && (eInclude.Get(len(bases)-i) || eOtherInclude.Get(pkg)) {
-				toEdit = append(toEdit, base)
-			}
-
-			if !eIsInclude && (!eExclude.Get(len(bases)-i) && !eOtherExclude.Get(pkg)) {
-				toEdit = append(toEdit, base)
-			}
+	for i, base := range bases {
+		pkg := base.Pkgbase()
+
+		if skipFunc != nil && skipFunc(pkg) {
+			continue
+		}
+
+		anyInstalled := base.AnyIsInSet(installed)
+
+		if !eIsInclude && eExclude.Get(len(bases)-i) {
+			continue
+		}
+
+		if anyInstalled && (eOtherInclude.Get("i") || eOtherInclude.Get("installed")) {
+			selected = append(selected, base)
+			continue
+		}
+
+		if !anyInstalled && (eOtherInclude.Get("no") || eOtherInclude.Get("notinstalled")) {
+			selected = append(selected, base)
+			continue
+		}
+
+		if eOtherInclude.Get("a") || eOtherInclude.Get("all") {
+			selected = append(selected, base)
+			continue
+		}
+
+		if eIsInclude && (eInclude.Get(len(bases)-i) || eOtherInclude.Get(pkg)) {
+			selected = append(selected, base)
+		}
+
+		if !eIsInclude && (!eExclude.Get(len(bases)-i) && !eOtherExclude.Get(pkg)) {
+			selected = append(selected, base)
 		}
 	}
 
-	return toEdit, nil
+	return selected, nil
 }

+ 1 - 3
upgrade.go

@@ -244,7 +244,5 @@ func sysupgradeTargets(ctx context.Context, dbExecutor db.Executor,
 
 	warnings.Print()
 
-	ignore, targets, errUp := upgradePkgsMenu(aurUp, repoUp)
-
-	return ignore, targets, errUp
+	return upgradePkgsMenu(aurUp, repoUp)
 }