You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by dp...@apache.org on 2008/10/10 15:41:45 UTC
svn commit: r703476 - in /jackrabbit/sandbox/jackrabbit-journalwalker: ./
src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
Author: dpfister
Date: Fri Oct 10 06:41:44 2008
New Revision: 703476
URL: http://svn.apache.org/viewvc?rev=703476&view=rev
Log:
Allow walking a journal record log alone.
Modified:
jackrabbit/sandbox/jackrabbit-journalwalker/ (props changed)
jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
Propchange: jackrabbit/sandbox/jackrabbit-journalwalker/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Oct 10 06:41:44 2008
@@ -0,0 +1,13 @@
+
+target
+*.log
+*.iws
+*.ipr
+*.iml
+junit*.properties
+.settings
+.classpath
+.project
+*.xml.md5
+*-pom-snapshot-version
+.checkstyle
Modified: jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java?rev=703476&r1=703475&r2=703476&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java (original)
+++ jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java Fri Oct 10 06:41:44 2008
@@ -16,6 +16,9 @@
*/
package org.apache.jackrabbit.journalwalker;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -35,6 +38,7 @@
import org.apache.jackrabbit.core.cluster.NamespaceRecord;
import org.apache.jackrabbit.core.cluster.NodeTypeRecord;
import org.apache.jackrabbit.core.journal.FileJournal;
+import org.apache.jackrabbit.core.journal.FileRecordLog;
import org.apache.jackrabbit.core.journal.JournalException;
import org.apache.jackrabbit.core.journal.Record;
import org.apache.jackrabbit.core.journal.RecordConsumer;
@@ -44,6 +48,8 @@
import org.apache.jackrabbit.core.state.ItemState;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
+import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
import org.slf4j.Logger;
@@ -77,6 +83,11 @@
private String id;
/**
+ * File record log.
+ */
+ private FileRecordLog recordLog;
+
+ /**
* Revision.
*/
private long revision;
@@ -100,6 +111,34 @@
}
/**
+ * Create a new instance of this class.
+ */
+ public JournalWalker(FileRecordLog recordLog, long revision) {
+ this.recordLog = recordLog;
+
+ if (revision == 0) {
+ revision = recordLog.getPreviousRevision();
+ }
+ this.revision = revision;
+ }
+
+ /**
+ * Walk a record log.
+ *
+ * @throws IOException if an I/O error occurs
+ */
+ public void walk() throws IOException {
+ recordLog.seek(revision);
+
+ NamePathResolver npResolver = new DefaultNamePathResolver(this, true);
+ while (revision < recordLog.getLastRevision()) {
+ Record record = recordLog.read(this, npResolver);
+ revision = record.getRevision();
+ consume(record);
+ }
+ }
+
+ /**
* Log an operation.
*
* @param op operation identifier
@@ -110,7 +149,7 @@
StringBuffer buf = new StringBuffer();
buf.append(op);
buf.append(" ");
- buf.append(workspace);
+ buf.append(workspace != null ? workspace : "version");
buf.append(':');
buf.append(lookupPath(id));
log(buf.toString());
@@ -159,6 +198,10 @@
return revision;
}
+ /**
+ * Walk
+ */
+
//--------------------------------------------------- ClusterRecordProcessor
/**
@@ -381,25 +424,63 @@
* @param args program arguments
*/
public static void main(String[] args) throws Exception {
- if (args.length == 0) {
- System.err.println("args: directory [revision]");
+ boolean noMoreArgs = false;
+ long revision = 0;
+
+ int argc = 0;
+ while (!noMoreArgs && argc < args.length) {
+ String arg = args[argc];
+ if (!arg.startsWith("-")) {
+ break;
+ }
+ argc++;
+ if (arg.length() != 2) {
+ System.err.println("Illegal option: " + arg);
+ System.exit(1);
+ return;
+ }
+ switch (arg.charAt(1)) {
+ case 'r':
+ if (argc == args.length) {
+ System.err.println("Option -r requires argument.");
+ System.exit(1);
+ return;
+ }
+ revision = Long.parseLong(args[argc++]);
+ break;
+ case '-':
+ noMoreArgs = true;
+ break;
+ default:
+ System.err.println("Unknown option: " + arg);
+ System.exit(1);
+ return;
+ }
+ }
+ if (argc == args.length) {
+ System.err.println("args: [ -r revision ] directory | files");
System.exit(1);
return;
}
- FileJournal journal = new FileJournal();
- journal.setRevision("revision.log");
- journal.setDirectory(args[0]);
-
- long revision = 0L;
-
- if (args.length > 1) {
- revision = Long.parseLong(args[1]);
- }
- JournalWalker walker = new JournalWalker(DEFAULT_PRODUCER, revision);
- journal.init("", walker);
- journal.register(walker);
- journal.sync();
+ while (argc < args.length) {
+ File f = new File(args[argc++]);
+ if (f.isDirectory()) {
+ FileJournal journal = new FileJournal();
+ journal.setRevision("revision.log");
+ journal.setDirectory(args[0]);
+
+ JournalWalker walker = new JournalWalker(DEFAULT_PRODUCER, revision);
+ journal.init("", walker);
+ journal.register(walker);
+ journal.sync();
+ } else if (f.isFile()) {
+ FileRecordLog recordLog = new FileRecordLog(f);
+
+ JournalWalker walker = new JournalWalker(recordLog, revision);
+ walker.walk();
+ }
+ }
}
}