recover also edit-log entries

This commit is contained in:
Elan Ruusamäe 2012-09-19 22:01:24 +02:00
parent ff310ead06
commit 709c73c409
2 changed files with 28 additions and 3 deletions

View file

@ -20,6 +20,9 @@ require_once DOKU_INC.'inc/cliopts.php';
# disable gzip regardless of config, then we don't have to compress when converting # disable gzip regardless of config, then we don't have to compress when converting
$conf['compression'] = 0; //compress old revisions: (0: off) ('gz': gnuzip) ('bz2': bzip) $conf['compression'] = 0; //compress old revisions: (0: off) ('gz': gnuzip) ('bz2': bzip)
# override start page, as there's currently configured temporary frontpage
$conf['start'] = 'start'; //name of start page
function strip_dir($dir, $fn) { function strip_dir($dir, $fn) {
global $conf; global $conf;
return end(explode($dir.'/', $fn, 2)); return end(explode($dir.'/', $fn, 2));

View file

@ -111,7 +111,6 @@ def wikiname(filename):
return wikiutil.unquoteWikiname(basename(filename)) return wikiutil.unquoteWikiname(basename(filename))
def convert_editlog(pagedir, output = None, overwrite = False): def convert_editlog(pagedir, output = None, overwrite = False):
changes = []
pagedir = os.path.abspath(pagedir) pagedir = os.path.abspath(pagedir)
print "pagedir: %s" % pagedir print "pagedir: %s" % pagedir
pagename = wikiname(pagedir) pagename = wikiname(pagedir)
@ -119,6 +118,8 @@ def convert_editlog(pagedir, output = None, overwrite = False):
output = pagename output = pagename
pagelog = os.path.join(pagedir, 'edit-log') pagelog = os.path.join(pagedir, 'edit-log')
edit_log = editlog.EditLog(request, filename = pagelog) edit_log = editlog.EditLog(request, filename = pagelog)
changes = {}
for log in edit_log: for log in edit_log:
# not supported. perhaps add anyway? # not supported. perhaps add anyway?
if log.action in ('ATTNEW', 'ATTDEL', 'ATTDRW'): if log.action in ('ATTNEW', 'ATTDEL', 'ATTDRW'):
@ -140,9 +141,29 @@ def convert_editlog(pagedir, output = None, overwrite = False):
except KeyError: except KeyError:
action = log.action action = log.action
entry = [str(log.ed_time_usecs / USEC), log.addr, action, dw.cleanID(log.pagename), author, log.comment] mtime = str(log.ed_time_usecs / USEC)
changes.append("\t".join(entry)) changes[mtime] = "\t".join([mtime, log.addr, action, dw.cleanID(log.pagename), author, log.comment])
# see if we have missing entries, try to recover
page = Page(request, pagename)
if len(page.getRevList()) != len(changes):
print "RECOVERING edit-log, missing %d entries" % (len(page.getRevList()) - len(changes))
for rev in page.getRevList():
page = Page(request, pagename, rev = rev)
mtime = page.mtime_usecs() / USEC
if not mtime:
pagefile, realrev, exists = page.get_rev(rev = rev);
if os.path.exists(pagefile):
mtime = int(os.path.getmtime(pagefile))
print "Recovered %s: %s" % (rev, mtime)
mtime = str(mtime)
if not changes.has_key(mtime):
changes[mtime] = "\t".join([mtime, '127.0.0.1', '?', dw.cleanID(pagename), 'root', 'recovered entry'])
print "ADDING %s" % mtime
changes = sorted(changes.values())
out_file = os.path.join(output_dir, 'meta', dw.metaFN(output, '.changes')) out_file = os.path.join(output_dir, 'meta', dw.metaFN(output, '.changes'))
writefile(out_file, "\n".join(changes), overwrite = overwrite) writefile(out_file, "\n".join(changes), overwrite = overwrite)
@ -168,6 +189,7 @@ def convertfile(pagedir, output = None, overwrite = False):
if not mtime: if not mtime:
if os.path.exists(pagefile): if os.path.exists(pagefile):
mtime = int(os.path.getmtime(pagefile)) mtime = int(os.path.getmtime(pagefile))
print "recovered %s: %s" % (rev, mtime)
if not mtime: if not mtime:
print "NO REVISION: for %s" % pagefile print "NO REVISION: for %s" % pagefile