String argument = arguments[i];
if (previousArgument != null) {
// parse as value (limit could allow negative numbers).
if (argument.startsWith("--") || argument.startsWith("-") && SVNArgument.LIMIT != previousArgument && SVNArgument.CHANGE != previousArgument) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR, "argument '" + previousArgumentName + "' requires value");
throw new SVNException(err);
}
Object value = previousArgument.parseValue(argument);
myBinaryArguments.put(previousArgument, value);
previousArgument = null;
previousArgumentName = null;
continue;
}
if (argument.startsWith("--")) {
// long argument (--no-ignore)
SVNArgument svnArgument = SVNArgument.findArgument(argument, validArguments);
if (svnArgument != null) {
if (svnArgument.hasValue()) {
previousArgument = svnArgument;
previousArgumentName = argument;
} else {
myUnaryArguments.add(svnArgument);
}
} else {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR, "invalid argument '" + argument + "'");
throw new SVNException(err);
}
} else if (argument.startsWith("-")) {
for (int j = 1; j < argument.length(); j++) {
String name = "-" + argument.charAt(j);
SVNArgument svnArgument = SVNArgument.findArgument(name, validArguments);
if (svnArgument != null) {
if (svnArgument.hasValue()) {
if (j + 1 < argument.length()) {
String value = argument.substring(j + 1);
Object argValue = svnArgument.parseValue(value);
myBinaryArguments.put(svnArgument, argValue);
} else {
previousArgument = svnArgument;
previousArgumentName = name;
}
j = argument.length();
} else {
myUnaryArguments.add(svnArgument);
}
} else {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR, "invalid argument '" + name + "'");
throw new SVNException(err);
}
}
} else {
if (myCommandName == null) {
myCommandName = argument;
hasPegRevisions = SVNCommand.hasPegRevision(myCommandName);
} else {
String pegRevision = SVNRevision.UNDEFINED.toString();
if (hasPegRevisions) {
int atIndex = argument.lastIndexOf('@');
if (atIndex > 0 && atIndex != argument.length() - 1) {
pegRevision = argument.substring(argument.lastIndexOf('@') + 1);
argument = argument.substring(0, argument.lastIndexOf('@'));
if (SVNRevision.parse(pegRevision) == SVNRevision.UNDEFINED) {
SVNErrorMessage msg = SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR, "Syntax error parsing revision '" + pegRevision + "'");
throw new SVNException(msg);
}
} else if (atIndex > 0 && atIndex == argument.length() - 1) {
argument = argument.substring(0, argument.length() - 1);
}
}
myPathURLs.add(argument);
if (argument.indexOf("://") >= 0) {
myURLs.add(argument);
myPegRevisions.add(pegRevision);
} else {
myPaths.add(argument);
myPegPathRevisions.add(pegRevision);
}
}
}
}
if (myCommandName == null) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR, "no command name defined");
throw new SVNException(err);
}
if (myPathURLs.isEmpty()) {
myPaths.add(".");
myPegPathRevisions.add(SVNRevision.UNDEFINED.toString());