mirror of
https://github.com/Jguer/yay
synced 2024-10-05 23:59:13 +00:00
Use parseNumberMenu() for yogurt mode
This commit is contained in:
parent
2aadd1931c
commit
287bac04c9
97
cmd.go
97
cmd.go
|
@ -588,9 +588,6 @@ func removeListFromList(src, target []string) []string {
|
|||
|
||||
// NumberMenu presents a CLI for selecting packages to install.
|
||||
func numberMenu(pkgS []string, flags []string) (err error) {
|
||||
//func numberMenu(cmdArgs *arguments) (err error) {
|
||||
var num int
|
||||
|
||||
aurQ, err := narrowSearch(pkgS, true)
|
||||
if err != nil {
|
||||
fmt.Println("Error during AUR search:", err)
|
||||
|
@ -615,83 +612,55 @@ func numberMenu(pkgS []string, flags []string) (err error) {
|
|||
|
||||
fmt.Println(bold(green(arrow + " Packages to install (eg: 1 2 3, 1-3 or ^4)")))
|
||||
fmt.Print(bold(green(arrow + " ")))
|
||||
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
numberBuf, overflow, err := reader.ReadLine()
|
||||
if err != nil || overflow {
|
||||
fmt.Println(err)
|
||||
return
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
numberString := string(numberBuf)
|
||||
var aurI, aurNI, repoNI, repoI []string
|
||||
result := strings.Fields(numberString)
|
||||
for _, numS := range result {
|
||||
negate := numS[0] == '^'
|
||||
if negate {
|
||||
numS = numS[1:]
|
||||
}
|
||||
var numbers []int
|
||||
num, err = strconv.Atoi(numS)
|
||||
if err != nil {
|
||||
numbers, err = BuildRange(numS)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
numbers = []int{num}
|
||||
if overflow {
|
||||
return fmt.Errorf("Input too long")
|
||||
}
|
||||
|
||||
include, exclude, _, otherExclude := parseNumberMenu(string(numberBuf))
|
||||
arguments := makeArguments()
|
||||
|
||||
isInclude := len(exclude) == 0 && len(otherExclude) == 0
|
||||
|
||||
for i, pkg := range repoQ {
|
||||
target := len(repoQ) - i
|
||||
if config.SortMode == TopDown {
|
||||
target = i + 1
|
||||
}
|
||||
|
||||
// Install package
|
||||
for _, x := range numbers {
|
||||
var target string
|
||||
if x > numaq+numpq || x <= 0 {
|
||||
continue
|
||||
} else if x > numpq {
|
||||
if config.SortMode == BottomUp {
|
||||
target = aurQ[numaq+numpq-x].Name
|
||||
} else {
|
||||
target = aurQ[x-numpq-1].Name
|
||||
}
|
||||
if negate {
|
||||
aurNI = append(aurNI, target)
|
||||
} else {
|
||||
aurI = append(aurI, target)
|
||||
}
|
||||
} else {
|
||||
if config.SortMode == BottomUp {
|
||||
target = repoQ[numpq-x].Name()
|
||||
} else {
|
||||
target = repoQ[x-1].Name()
|
||||
}
|
||||
if negate {
|
||||
repoNI = append(repoNI, target)
|
||||
} else {
|
||||
repoI = append(repoI, target)
|
||||
}
|
||||
}
|
||||
if isInclude && include.get(target) {
|
||||
arguments.addTarget(pkg.Name())
|
||||
}
|
||||
if !isInclude && !exclude.get(target) {
|
||||
arguments.addTarget(pkg.Name())
|
||||
}
|
||||
}
|
||||
|
||||
if len(repoI) == 0 && len(aurI) == 0 &&
|
||||
(len(aurNI) > 0 || len(repoNI) > 0) {
|
||||
// If no package was specified, only exclusions, exclude from all the
|
||||
// packages
|
||||
for _, pack := range aurQ {
|
||||
aurI = append(aurI, pack.Name)
|
||||
for i, pkg := range aurQ {
|
||||
target := len(aurQ) - i + len(repoQ)
|
||||
if config.SortMode == TopDown {
|
||||
target = i + 1 + len(repoQ)
|
||||
}
|
||||
for _, pack := range repoQ {
|
||||
repoI = append(repoI, pack.Name())
|
||||
|
||||
if isInclude && include.get(target) {
|
||||
arguments.addTarget(pkg.Name)
|
||||
}
|
||||
if !isInclude && !exclude.get(target) {
|
||||
arguments.addTarget(pkg.Name)
|
||||
}
|
||||
}
|
||||
aurI = removeListFromList(aurNI, aurI)
|
||||
repoI = removeListFromList(repoNI, repoI)
|
||||
|
||||
if config.SudoLoop {
|
||||
sudoLoopBackground()
|
||||
}
|
||||
arguments := makeArguments()
|
||||
arguments.addTarget(repoI...)
|
||||
arguments.addTarget(aurI...)
|
||||
|
||||
err = install(arguments)
|
||||
|
||||
return err
|
||||
|
|
Loading…
Reference in a new issue