mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-30 19:09:34 -06:00
Fix value being read in param suffix
This commit is contained in:
@@ -225,12 +225,20 @@ func (ap *ArgParser) sortedValueOptions() []string {
|
||||
return vos
|
||||
}
|
||||
|
||||
func (ap *ArgParser) matchValueOption(arg string) (match *Option, value *string) {
|
||||
func (ap *ArgParser) matchValueOption(arg string, isLongFormFlag bool) (match *Option, value *string) {
|
||||
|
||||
for _, on := range ap.sortedValueOptions() {
|
||||
lo := len(on)
|
||||
isMatch := len(arg) >= lo && arg[:lo] == on
|
||||
if isMatch {
|
||||
v := arg[lo:]
|
||||
if len(v) > 0 && !strings.Contains(optNameValDelimChars, v[:1]) { // checks if the value and the param is in the same string
|
||||
// we only allow joint param and value for long form flags (ie "--" flags), similar to Git's behavior
|
||||
if !isLongFormFlag {
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
|
||||
v = strings.TrimLeft(v, optNameValDelimChars)
|
||||
if len(v) > 0 {
|
||||
value = &v
|
||||
@@ -252,6 +260,7 @@ func (ap *ArgParser) Parse(args []string) (*ArgParseResults, error) {
|
||||
i := 0
|
||||
for ; i < len(args); i++ {
|
||||
arg := args[i]
|
||||
isLongFormFlag := len(arg) >= 2 && arg[:2] == "--"
|
||||
|
||||
if len(arg) == 0 || arg[0] != '-' || arg == "--" { // empty strings should get passed through like other naked words
|
||||
list = append(list, arg)
|
||||
@@ -274,7 +283,7 @@ func (ap *ArgParser) Parse(args []string) (*ArgParseResults, error) {
|
||||
results[opt.Name] = ""
|
||||
}
|
||||
|
||||
opt, value := ap.matchValueOption(rest)
|
||||
opt, value := ap.matchValueOption(rest, isLongFormFlag)
|
||||
|
||||
if opt == nil {
|
||||
if rest == "" {
|
||||
|
||||
@@ -78,6 +78,20 @@ func TestArgParser(t *testing.T) {
|
||||
map[string]string{"param": "value"},
|
||||
[]string{"arg1"},
|
||||
},
|
||||
{
|
||||
NewArgParser().SupportsString("param", "p", "", ""),
|
||||
[]string{"-pvalue"},
|
||||
UnknownArgumentParam{"pvalue"},
|
||||
map[string]string{},
|
||||
[]string{},
|
||||
},
|
||||
{
|
||||
NewArgParser().SupportsString("param", "p", "", ""),
|
||||
[]string{"--paramvalue"},
|
||||
nil,
|
||||
map[string]string{"param": "value"},
|
||||
[]string{},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
|
||||
Reference in New Issue
Block a user