mirror of
https://github.com/Jguer/yay.git
synced 2025-12-07 00:03:15 -05:00
fix(parser): squash globals into options
This commit is contained in:
parent
d507e024bd
commit
2f88858ce6
@ -177,7 +177,13 @@ func install(parser *settings.Arguments, alpmHandle *alpm.Handle) (err error) {
|
||||
|
||||
parser.Op = "S"
|
||||
parser.DelArg("y", "refresh")
|
||||
parser.Options["ignore"] = arguments.Options["ignore"]
|
||||
if arguments.ExistsArg("ignore") {
|
||||
if parser.ExistsArg("ignore") {
|
||||
parser.Options["ignore"].Args = append(parser.Options["ignore"].Args, arguments.Options["ignore"].Args...)
|
||||
} else {
|
||||
parser.Options["ignore"] = arguments.Options["ignore"]
|
||||
}
|
||||
}
|
||||
return show(passToPacman(parser))
|
||||
}
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ func Show(alpmHandle *alpm.Handle, aurURL, completionPath string, interval int,
|
||||
return err
|
||||
}
|
||||
|
||||
in, err := os.OpenFile(completionPath, os.O_RDWR|os.O_CREATE, 0644)
|
||||
in, err := os.OpenFile(completionPath, os.O_RDWR|os.O_CREATE, 0o644)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -35,7 +35,7 @@ func Update(alpmHandle *alpm.Handle, aurURL, completionPath string, interval int
|
||||
info, err := os.Stat(completionPath)
|
||||
|
||||
if os.IsNotExist(err) || (interval != -1 && time.Since(info.ModTime()).Hours() >= float64(interval*24)) || force {
|
||||
errd := os.MkdirAll(filepath.Dir(completionPath), 0755)
|
||||
errd := os.MkdirAll(filepath.Dir(completionPath), 0o755)
|
||||
if errd != nil {
|
||||
return errd
|
||||
}
|
||||
|
||||
@ -67,7 +67,7 @@ func (config *Configuration) SaveConfig(configPath string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
in, err := os.OpenFile(configPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
|
||||
in, err := os.OpenFile(configPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o644)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package settings
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -12,7 +13,8 @@ import (
|
||||
)
|
||||
|
||||
type Option struct {
|
||||
Args []string
|
||||
Global bool
|
||||
Args []string
|
||||
}
|
||||
|
||||
func (o *Option) Add(arg string) {
|
||||
@ -34,28 +36,36 @@ func (o *Option) Set(arg string) {
|
||||
o.Args = []string{arg}
|
||||
}
|
||||
|
||||
func (o *Option) String() string {
|
||||
return fmt.Sprintf("Global:%v Args:%v", o.Global, o.Args)
|
||||
}
|
||||
|
||||
// Arguments Parses command line arguments in a way we can interact with programmatically but
|
||||
// also in a way that can easily be passed to pacman later on.
|
||||
type Arguments struct {
|
||||
Op string
|
||||
Options map[string]*Option
|
||||
Globals map[string]*Option
|
||||
Targets []string
|
||||
}
|
||||
|
||||
func (parser *Arguments) String() string {
|
||||
return fmt.Sprintf("Op:%v Options:%+v Targets: %v", parser.Op, parser.Options, parser.Targets)
|
||||
}
|
||||
|
||||
func MakeArguments() *Arguments {
|
||||
return &Arguments{
|
||||
"",
|
||||
make(map[string]*Option),
|
||||
make(map[string]*Option),
|
||||
make([]string, 0),
|
||||
}
|
||||
}
|
||||
|
||||
func (parser *Arguments) CopyGlobal() *Arguments {
|
||||
cp := MakeArguments()
|
||||
for k, v := range parser.Globals {
|
||||
cp.Globals[k] = v
|
||||
for k, v := range parser.Options {
|
||||
if v.Global {
|
||||
cp.Options[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
return cp
|
||||
@ -70,10 +80,6 @@ func (parser *Arguments) Copy() (cp *Arguments) {
|
||||
cp.Options[k] = v
|
||||
}
|
||||
|
||||
for k, v := range parser.Globals {
|
||||
cp.Globals[k] = v
|
||||
}
|
||||
|
||||
cp.Targets = make([]string, len(parser.Targets))
|
||||
copy(cp.Targets, parser.Targets)
|
||||
|
||||
@ -83,7 +89,6 @@ func (parser *Arguments) Copy() (cp *Arguments) {
|
||||
func (parser *Arguments) DelArg(options ...string) {
|
||||
for _, option := range options {
|
||||
delete(parser.Options, option)
|
||||
delete(parser.Globals, option)
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,16 +166,13 @@ func (parser *Arguments) addParam(option, arg string) error {
|
||||
return parser.addOP(option)
|
||||
}
|
||||
|
||||
if parser.Options[option] == nil {
|
||||
parser.Options[option] = &Option{}
|
||||
}
|
||||
parser.Options[option].Add(arg)
|
||||
|
||||
if isGlobal(option) {
|
||||
if parser.Globals[option] == nil {
|
||||
parser.Globals[option] = &Option{}
|
||||
}
|
||||
parser.Globals[option].Add(arg)
|
||||
} else {
|
||||
if parser.Options[option] == nil {
|
||||
parser.Options[option] = &Option{}
|
||||
}
|
||||
parser.Options[option].Add(arg)
|
||||
parser.Options[option].Global = true
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -188,13 +190,7 @@ func (parser *Arguments) AddArg(options ...string) error {
|
||||
// Multiple args acts as an OR operator
|
||||
func (parser *Arguments) ExistsArg(options ...string) bool {
|
||||
for _, option := range options {
|
||||
_, exists := parser.Options[option]
|
||||
if exists {
|
||||
return true
|
||||
}
|
||||
|
||||
_, exists = parser.Globals[option]
|
||||
if exists {
|
||||
if _, exists := parser.Options[option]; exists {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@ -207,11 +203,6 @@ func (parser *Arguments) GetArg(options ...string) (arg string, double, exists b
|
||||
if exists {
|
||||
return value.First(), len(value.Args) >= 2, len(value.Args) >= 1
|
||||
}
|
||||
|
||||
value, exists = parser.Globals[option]
|
||||
if exists {
|
||||
return value.First(), len(value.Args) >= 2, len(value.Args) >= 1
|
||||
}
|
||||
}
|
||||
|
||||
return arg, false, false
|
||||
@ -228,17 +219,10 @@ func (parser *Arguments) ClearTargets() {
|
||||
// Multiple args acts as an OR operator
|
||||
func (parser *Arguments) ExistsDouble(options ...string) bool {
|
||||
for _, option := range options {
|
||||
value, exists := parser.Options[option]
|
||||
if exists {
|
||||
return len(value.Args) >= 2
|
||||
}
|
||||
|
||||
value, exists = parser.Globals[option]
|
||||
if exists {
|
||||
if value, exists := parser.Options[option]; exists {
|
||||
return len(value.Args) >= 2
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
@ -252,7 +236,7 @@ func (parser *Arguments) FormatArgs() (args []string) {
|
||||
args = append(args, op)
|
||||
|
||||
for option, arg := range parser.Options {
|
||||
if option == "--" {
|
||||
if arg.Global || option == "--" {
|
||||
continue
|
||||
}
|
||||
|
||||
@ -265,12 +249,14 @@ func (parser *Arguments) FormatArgs() (args []string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (parser *Arguments) FormatGlobals() (args []string) {
|
||||
for option, arg := range parser.Globals {
|
||||
for option, arg := range parser.Options {
|
||||
if !arg.Global {
|
||||
continue
|
||||
}
|
||||
formattedOption := formatArg(option)
|
||||
|
||||
for _, value := range arg.Args {
|
||||
@ -280,7 +266,6 @@ func (parser *Arguments) FormatGlobals() (args []string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return args
|
||||
}
|
||||
|
||||
@ -831,12 +816,6 @@ func (parser *Arguments) extractYayOptions(config *Configuration) {
|
||||
}
|
||||
}
|
||||
|
||||
for option, value := range parser.Globals {
|
||||
if handleConfig(config, option, value.First()) {
|
||||
parser.DelArg(option)
|
||||
}
|
||||
}
|
||||
|
||||
rpc.AURURL = strings.TrimRight(config.AURURL, "/") + "/rpc.php?"
|
||||
config.AURURL = strings.TrimRight(config.AURURL, "/")
|
||||
}
|
||||
|
||||
@ -106,7 +106,6 @@ func TestMakeArguments(t *testing.T) {
|
||||
args := MakeArguments()
|
||||
assert.NotNil(t, args)
|
||||
assert.Equal(t, "", args.Op)
|
||||
assert.Empty(t, args.Globals)
|
||||
assert.Empty(t, args.Options)
|
||||
assert.Empty(t, args.Targets)
|
||||
}
|
||||
@ -115,7 +114,6 @@ func TestArguments_CopyGlobal(t *testing.T) {
|
||||
type fields struct {
|
||||
Op string
|
||||
Options map[string]*Option
|
||||
Globals map[string]*Option
|
||||
Targets []string
|
||||
}
|
||||
tests := []struct {
|
||||
@ -124,19 +122,17 @@ func TestArguments_CopyGlobal(t *testing.T) {
|
||||
want *Arguments
|
||||
}{
|
||||
{name: "simple", fields: fields{
|
||||
Op: "Q",
|
||||
Options: map[string]*Option{"a": {}},
|
||||
Globals: map[string]*Option{"arch": {
|
||||
Op: "Q",
|
||||
Options: map[string]*Option{"a": {}, "arch": {Global: true,
|
||||
Args: []string{"x86_x64"},
|
||||
}, "boo": {Args: []string{"a", "b"}},
|
||||
}, "boo": {Global: true, Args: []string{"a", "b"}},
|
||||
},
|
||||
Targets: []string{"a", "b"},
|
||||
}, want: &Arguments{
|
||||
Op: "",
|
||||
Options: map[string]*Option{},
|
||||
Globals: map[string]*Option{"arch": {
|
||||
Op: "",
|
||||
Options: map[string]*Option{"arch": {Global: true,
|
||||
Args: []string{"x86_x64"},
|
||||
}, "boo": {Args: []string{"a", "b"}},
|
||||
}, "boo": {Global: true, Args: []string{"a", "b"}},
|
||||
},
|
||||
Targets: []string{},
|
||||
}},
|
||||
@ -146,14 +142,12 @@ func TestArguments_CopyGlobal(t *testing.T) {
|
||||
parser := &Arguments{
|
||||
Op: tt.fields.Op,
|
||||
Options: tt.fields.Options,
|
||||
Globals: tt.fields.Globals,
|
||||
Targets: tt.fields.Targets,
|
||||
}
|
||||
got := parser.CopyGlobal()
|
||||
assert.NotEqualValues(t, tt.fields.Options, got.Options)
|
||||
assert.NotEqualValues(t, tt.fields.Targets, got.Targets)
|
||||
assert.NotEqual(t, tt.fields.Op, got.Op)
|
||||
assert.EqualValues(t, tt.fields.Globals, got.Globals)
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
@ -163,7 +157,6 @@ func TestArguments_Copy(t *testing.T) {
|
||||
type fields struct {
|
||||
Op string
|
||||
Options map[string]*Option
|
||||
Globals map[string]*Option
|
||||
Targets []string
|
||||
}
|
||||
tests := []struct {
|
||||
@ -172,19 +165,17 @@ func TestArguments_Copy(t *testing.T) {
|
||||
want *Arguments
|
||||
}{
|
||||
{name: "simple", fields: fields{
|
||||
Op: "Q",
|
||||
Options: map[string]*Option{"a": {}},
|
||||
Globals: map[string]*Option{"arch": {
|
||||
Args: []string{"x86_x64"},
|
||||
}, "boo": {Args: []string{"a", "b"}},
|
||||
Op: "Q",
|
||||
Options: map[string]*Option{"a": {}, "arch": {
|
||||
Args: []string{"x86_x64"}, Global: true,
|
||||
}, "boo": {Args: []string{"a", "b"}, Global: true},
|
||||
},
|
||||
Targets: []string{"a", "b"},
|
||||
}, want: &Arguments{
|
||||
Op: "Q",
|
||||
Options: map[string]*Option{"a": {}},
|
||||
Globals: map[string]*Option{"arch": {
|
||||
Op: "Q",
|
||||
Options: map[string]*Option{"a": {}, "arch": {Global: true,
|
||||
Args: []string{"x86_x64"},
|
||||
}, "boo": {Args: []string{"a", "b"}},
|
||||
}, "boo": {Args: []string{"a", "b"}, Global: true},
|
||||
},
|
||||
Targets: []string{"a", "b"},
|
||||
}},
|
||||
@ -194,7 +185,6 @@ func TestArguments_Copy(t *testing.T) {
|
||||
parser := &Arguments{
|
||||
Op: tt.fields.Op,
|
||||
Options: tt.fields.Options,
|
||||
Globals: tt.fields.Globals,
|
||||
Targets: tt.fields.Targets,
|
||||
}
|
||||
got := parser.Copy()
|
||||
@ -210,5 +200,4 @@ func TestArguments_DelArg(t *testing.T) {
|
||||
args.addParam("ask", "arg")
|
||||
args.DelArg("arch", "ask")
|
||||
assert.Empty(t, args.Options)
|
||||
assert.Empty(t, args.Globals)
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ func MakeRuntime() (*Runtime, error) {
|
||||
|
||||
func initDir(dir string) error {
|
||||
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||||
if err = os.MkdirAll(dir, 0755); err != nil {
|
||||
if err = os.MkdirAll(dir, 0o755); err != nil {
|
||||
return errors.New(gotext.Get("failed to create config directory '%s': %s", dir, err))
|
||||
}
|
||||
} else if err != nil {
|
||||
|
||||
@ -7,9 +7,11 @@ import (
|
||||
"github.com/leonelquinteros/gotext"
|
||||
)
|
||||
|
||||
const arrow = "==>"
|
||||
const smallArrow = " ->"
|
||||
const opSymbol = "::"
|
||||
const (
|
||||
arrow = "==>"
|
||||
smallArrow = " ->"
|
||||
opSymbol = "::"
|
||||
)
|
||||
|
||||
func OperationInfoln(a ...interface{}) {
|
||||
fmt.Fprint(os.Stdout, append([]interface{}{Bold(cyan(opSymbol + " ")), boldCode}, a...)...)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user