From e4b1cb6e7df98a59df0b2ded93cd3f21030d6007 Mon Sep 17 00:00:00 2001 From: jguer Date: Mon, 11 Oct 2021 23:08:18 +0200 Subject: [PATCH] chore(menus): squish clean menu into diff/edit menu --- pkg/menus/clean_menu.go | 81 ++++++----------------------------------- pkg/menus/diff_menu.go | 5 +-- pkg/menus/edit_menu.go | 5 +-- pkg/menus/menu.go | 73 +++++++++++++++++++++---------------- upgrade.go | 4 +- 5 files changed, 58 insertions(+), 110 deletions(-) diff --git a/pkg/menus/clean_menu.go b/pkg/menus/clean_menu.go index aedf3fa..828e088 100644 --- a/pkg/menus/clean_menu.go +++ b/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 + } - toClean, errClean := cleanNumberMenu(buildDir, aurBases, installed, answerClean, noConfirm) + return false + } + + toClean, errClean := selectionMenu(buildDir, bases, installed, gotext.Get("Packages to cleanBuild?"), + noConfirm, answerClean, skipFunc) if errClean != nil { return errClean } diff --git a/pkg/menus/diff_menu.go b/pkg/menus/diff_menu.go index af53a52..1a989c8 100644 --- a/pkg/menus/diff_menu.go +++ b/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 } diff --git a/pkg/menus/edit_menu.go b/pkg/menus/edit_menu.go index 837fe3b..0a68c90 100644 --- a/pkg/menus/edit_menu.go +++ b/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 } diff --git a/pkg/menus/menu.go b/pkg/menus/menu.go index 38d6d04..ed056e6 100644 --- a/pkg/menus/menu.go +++ b/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") { - for i, base := range bases { - pkg := base.Pkgbase() - anyInstalled := base.AnyIsInSet(installed) + if eOtherInclude.Get("n") || eOtherInclude.Get("none") { + return selected, nil + } - if !eIsInclude && eExclude.Get(len(bases)-i) { - continue - } + for i, base := range bases { + pkg := base.Pkgbase() - if anyInstalled && (eOtherInclude.Get("i") || eOtherInclude.Get("installed")) { - toEdit = append(toEdit, base) - continue - } + if skipFunc != nil && skipFunc(pkg) { + continue + } - if !anyInstalled && (eOtherInclude.Get("no") || eOtherInclude.Get("notinstalled")) { - toEdit = append(toEdit, base) - continue - } + anyInstalled := base.AnyIsInSet(installed) - if eOtherInclude.Get("a") || eOtherInclude.Get("all") { - toEdit = append(toEdit, base) - continue - } + if !eIsInclude && eExclude.Get(len(bases)-i) { + continue + } - if eIsInclude && (eInclude.Get(len(bases)-i) || eOtherInclude.Get(pkg)) { - toEdit = append(toEdit, base) - } + if anyInstalled && (eOtherInclude.Get("i") || eOtherInclude.Get("installed")) { + selected = append(selected, base) + continue + } - if !eIsInclude && (!eExclude.Get(len(bases)-i) && !eOtherExclude.Get(pkg)) { - toEdit = append(toEdit, base) - } + 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 } diff --git a/upgrade.go b/upgrade.go index 890f5c8..f3770ab 100644 --- a/upgrade.go +++ b/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) }