SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.MERGE_INFO_PARSE_ERROR,
"Mergeinfo for ''{0}'' maps to an empty revision range", path);
SVNErrorManager.error(err, SVNLogType.DEFAULT);
}
SVNMergeRange lastRange = null;
while (mergeInfo.length() > 0 && mergeInfo.charAt(0) != '\n') {
long startRev = parseRevision(mergeInfo);
if (mergeInfo.length() > 0 && mergeInfo.charAt(0) != '\n' &&
mergeInfo.charAt(0) != '-' && mergeInfo.charAt(0) != ',' &&
mergeInfo.charAt(0) != '*') {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.MERGE_INFO_PARSE_ERROR,
"Invalid character ''{0}'' found in revision list",
new Character(mergeInfo.charAt(0)));
SVNErrorManager.error(err, SVNLogType.DEFAULT);
}
SVNMergeRange range = new SVNMergeRange(startRev - 1, startRev, true);
if (mergeInfo.length() > 0 && mergeInfo.charAt(0) == '-') {
mergeInfo = mergeInfo.deleteCharAt(0);
long endRev = parseRevision(mergeInfo);
if (startRev > endRev) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.MERGE_INFO_PARSE_ERROR,
"Unable to parse reversed revision range ''{0}-{1}''",
new Object[] { new Long(startRev), new Long(endRev) });
SVNErrorManager.error(err, SVNLogType.DEFAULT);
} else if (startRev == endRev) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.MERGE_INFO_PARSE_ERROR,
"Unable to parse revision range ''{0}-{1}'' with same start and end revisions",
new Object[] { new Long(startRev), new Long(endRev) });
SVNErrorManager.error(err, SVNLogType.DEFAULT);
}
range.setEndRevision(endRev);
}
if (mergeInfo.length() == 0 || mergeInfo.charAt(0) == '\n') {
lastRange = combineWithAdjacentLastRange(ranges, lastRange, range, false);
return (SVNMergeRange[]) ranges.toArray(new SVNMergeRange[ranges.size()]);
} else if (mergeInfo.length() > 0 && mergeInfo.charAt(0) == ',') {
lastRange = combineWithAdjacentLastRange(ranges, lastRange, range, false);
mergeInfo = mergeInfo.deleteCharAt(0);
} else if (mergeInfo.length() > 0 && mergeInfo.charAt(0) == '*') {
range.setInheritable(false);
mergeInfo = mergeInfo.deleteCharAt(0);
if (mergeInfo.length() == 0 || mergeInfo.charAt(0) == ',' ||
mergeInfo.charAt(0) == '\n') {
lastRange = combineWithAdjacentLastRange(ranges, lastRange, range, false);
if (mergeInfo.length() > 0 && mergeInfo.charAt(0) == ',') {