use of org.apache.commons.jrcs.diff.Revision 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);
}
use of org.apache.commons.jrcs.diff.Revision in project OpenGrok by OpenGrok.
the class JDiff method main.
public static void main(String[] argv) throws Exception {
if (argv.length < 2) {
usage("JDiff");
} else {
Object[] orig = loadFile(argv[0]);
Object[] rev = loadFile(argv[1]);
Diff df = new Diff(orig);
Revision r = df.diff(rev);
System.err.println("------");
System.out.print(r.toString());
System.err.println("------" + new Date());
try {
Object[] reco = r.patch(orig);
//String recos = Diff.arrayToString(reco);
if (!Diff.compare(rev, reco)) {
System.err.println("INTERNAL ERROR:" + "files differ after patching!");
}
} catch (Throwable o) {
System.out.println("Patch failed");
}
}
}
Aggregations