}
targets = getSVNEnvironment().combineTargets(targets, true);
if (targets.isEmpty()) {
targets.add("");
}
SVNPath target = new SVNPath((String) targets.get(0), true);
SVNRevision start = getSVNEnvironment().getStartRevision();
SVNRevision end = getSVNEnvironment().getEndRevision();
List revisionRanges = getSVNEnvironment().getRevisionRanges();
List editedRevisionRangesList = revisionRanges;
if (getSVNEnvironment().isChangeOptionUsed()) {
editedRevisionRangesList = new LinkedList();
if (getSVNEnvironment().isRevisionOptionUsed() && revisionRanges.size() > 1) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CLIENT_BAD_REVISION, "-c and -r are mutually exclusive");
SVNErrorManager.error(err, SVNLogType.CLIENT);
}
for (Iterator revisionsIter = revisionRanges.iterator(); revisionsIter.hasNext();) {
SVNRevisionRange revRange = (SVNRevisionRange) revisionsIter.next();
SVNRevision startRev = revRange.getStartRevision();
SVNRevision endRev = revRange.getEndRevision();
if (startRev.getNumber() < endRev.getNumber()) {
revRange = new SVNRevisionRange(endRev, endRev);
} else {
revRange = new SVNRevisionRange(startRev, startRev);
}
editedRevisionRangesList.add(revRange);
}
if (start.getNumber() < end.getNumber()) {
start = end;
} else {
end = start;
}
}
if (start != SVNRevision.UNDEFINED && end == SVNRevision.UNDEFINED) {
end = start;
} else if (start == SVNRevision.UNDEFINED) {
if (target.getPegRevision() == SVNRevision.UNDEFINED) {
start = target.isURL() ? SVNRevision.HEAD : SVNRevision.BASE;
} else {
start = target.getPegRevision();
}
if (end == SVNRevision.UNDEFINED) {
end = SVNRevision.create(0);
}
}
if (target.isURL()) {
for(int i = 1; i < targets.size(); i++) {
if (SVNCommandUtil.isURL((String) targets.get(i))) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.UNSUPPORTED_FEATURE,
"Only relative paths can be specified after a URL");
SVNErrorManager.error(err, SVNLogType.CLIENT);
}
}
} else {
if (targets.size() > 1) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.UNSUPPORTED_FEATURE,
"When specifying working copy paths, only one target may be given");
SVNErrorManager.error(err, SVNLogType.CLIENT);
}
}
myAuthorOfInterest = getSVNEnvironment().getAuthorOfInterest();
myLogRegularExpression = getSVNEnvironment().getRegularExpression();
SVNLogClient client = getSVNEnvironment().getClientManager().getLogClient();
if (!getSVNEnvironment().isQuiet()) {
client.setEventHandler(new SVNNotifyPrinter(getSVNEnvironment()));
}
String[] revProps = null;
if (getSVNEnvironment().isXML()) {
if (!getSVNEnvironment().isIncremental()) {
printXMLHeader("log");
}
if (!getSVNEnvironment().isAllRevisionProperties() &&
getSVNEnvironment().getRevisionProperties() != null &&
!getSVNEnvironment().getRevisionProperties().isEmpty()) {
SVNProperties revPropNames = getSVNEnvironment().getRevisionProperties();
revProps = new String[revPropNames.size()];
int i = 0;
for (Iterator propNames = revPropNames.nameSet().iterator(); propNames.hasNext();) {
String propName = (String) propNames.next();
String propVal = revPropNames.getStringValue(propName);
if (propVal.length() > 0) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR,
"cannot assign with 'with-revprop' option (drop the '=')");
SVNErrorManager.error(err, SVNLogType.CLIENT);
}
revProps[i++] = propName;
}
} else if (!getSVNEnvironment().isAllRevisionProperties()) {
if (!getSVNEnvironment().isQuiet()) {
revProps = new String[3];
revProps[0] = SVNRevisionProperty.AUTHOR;
revProps[1] = SVNRevisionProperty.DATE;
revProps[2] = SVNRevisionProperty.LOG;
} else {
revProps = new String[2];
revProps[0] = SVNRevisionProperty.AUTHOR;
revProps[1] = SVNRevisionProperty.DATE;
}
}
} else {
if (!getSVNEnvironment().isQuiet()) {
revProps = new String[3];
revProps[0] = SVNRevisionProperty.AUTHOR;
revProps[1] = SVNRevisionProperty.DATE;
revProps[2] = SVNRevisionProperty.LOG;
} else {
revProps = new String[2];
revProps[0] = SVNRevisionProperty.AUTHOR;
revProps[1] = SVNRevisionProperty.DATE;
}
}
if (target.isFile()) {
client.doLog(new File[] {target.getFile()}, editedRevisionRangesList, target.getPegRevision(),
getSVNEnvironment().isStopOnCopy(), getSVNEnvironment().isVerbose(),
getSVNEnvironment().isUseMergeHistory(), getSVNEnvironment().getLimit(),
revProps, this);
} else {
targets.remove(0);
String[] paths = (String[]) targets.toArray(new String[targets.size()]);
client.doLog(target.getURL(), paths, target.getPegRevision(), editedRevisionRangesList,
getSVNEnvironment().isStopOnCopy(),
getSVNEnvironment().isVerbose(),
getSVNEnvironment().isUseMergeHistory(),
getSVNEnvironment().getLimit(), revProps, this);