use of org.apache.commons.jrcs.diff.PatchFailedException in project OpenGrok by OpenGrok.
the class RCSRepository method annotate.
static Annotation annotate(File file, String revision, File rcsFile) throws IOException {
try {
Archive archive = new Archive(rcsFile.getPath());
// If revision is null, use current revision
Version version = revision == null ? archive.getRevisionVersion() : archive.getRevisionVersion(revision);
// Get the revision with annotation
archive.getRevision(version, true);
Annotation a = new Annotation(file.getName());
// considered public API anymore, but it works.
for (Node n : archive.getRevisionNodes()) {
String rev = n.getVersion().toString();
String author = n.getAuthor();
a.addLine(rev, author, true);
}
return a;
} catch (ParseException pe) {
throw wrapInIOException("Parse exception annotating RCS repository", pe);
} catch (InvalidFileFormatException iffe) {
throw wrapInIOException("File format exception annotating RCS repository", iffe);
} catch (PatchFailedException pfe) {
throw wrapInIOException("Patch failed exception annotating RCS repository", pfe);
}
}
use of org.apache.commons.jrcs.diff.PatchFailedException 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