Skip to content

Commit

Permalink
Add flags for sort order and automating menu input
Browse files Browse the repository at this point in the history
Added:

--sortby <votes|popularity|id|baseid|name|base|submitted|modified>
--answerclean
--answeredit
--answerupgrade
--noanswerclean
--noansweredit
--noanswerupgrade

TODO: docs and completion
  • Loading branch information
Morganamilo committed Apr 4, 2018
1 parent 794e8dd commit 8556acd
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 30 deletions.
16 changes: 15 additions & 1 deletion cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ func handleCmd() (err error) {
if shouldSaveConfig {
config.saveConfig()
}

if cmdArgs.existsArg("h", "help") {
err = handleHelp()
return
Expand Down Expand Up @@ -214,6 +214,8 @@ func handleConfig(option, value string) bool {
config.SortMode = TopDown
case "bottomup":
config.SortMode = BottomUp
case "sortby":
config.SortBy = value
case "noconfirm":
config.NoConfirm = true
case "redownload":
Expand All @@ -230,6 +232,18 @@ func handleConfig(option, value string) bool {
config.ReBuild = "tree"
case "norebuild":
config.ReBuild = "no"
case "answerclean":
config.AnswerClean = value
case "noanswerclean":
config.AnswerClean = ""
case "answeredit":
config.AnswerEdit = value
case "noansweredit":
config.AnswerEdit = ""
case "answerupgrade":
config.AnswerUpgrade = value
case "noanswerupgrade":
config.AnswerUpgrade = ""
case "gpgflags":
config.GpgFlags = value
case "mflags":
Expand Down
29 changes: 29 additions & 0 deletions config.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"bufio"
"bytes"
"encoding/json"
"fmt"
Expand Down Expand Up @@ -33,10 +34,14 @@ type Configuration struct {
TarBin string `json:"tarbin"`
ReDownload string `json:"redownload"`
ReBuild string `json:"rebuild"`
AnswerClean string `json:"answerclean"`
AnswerEdit string `json:"answeredit"`
AnswerUpgrade string `json:"answerupgrade"`
GitBin string `json:"gitbin"`
GpgBin string `json:"gpgbin"`
GpgFlags string `json:"gpgflags"`
MFlags string `json:"mflags"`
SortBy string `json:"sortby"`
RequestSplitN int `json:"requestsplitn"`
SearchMode int `json:"-"`
SortMode int `json:"sortmode"`
Expand Down Expand Up @@ -134,6 +139,7 @@ func defaultSettings(config *Configuration) {
config.GpgFlags = ""
config.MFlags = ""
config.SortMode = BottomUp
config.SortBy = "votes"
config.SudoLoop = false
config.TarBin = "bsdtar"
config.GitBin = "git"
Expand All @@ -142,6 +148,9 @@ func defaultSettings(config *Configuration) {
config.RequestSplitN = 150
config.ReDownload = "no"
config.ReBuild = "no"
config.AnswerClean = ""
config.AnswerEdit = ""
config.AnswerUpgrade = ""
}

// Editor returns the preferred system editor.
Expand Down Expand Up @@ -223,6 +232,26 @@ func continueTask(s string, def string) (cont bool) {
return true
}

func getInput(defaultValue string) (string, error) {
if defaultValue != "" {
fmt.Println(defaultValue)
return defaultValue, nil
}

reader := bufio.NewReader(os.Stdin)

buf, overflow, err := reader.ReadLine()
if err != nil {
return "", err
}

if overflow {
return "", fmt.Errorf("Input too long")
}

return string(buf), nil
}

func (config Configuration) String() string {
var buf bytes.Buffer
enc := json.NewEncoder(&buf)
Expand Down
20 changes: 2 additions & 18 deletions install.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package main

import (
"bufio"
"fmt"
"os"
"os/exec"
Expand Down Expand Up @@ -337,19 +336,11 @@ func cleanEditNumberMenu(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg, installed
fmt.Println(bold(green(arrow + " Packages to cleanBuild?")))
fmt.Println(bold(green(arrow) + cyan(" [N]one ") + green("[A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)")))
fmt.Print(bold(green(arrow + " ")))
reader := bufio.NewReader(os.Stdin)

numberBuf, overflow, err := reader.ReadLine()
cleanInput, err := getInput(config.AnswerClean)
if err != nil {
return nil, nil, err
}

if overflow {
return nil, nil, fmt.Errorf("Input too long")
}

cleanInput := string(numberBuf)

cInclude, cExclude, cOtherInclude, cOtherExclude := parseNumberMenu(cleanInput)
cIsInclude := len(cExclude) == 0 && len(cOtherExclude) == 0

Expand Down Expand Up @@ -398,19 +389,12 @@ func cleanEditNumberMenu(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg, installed
fmt.Println(bold(green(arrow) + cyan(" [N]one ") + green("[A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)")))

fmt.Print(bold(green(arrow + " ")))
reader := bufio.NewReader(os.Stdin)

numberBuf, overflow, err := reader.ReadLine()
editInput, err := getInput(config.AnswerEdit)
if err != nil {
return nil, nil, err
}

if overflow {
return nil, nil, fmt.Errorf("Input too long")
}

editInput := string(numberBuf)

eInclude, eExclude, eOtherInclude, eOtherExclude := parseNumberMenu(editInput)
eIsInclude := len(eExclude) == 0 && len(eOtherExclude) == 0

Expand Down
8 changes: 8 additions & 0 deletions parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,14 @@ func hasParam(arg string) bool {
return true
case "requestsplitn":
return true
case "answerclean":
return true
case "answeredit":
return true
case "answerupgrade":
return true
case "sortby":
return true
default:
return false
}
Expand Down
26 changes: 24 additions & 2 deletions query.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,32 @@ func (q aurQuery) Len() int {
}

func (q aurQuery) Less(i, j int) bool {
var result bool

switch config.SortBy {
case "votes":
result = q[i].NumVotes > q[j].NumVotes
case "popularity":
result = q[i].Popularity > q[j].Popularity
case "name":
result = lessRunes([]rune(q[i].Name), []rune(q[j].Name))
case "base":
result = lessRunes([]rune(q[i].PackageBase), []rune(q[j].PackageBase))
case "submitted":
result = q[i].FirstSubmitted < q[j].FirstSubmitted
case "modified":
result = q[i].LastModified < q[j].LastModified
case "id":
result = q[i].ID < q[j].ID
case "baseid":
result = q[i].PackageBaseID < q[j].PackageBaseID
}

if config.SortMode == BottomUp {
return q[i].NumVotes < q[j].NumVotes
return !result
}
return q[i].NumVotes > q[j].NumVotes

return result
}

func (q aurQuery) Swap(i, j int) {
Expand Down
11 changes: 2 additions & 9 deletions upgrade.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package main

import (
"bufio"
"fmt"
"os"
"sort"
"strings"
"sync"
Expand Down Expand Up @@ -288,21 +286,16 @@ func upgradePkgs(aurUp, repoUp upSlice) (stringSet, stringSet, error) {

fmt.Println(bold(green(arrow + " Packages to not upgrade (eg: 1 2 3, 1-3, ^4 or repo name)")))
fmt.Print(bold(green(arrow + " ")))
reader := bufio.NewReader(os.Stdin)

numberBuf, overflow, err := reader.ReadLine()
numbers, err := getInput(config.AnswerUpgrade)
if err != nil {
return nil, nil, err
}

if overflow {
return nil, nil, fmt.Errorf("Input too long")
}

//upgrade menu asks you which packages to NOT upgrade so in this case
//include and exclude are kind of swaped
//include, exclude, other := parseNumberMenu(string(numberBuf))
include, exclude, otherInclude, otherExclude := parseNumberMenu(string(numberBuf))
include, exclude, otherInclude, otherExclude := parseNumberMenu(numbers)

isInclude := len(exclude) == 0 && len(otherExclude) == 0

Expand Down

0 comments on commit 8556acd

Please sign in to comment.