fix: handle flags order validatio better

Closes coop-cloud/organising#214.
This commit is contained in:
decentral1se 2021-11-02 14:08:54 +01:00
parent 3b77607f36
commit 0486091768
No known key found for this signature in database
GPG Key ID: 5E2EF5A63E3718CC
2 changed files with 20 additions and 1 deletions

View File

@ -2,6 +2,7 @@ package internal
import ( import (
"errors" "errors"
"strings"
"coopcloud.tech/abra/pkg/app" "coopcloud.tech/abra/pkg/app"
"coopcloud.tech/abra/pkg/catalogue" "coopcloud.tech/abra/pkg/catalogue"
@ -111,3 +112,17 @@ func ValidateDomain(c *cli.Context) (string, error) {
return domainName, nil return domainName, nil
} }
// ValidateSubCmdFlags ensures flag order conforms to correct order
func ValidateSubCmdFlags(c *cli.Context) bool {
for argIdx, arg := range c.Args().Slice() {
if !strings.HasPrefix(arg, "--") {
for _, flag := range c.Args().Slice()[argIdx:] {
if strings.HasPrefix(flag, "--") {
return false
}
}
}
}
return true
}

View File

@ -360,6 +360,10 @@ intended as the target server. This is useful when you want to have your entire
Co-op Cloud config located on the server itself, and not on your local Co-op Cloud config located on the server itself, and not on your local
developer machine. developer machine.
Example:
abra server add --local
Otherwise, you may specify a remote server. The <domain> argument must be a Otherwise, you may specify a remote server. The <domain> argument must be a
publicy accessible domain name which points to your server. You should have SSH publicy accessible domain name which points to your server. You should have SSH
access to this server, Abra will assume port 22 and will use your current access to this server, Abra will assume port 22 and will use your current
@ -394,7 +398,7 @@ You may omit flags to avoid performing this provisioning logic.
}, },
ArgsUsage: "<domain> [<user>] [<port>]", ArgsUsage: "<domain> [<user>] [<port>]",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
if c.Args().Len() > 0 && local { if c.Args().Len() > 0 && local || !internal.ValidateSubCmdFlags(c) {
err := errors.New("cannot use '<domain>' and '--local' together") err := errors.New("cannot use '<domain>' and '--local' together")
internal.ShowSubcommandHelpAndError(c, err) internal.ShowSubcommandHelpAndError(c, err)
} }