Use parseNumberMenu() for yogurt mode

This commit is contained in:
morganamilo 2018-03-09 05:25:05 +00:00
parent 2aadd1931c
commit 287bac04c9
No known key found for this signature in database
GPG key ID: 6FE9E7996B0B082E

97
cmd.go
View file

@ -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