Deduplicate locks add/remove session-id and source parsing
This commit is contained in:
@@ -59,3 +59,37 @@ func parseSessionAwareFlags(command string, fs *flag.FlagSet, args []string, ses
|
||||
}
|
||||
return resolveParsedSessionID(command, positionalSessionID, fs, sessionID)
|
||||
}
|
||||
|
||||
func parseSessionIDAndOnePositionalArg(command, argName string, fs *flag.FlagSet, args []string, sessionID *string) (string, error) {
|
||||
var positionalSessionID string
|
||||
value := ""
|
||||
if len(args) >= 2 && !isCLIFlagToken(args[0]) && !isCLIFlagToken(args[1]) {
|
||||
positionalSessionID = strings.TrimSpace(args[0])
|
||||
value = strings.TrimSpace(args[1])
|
||||
args = append([]string(nil), args[2:]...)
|
||||
}
|
||||
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return "", fmt.Errorf("%s: invalid flags: %w", command, err)
|
||||
}
|
||||
if value == "" {
|
||||
switch fs.NArg() {
|
||||
case 2:
|
||||
positionalSessionID = strings.TrimSpace(fs.Arg(0))
|
||||
value = strings.TrimSpace(fs.Arg(1))
|
||||
case 1:
|
||||
if strings.TrimSpace(*sessionID) == "" {
|
||||
return "", fmt.Errorf("%s: expected session_id and %s", command, argName)
|
||||
}
|
||||
value = strings.TrimSpace(fs.Arg(0))
|
||||
default:
|
||||
return "", fmt.Errorf("%s: expected session_id and %s", command, argName)
|
||||
}
|
||||
} else if fs.NArg() != 0 {
|
||||
return "", fmt.Errorf("%s: unexpected positional arguments", command)
|
||||
}
|
||||
if err := applyPositionalSessionID(command, positionalSessionID, sessionID); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user