mirror of
https://github.com/Jguer/yay.git
synced 2025-11-11 00:05:36 -05:00
Move IntRange definition to types package
This commit is contained in:
parent
b01790f752
commit
bf89b3383c
7
cmd.go
7
cmd.go
@ -8,6 +8,7 @@ import (
|
|||||||
|
|
||||||
alpm "github.com/Jguer/go-alpm"
|
alpm "github.com/Jguer/go-alpm"
|
||||||
"github.com/Jguer/yay/v9/pkg/completion"
|
"github.com/Jguer/yay/v9/pkg/completion"
|
||||||
|
"github.com/Jguer/yay/v9/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmdArgs = makeArguments()
|
var cmdArgs = makeArguments()
|
||||||
@ -350,7 +351,7 @@ func displayNumberMenu(pkgS []string) (err error) {
|
|||||||
return fmt.Errorf("Input too long")
|
return fmt.Errorf("Input too long")
|
||||||
}
|
}
|
||||||
|
|
||||||
include, exclude, _, otherExclude := parseNumberMenu(string(numberBuf))
|
include, exclude, _, otherExclude := types.ParseNumberMenu(string(numberBuf))
|
||||||
arguments := makeArguments()
|
arguments := makeArguments()
|
||||||
|
|
||||||
isInclude := len(exclude) == 0 && len(otherExclude) == 0
|
isInclude := len(exclude) == 0 && len(otherExclude) == 0
|
||||||
@ -366,7 +367,7 @@ func displayNumberMenu(pkgS []string) (err error) {
|
|||||||
return fmt.Errorf("Invalid Sort Mode. Fix with yay -Y --bottomup --save")
|
return fmt.Errorf("Invalid Sort Mode. Fix with yay -Y --bottomup --save")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isInclude && include.get(target)) || (!isInclude && !exclude.get(target)) {
|
if (isInclude && include.Get(target)) || (!isInclude && !exclude.Get(target)) {
|
||||||
arguments.addTarget(pkg.DB().Name() + "/" + pkg.Name())
|
arguments.addTarget(pkg.DB().Name() + "/" + pkg.Name())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -383,7 +384,7 @@ func displayNumberMenu(pkgS []string) (err error) {
|
|||||||
return fmt.Errorf("Invalid Sort Mode. Fix with yay -Y --bottomup --save")
|
return fmt.Errorf("Invalid Sort Mode. Fix with yay -Y --bottomup --save")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isInclude && include.get(target)) || (!isInclude && !exclude.get(target)) {
|
if (isInclude && include.Get(target)) || (!isInclude && !exclude.Get(target)) {
|
||||||
arguments.addTarget("aur/" + pkg.Name)
|
arguments.addTarget("aur/" + pkg.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
16
install.go
16
install.go
@ -544,7 +544,7 @@ func cleanNumberMenu(bases []Base, installed types.StringSet, hasClean bool) ([]
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
cInclude, cExclude, cOtherInclude, cOtherExclude := parseNumberMenu(cleanInput)
|
cInclude, cExclude, cOtherInclude, cOtherExclude := types.ParseNumberMenu(cleanInput)
|
||||||
cIsInclude := len(cExclude) == 0 && len(cOtherExclude) == 0
|
cIsInclude := len(cExclude) == 0 && len(cOtherExclude) == 0
|
||||||
|
|
||||||
if cOtherInclude.Get("abort") || cOtherInclude.Get("ab") {
|
if cOtherInclude.Get("abort") || cOtherInclude.Get("ab") {
|
||||||
@ -564,7 +564,7 @@ func cleanNumberMenu(bases []Base, installed types.StringSet, hasClean bool) ([]
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if !cIsInclude && cExclude.get(len(bases)-i) {
|
if !cIsInclude && cExclude.Get(len(bases)-i) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,12 +583,12 @@ func cleanNumberMenu(bases []Base, installed types.StringSet, hasClean bool) ([]
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if cIsInclude && (cInclude.get(len(bases)-i) || cOtherInclude.Get(pkg)) {
|
if cIsInclude && (cInclude.Get(len(bases)-i) || cOtherInclude.Get(pkg)) {
|
||||||
toClean = append(toClean, base)
|
toClean = append(toClean, base)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if !cIsInclude && (!cExclude.get(len(bases)-i) && !cOtherExclude.Get(pkg)) {
|
if !cIsInclude && (!cExclude.Get(len(bases)-i) && !cOtherExclude.Get(pkg)) {
|
||||||
toClean = append(toClean, base)
|
toClean = append(toClean, base)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -629,7 +629,7 @@ func editDiffNumberMenu(bases []Base, installed types.StringSet, diff bool) ([]B
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eInclude, eExclude, eOtherInclude, eOtherExclude := parseNumberMenu(editInput)
|
eInclude, eExclude, eOtherInclude, eOtherExclude := types.ParseNumberMenu(editInput)
|
||||||
eIsInclude := len(eExclude) == 0 && len(eOtherExclude) == 0
|
eIsInclude := len(eExclude) == 0 && len(eOtherExclude) == 0
|
||||||
|
|
||||||
if eOtherInclude.Get("abort") || eOtherInclude.Get("ab") {
|
if eOtherInclude.Get("abort") || eOtherInclude.Get("ab") {
|
||||||
@ -644,7 +644,7 @@ func editDiffNumberMenu(bases []Base, installed types.StringSet, diff bool) ([]B
|
|||||||
anyInstalled = anyInstalled || installed.Get(b.Name)
|
anyInstalled = anyInstalled || installed.Get(b.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !eIsInclude && eExclude.get(len(bases)-i) {
|
if !eIsInclude && eExclude.Get(len(bases)-i) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -663,11 +663,11 @@ func editDiffNumberMenu(bases []Base, installed types.StringSet, diff bool) ([]B
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if eIsInclude && (eInclude.get(len(bases)-i) || eOtherInclude.Get(pkg)) {
|
if eIsInclude && (eInclude.Get(len(bases)-i) || eOtherInclude.Get(pkg)) {
|
||||||
toEdit = append(toEdit, base)
|
toEdit = append(toEdit, base)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !eIsInclude && (!eExclude.get(len(bases)-i) && !eOtherExclude.Get(pkg)) {
|
if !eIsInclude && (!eExclude.Get(len(bases)-i) && !eOtherExclude.Get(pkg)) {
|
||||||
toEdit = append(toEdit, base)
|
toEdit = append(toEdit, base)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
65
parser.go
65
parser.go
@ -8,7 +8,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode"
|
|
||||||
|
|
||||||
"github.com/Jguer/yay/v9/pkg/types"
|
"github.com/Jguer/yay/v9/pkg/types"
|
||||||
rpc "github.com/mikkeloscar/aur"
|
rpc "github.com/mikkeloscar/aur"
|
||||||
@ -832,70 +831,6 @@ func (parser *arguments) extractYayOptions() {
|
|||||||
config.AURURL = strings.TrimRight(config.AURURL, "/")
|
config.AURURL = strings.TrimRight(config.AURURL, "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
//parses input for number menus split by spaces or commas
|
|
||||||
//supports individual selection: 1 2 3 4
|
|
||||||
//supports range selections: 1-4 10-20
|
|
||||||
//supports negation: ^1 ^1-4
|
|
||||||
//
|
|
||||||
//include and excule holds numbers that should be added and should not be added
|
|
||||||
//respectively. other holds anything that can't be parsed as an int. This is
|
|
||||||
//intended to allow words inside of number menus. e.g. 'all' 'none' 'abort'
|
|
||||||
//of course the implementation is up to the caller, this function mearley parses
|
|
||||||
//the input and organizes it
|
|
||||||
func parseNumberMenu(input string) (intRanges, intRanges, types.StringSet, types.StringSet) {
|
|
||||||
include := make(intRanges, 0)
|
|
||||||
exclude := make(intRanges, 0)
|
|
||||||
otherInclude := make(types.StringSet)
|
|
||||||
otherExclude := make(types.StringSet)
|
|
||||||
|
|
||||||
words := strings.FieldsFunc(input, func(c rune) bool {
|
|
||||||
return unicode.IsSpace(c) || c == ','
|
|
||||||
})
|
|
||||||
|
|
||||||
for _, word := range words {
|
|
||||||
var num1 int
|
|
||||||
var num2 int
|
|
||||||
var err error
|
|
||||||
invert := false
|
|
||||||
other := otherInclude
|
|
||||||
|
|
||||||
if word[0] == '^' {
|
|
||||||
invert = true
|
|
||||||
other = otherExclude
|
|
||||||
word = word[1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
ranges := strings.SplitN(word, "-", 2)
|
|
||||||
|
|
||||||
num1, err = strconv.Atoi(ranges[0])
|
|
||||||
if err != nil {
|
|
||||||
other.Set(strings.ToLower(word))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(ranges) == 2 {
|
|
||||||
num2, err = strconv.Atoi(ranges[1])
|
|
||||||
if err != nil {
|
|
||||||
other.Set(strings.ToLower(word))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
num2 = num1
|
|
||||||
}
|
|
||||||
|
|
||||||
mi := min(num1, num2)
|
|
||||||
ma := max(num1, num2)
|
|
||||||
|
|
||||||
if !invert {
|
|
||||||
include = append(include, makeIntRange(mi, ma))
|
|
||||||
} else {
|
|
||||||
exclude = append(exclude, makeIntRange(mi, ma))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return include, exclude, otherInclude, otherExclude
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crude html parsing, good enough for the arch news
|
// Crude html parsing, good enough for the arch news
|
||||||
// This is only displayed in the terminal so there should be no security
|
// This is only displayed in the terminal so there should be no security
|
||||||
// concerns
|
// concerns
|
||||||
|
|||||||
@ -1,83 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/Jguer/yay/v9/pkg/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
func intRangesEqual(a, b intRanges) bool {
|
|
||||||
if a == nil && b == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if a == nil || b == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(a) != len(b) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
for n := range a {
|
|
||||||
r1 := a[n]
|
|
||||||
r2 := b[n]
|
|
||||||
|
|
||||||
if r1.min != r2.min || r1.max != r2.max {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestParseNumberMenu(t *testing.T) {
|
|
||||||
type result struct {
|
|
||||||
Include intRanges
|
|
||||||
Exclude intRanges
|
|
||||||
OtherInclude types.StringSet
|
|
||||||
OtherExclude types.StringSet
|
|
||||||
}
|
|
||||||
|
|
||||||
inputs := []string{
|
|
||||||
"1 2 3 4 5",
|
|
||||||
"1-10 5-15",
|
|
||||||
"10-5 90-85",
|
|
||||||
"1 ^2 ^10-5 99 ^40-38 ^123 60-62",
|
|
||||||
"abort all none",
|
|
||||||
"a-b ^a-b ^abort",
|
|
||||||
"1\t2 3 4\t\t \t 5",
|
|
||||||
"1 2,3, 4, 5,6 ,7 ,8",
|
|
||||||
"",
|
|
||||||
" \t ",
|
|
||||||
"A B C D E",
|
|
||||||
}
|
|
||||||
|
|
||||||
expected := []result{
|
|
||||||
{intRanges{makeIntRange(1, 1), makeIntRange(2, 2), makeIntRange(3, 3), makeIntRange(4, 4), makeIntRange(5, 5)}, intRanges{}, make(types.StringSet), make(types.StringSet)},
|
|
||||||
{intRanges{makeIntRange(1, 10), makeIntRange(5, 15)}, intRanges{}, make(types.StringSet), make(types.StringSet)},
|
|
||||||
{intRanges{makeIntRange(5, 10), makeIntRange(85, 90)}, intRanges{}, make(types.StringSet), make(types.StringSet)},
|
|
||||||
{intRanges{makeIntRange(1, 1), makeIntRange(99, 99), makeIntRange(60, 62)}, intRanges{makeIntRange(2, 2), makeIntRange(5, 10), makeIntRange(38, 40), makeIntRange(123, 123)}, make(types.StringSet), make(types.StringSet)},
|
|
||||||
{intRanges{}, intRanges{}, types.MakeStringSet("abort", "all", "none"), make(types.StringSet)},
|
|
||||||
{intRanges{}, intRanges{}, types.MakeStringSet("a-b"), types.MakeStringSet("abort", "a-b")},
|
|
||||||
{intRanges{makeIntRange(1, 1), makeIntRange(2, 2), makeIntRange(3, 3), makeIntRange(4, 4), makeIntRange(5, 5)}, intRanges{}, make(types.StringSet), make(types.StringSet)},
|
|
||||||
{intRanges{makeIntRange(1, 1), makeIntRange(2, 2), makeIntRange(3, 3), makeIntRange(4, 4), makeIntRange(5, 5), makeIntRange(6, 6), makeIntRange(7, 7), makeIntRange(8, 8)}, intRanges{}, make(types.StringSet), make(types.StringSet)},
|
|
||||||
{intRanges{}, intRanges{}, make(types.StringSet), make(types.StringSet)},
|
|
||||||
{intRanges{}, intRanges{}, make(types.StringSet), make(types.StringSet)},
|
|
||||||
{intRanges{}, intRanges{}, types.MakeStringSet("a", "b", "c", "d", "e"), make(types.StringSet)},
|
|
||||||
}
|
|
||||||
|
|
||||||
for n, in := range inputs {
|
|
||||||
res := expected[n]
|
|
||||||
include, exclude, otherInclude, otherExclude := parseNumberMenu(in)
|
|
||||||
|
|
||||||
if !intRangesEqual(include, res.Include) ||
|
|
||||||
!intRangesEqual(exclude, res.Exclude) ||
|
|
||||||
!types.StringSetEqual(otherInclude, res.OtherInclude) ||
|
|
||||||
!types.StringSetEqual(otherExclude, res.OtherExclude) {
|
|
||||||
|
|
||||||
t.Fatalf("Test %d Failed: Expected: include=%+v exclude=%+v otherInclude=%+v otherExclude=%+v got include=%+v excluive=%+v otherInclude=%+v otherExclude=%+v",
|
|
||||||
n+1, res.Include, res.Exclude, res.OtherInclude, res.OtherExclude, include, exclude, otherInclude, otherExclude)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
146
pkg/types/intrange.go
Normal file
146
pkg/types/intrange.go
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
package types
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"unicode"
|
||||||
|
)
|
||||||
|
|
||||||
|
// IntRange stores a max and min amount for range
|
||||||
|
type IntRange struct {
|
||||||
|
min int
|
||||||
|
max int
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntRanges is a slice of IntRange
|
||||||
|
type IntRanges []IntRange
|
||||||
|
|
||||||
|
func makeIntRange(min, max int) IntRange {
|
||||||
|
return IntRange{
|
||||||
|
min,
|
||||||
|
max,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get returns true if the argument n is included in the closed range
|
||||||
|
// between min and max
|
||||||
|
func (r IntRange) Get(n int) bool {
|
||||||
|
return n >= r.min && n <= r.max
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get returns true if the argument n is included in the closed range
|
||||||
|
// between min and max of any of the provided IntRanges
|
||||||
|
func (rs IntRanges) Get(n int) bool {
|
||||||
|
for _, r := range rs {
|
||||||
|
if r.Get(n) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Min returns min value between a and b
|
||||||
|
func Min(a, b int) int {
|
||||||
|
if a < b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// Max returns max value between a and b
|
||||||
|
func Max(a, b int) int {
|
||||||
|
if a < b {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func intRangesEqual(a, b IntRanges) bool {
|
||||||
|
if a == nil && b == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if a == nil || b == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(a) != len(b) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for n := range a {
|
||||||
|
r1 := a[n]
|
||||||
|
r2 := b[n]
|
||||||
|
|
||||||
|
if r1.min != r2.min || r1.max != r2.max {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseNumberMenu parses input for number menus split by spaces or commas
|
||||||
|
//supports individual selection: 1 2 3 4
|
||||||
|
//supports range selections: 1-4 10-20
|
||||||
|
//supports negation: ^1 ^1-4
|
||||||
|
//
|
||||||
|
//include and excule holds numbers that should be added and should not be added
|
||||||
|
//respectively. other holds anything that can't be parsed as an int. This is
|
||||||
|
//intended to allow words inside of number menus. e.g. 'all' 'none' 'abort'
|
||||||
|
//of course the implementation is up to the caller, this function mearley parses
|
||||||
|
//the input and organizes it
|
||||||
|
func ParseNumberMenu(input string) (IntRanges, IntRanges, StringSet, StringSet) {
|
||||||
|
include := make(IntRanges, 0)
|
||||||
|
exclude := make(IntRanges, 0)
|
||||||
|
otherInclude := make(StringSet)
|
||||||
|
otherExclude := make(StringSet)
|
||||||
|
|
||||||
|
words := strings.FieldsFunc(input, func(c rune) bool {
|
||||||
|
return unicode.IsSpace(c) || c == ','
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, word := range words {
|
||||||
|
var num1 int
|
||||||
|
var num2 int
|
||||||
|
var err error
|
||||||
|
invert := false
|
||||||
|
other := otherInclude
|
||||||
|
|
||||||
|
if word[0] == '^' {
|
||||||
|
invert = true
|
||||||
|
other = otherExclude
|
||||||
|
word = word[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
ranges := strings.SplitN(word, "-", 2)
|
||||||
|
|
||||||
|
num1, err = strconv.Atoi(ranges[0])
|
||||||
|
if err != nil {
|
||||||
|
other.Set(strings.ToLower(word))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(ranges) == 2 {
|
||||||
|
num2, err = strconv.Atoi(ranges[1])
|
||||||
|
if err != nil {
|
||||||
|
other.Set(strings.ToLower(word))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
num2 = num1
|
||||||
|
}
|
||||||
|
|
||||||
|
mi := Min(num1, num2)
|
||||||
|
ma := Max(num1, num2)
|
||||||
|
|
||||||
|
if !invert {
|
||||||
|
include = append(include, makeIntRange(mi, ma))
|
||||||
|
} else {
|
||||||
|
exclude = append(exclude, makeIntRange(mi, ma))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return include, exclude, otherInclude, otherExclude
|
||||||
|
}
|
||||||
56
pkg/types/intrange_test.go
Normal file
56
pkg/types/intrange_test.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package types
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestParseNumberMenu(t *testing.T) {
|
||||||
|
type result struct {
|
||||||
|
Include IntRanges
|
||||||
|
Exclude IntRanges
|
||||||
|
OtherInclude StringSet
|
||||||
|
OtherExclude StringSet
|
||||||
|
}
|
||||||
|
|
||||||
|
inputs := []string{
|
||||||
|
"1 2 3 4 5",
|
||||||
|
"1-10 5-15",
|
||||||
|
"10-5 90-85",
|
||||||
|
"1 ^2 ^10-5 99 ^40-38 ^123 60-62",
|
||||||
|
"abort all none",
|
||||||
|
"a-b ^a-b ^abort",
|
||||||
|
"-9223372036854775809-9223372036854775809",
|
||||||
|
"1\t2 3 4\t\t \t 5",
|
||||||
|
"1 2,3, 4, 5,6 ,7 ,8",
|
||||||
|
"",
|
||||||
|
" \t ",
|
||||||
|
"A B C D E",
|
||||||
|
}
|
||||||
|
|
||||||
|
expected := []result{
|
||||||
|
{IntRanges{makeIntRange(1, 1), makeIntRange(2, 2), makeIntRange(3, 3), makeIntRange(4, 4), makeIntRange(5, 5)}, IntRanges{}, make(StringSet), make(StringSet)},
|
||||||
|
{IntRanges{makeIntRange(1, 10), makeIntRange(5, 15)}, IntRanges{}, make(StringSet), make(StringSet)},
|
||||||
|
{IntRanges{makeIntRange(5, 10), makeIntRange(85, 90)}, IntRanges{}, make(StringSet), make(StringSet)},
|
||||||
|
{IntRanges{makeIntRange(1, 1), makeIntRange(99, 99), makeIntRange(60, 62)}, IntRanges{makeIntRange(2, 2), makeIntRange(5, 10), makeIntRange(38, 40), makeIntRange(123, 123)}, make(StringSet), make(StringSet)},
|
||||||
|
{IntRanges{}, IntRanges{}, MakeStringSet("abort", "all", "none"), make(StringSet)},
|
||||||
|
{IntRanges{}, IntRanges{}, MakeStringSet("a-b"), MakeStringSet("abort", "a-b")},
|
||||||
|
{IntRanges{}, IntRanges{}, MakeStringSet("-9223372036854775809-9223372036854775809"), make(StringSet)},
|
||||||
|
{IntRanges{makeIntRange(1, 1), makeIntRange(2, 2), makeIntRange(3, 3), makeIntRange(4, 4), makeIntRange(5, 5)}, IntRanges{}, make(StringSet), make(StringSet)},
|
||||||
|
{IntRanges{makeIntRange(1, 1), makeIntRange(2, 2), makeIntRange(3, 3), makeIntRange(4, 4), makeIntRange(5, 5), makeIntRange(6, 6), makeIntRange(7, 7), makeIntRange(8, 8)}, IntRanges{}, make(StringSet), make(StringSet)},
|
||||||
|
{IntRanges{}, IntRanges{}, make(StringSet), make(StringSet)},
|
||||||
|
{IntRanges{}, IntRanges{}, make(StringSet), make(StringSet)},
|
||||||
|
{IntRanges{}, IntRanges{}, MakeStringSet("a", "b", "c", "d", "e"), make(StringSet)},
|
||||||
|
}
|
||||||
|
|
||||||
|
for n, in := range inputs {
|
||||||
|
res := expected[n]
|
||||||
|
include, exclude, otherInclude, otherExclude := ParseNumberMenu(in)
|
||||||
|
|
||||||
|
if !intRangesEqual(include, res.Include) ||
|
||||||
|
!intRangesEqual(exclude, res.Exclude) ||
|
||||||
|
!StringSetEqual(otherInclude, res.OtherInclude) ||
|
||||||
|
!StringSetEqual(otherExclude, res.OtherExclude) {
|
||||||
|
|
||||||
|
t.Fatalf("Test %d Failed: Expected: include=%+v exclude=%+v otherInclude=%+v otherExclude=%+v got include=%+v excluive=%+v otherInclude=%+v otherExclude=%+v",
|
||||||
|
n+1, res.Include, res.Exclude, res.OtherInclude, res.OtherExclude, include, exclude, otherInclude, otherExclude)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
4
print.go
4
print.go
@ -177,8 +177,8 @@ func (u upSlice) print() {
|
|||||||
packNameLen := len(pack.StylizedNameWithRepository())
|
packNameLen := len(pack.StylizedNameWithRepository())
|
||||||
version, _ := getVersionDiff(pack.LocalVersion, pack.RemoteVersion)
|
version, _ := getVersionDiff(pack.LocalVersion, pack.RemoteVersion)
|
||||||
packVersionLen := len(version)
|
packVersionLen := len(version)
|
||||||
longestName = max(packNameLen, longestName)
|
longestName = types.Max(packNameLen, longestName)
|
||||||
longestVersion = max(packVersionLen, longestVersion)
|
longestVersion = types.Max(packVersionLen, longestVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
namePadding := fmt.Sprintf("%%-%ds ", longestName)
|
namePadding := fmt.Sprintf("%%-%ds ", longestName)
|
||||||
|
|||||||
2
query.go
2
query.go
@ -497,7 +497,7 @@ func aurInfo(names []string, warnings *aurWarnings) ([]*rpc.Pkg, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for n := 0; n < len(names); n += config.RequestSplitN {
|
for n := 0; n < len(names); n += config.RequestSplitN {
|
||||||
max := min(len(names), n+config.RequestSplitN)
|
max := types.Min(len(names), n+config.RequestSplitN)
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go makeRequest(n, max)
|
go makeRequest(n, max)
|
||||||
}
|
}
|
||||||
|
|||||||
10
upgrade.go
10
upgrade.go
@ -359,7 +359,7 @@ func upgradePkgs(aurUp, repoUp upSlice) (types.StringSet, types.StringSet, error
|
|||||||
//upgrade menu asks you which packages to NOT upgrade so in this case
|
//upgrade menu asks you which packages to NOT upgrade so in this case
|
||||||
//include and exclude are kind of swapped
|
//include and exclude are kind of swapped
|
||||||
//include, exclude, other := parseNumberMenu(string(numberBuf))
|
//include, exclude, other := parseNumberMenu(string(numberBuf))
|
||||||
include, exclude, otherInclude, otherExclude := parseNumberMenu(numbers)
|
include, exclude, otherInclude, otherExclude := types.ParseNumberMenu(numbers)
|
||||||
|
|
||||||
isInclude := len(exclude) == 0 && len(otherExclude) == 0
|
isInclude := len(exclude) == 0 && len(otherExclude) == 0
|
||||||
|
|
||||||
@ -368,11 +368,11 @@ func upgradePkgs(aurUp, repoUp upSlice) (types.StringSet, types.StringSet, error
|
|||||||
ignore.Set(pkg.Name)
|
ignore.Set(pkg.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if isInclude && !include.get(len(repoUp)-i+len(aurUp)) {
|
if isInclude && !include.Get(len(repoUp)-i+len(aurUp)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if !isInclude && (exclude.get(len(repoUp)-i+len(aurUp)) || otherExclude.Get(pkg.Repository)) {
|
if !isInclude && (exclude.Get(len(repoUp)-i+len(aurUp)) || otherExclude.Get(pkg.Repository)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,11 +384,11 @@ func upgradePkgs(aurUp, repoUp upSlice) (types.StringSet, types.StringSet, error
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if isInclude && !include.get(len(aurUp)-i) {
|
if isInclude && !include.Get(len(aurUp)-i) {
|
||||||
aurNames.Set(pkg.Name)
|
aurNames.Set(pkg.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !isInclude && (exclude.get(len(aurUp)-i) || otherExclude.Get(pkg.Repository)) {
|
if !isInclude && (exclude.Get(len(aurUp)-i) || otherExclude.Get(pkg.Repository)) {
|
||||||
aurNames.Set(pkg.Name)
|
aurNames.Set(pkg.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
42
utils.go
42
utils.go
@ -6,48 +6,6 @@ import (
|
|||||||
|
|
||||||
const gitEmptyTree = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
|
const gitEmptyTree = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
|
||||||
|
|
||||||
type intRange struct {
|
|
||||||
min int
|
|
||||||
max int
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeIntRange(min, max int) intRange {
|
|
||||||
return intRange{
|
|
||||||
min,
|
|
||||||
max,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r intRange) get(n int) bool {
|
|
||||||
return n >= r.min && n <= r.max
|
|
||||||
}
|
|
||||||
|
|
||||||
type intRanges []intRange
|
|
||||||
|
|
||||||
func (rs intRanges) get(n int) bool {
|
|
||||||
for _, r := range rs {
|
|
||||||
if r.get(n) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func min(a, b int) int {
|
|
||||||
if a < b {
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
func max(a, b int) int {
|
|
||||||
if a < b {
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
|
|
||||||
func stringSliceEqual(a, b []string) bool {
|
func stringSliceEqual(a, b []string) bool {
|
||||||
if a == nil && b == nil {
|
if a == nil && b == nil {
|
||||||
return true
|
return true
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user