use of org.apache.commons.jrcs.diff.DeleteDelta in project OpenGrok by OpenGrok.
the class Node method patch.
/**
* Apply the deltas in the current node to the given text.
* @param original the text to be patched
* @param annotate set to true to have each text line be a
* {@link Line Line} object that identifies the revision in which
* the line was changed or added.
* @throws InvalidFileFormatException if the deltas cannot be parsed.
* @throws PatchFailedException if the diff engine determines that
* the deltas cannot apply to the given text.
*/
public void patch(List original, boolean annotate) throws InvalidFileFormatException, org.apache.commons.jrcs.diff.PatchFailedException {
Revision revision = new Revision();
for (int it = 0; it < text.length; it++) {
String cmd = text[it].toString();
java.util.StringTokenizer t = new StringTokenizer(cmd, "ad ", true);
char action;
int n;
int count;
try {
action = t.nextToken().charAt(0);
n = Integer.parseInt(t.nextToken());
// skip the space
t.nextToken();
count = Integer.parseInt(t.nextToken());
} catch (Exception e) {
throw new InvalidFileFormatException(version + ":line:" + ":" + e.getMessage());
}
if (action == 'd') {
revision.addDelta(new DeleteDelta(new Chunk(n - 1, count)));
} else if (action == 'a') {
revision.addDelta(new AddDelta(n, new Chunk(getTextLines(it + 1, it + 1 + count), 0, count, n - 1)));
it += count;
} else {
throw new InvalidFileFormatException(version.toString());
}
}
revision.applyTo(original);
}
Aggregations