Mercurial > genshi > genshi-test
diff examples/trac/scripts/tracdb2env @ 39:71ecbe90aafc
Copy Trac to main branch.
author | cmlenz |
---|---|
date | Mon, 03 Jul 2006 18:53:27 +0000 |
parents | |
children |
line wrap: on
line diff
new file mode 100755 --- /dev/null +++ b/examples/trac/scripts/tracdb2env @@ -0,0 +1,105 @@ +#!/usr/bin/env python +import os +import sys +import sqlite +import ConfigParser +from trac.env import Environment + +additional_config = \ +(('notification', 'smtp_enabled', 'false'), + ('notification', 'smtp_server', 'localhost'), + ('notification', 'smtp_replyto', 'trac@localhost'), + ('logging', 'log_type', 'none'), + ('logging', 'log_file', 'trac.log'), + ('logging', 'log_level', 'DEBUG'), + ('attachment', 'max_size', '262144'), + ('trac', 'default_charset', 'iso-8859-15'), + ('trac', 'database', 'sqlite:db/trac.db')) + +def db2env(db_path, env_path): + env = Environment(env_path, create=1) + # Open the databases + old_cnx = sqlite.connect(db_path) + new_cnx = env.get_db_cnx() + old_cursor = old_cnx.cursor() + new_cursor = new_cnx.cursor() + convert_config(env, old_cursor) + convert_db(old_cursor, new_cursor) + new_cursor.execute("INSERT INTO system VALUES('database_version', '7')") + new_cnx.commit() + +def convert_config(env, old_cursor): + old_cursor.execute('SELECT section, name, value FROM config') + while 1: + row = old_cursor.fetchone() + if not row: + break + row = [row[0], row[1], row[2]] + if row[0] == 'general': + row[0] = 'trac' + if row[1] == 'database_version': + continue + env.set_config(row[0], row[1], row[2]) + for v in additional_config: + env.set_config(*v) + env.save_config() + +def to_utf8(row): + x = [] + for v in row: + if type(v) == type(''): + try: + u = unicode(v, 'utf-8') + x.append(v) + except UnicodeError: + u = unicode(v, 'iso-8859-15') + x.append(u.encode('utf-8')) + else: + x.append(v) + return x + +def copy_tuples(table, from_cursor, to_cursor, fields='*'): + from_cursor.execute('SELECT %s FROM %s' % (fields, table)) + while 1: + row = from_cursor.fetchone() + if not row: + break + row = to_utf8(row) + if fields == '*': + to_cursor.execute('INSERT INTO %s VALUES(%s)' \ + % (table, ', '.join(['%s'] * len(row))), *row) + else: + to_cursor.execute('INSERT INTO %s (%s) VALUES(%s)' \ + % (table, fields, + ', '.join(['%s'] * len(row))), *row) + +def convert_db(old_cursor, new_cursor): + copy_tuples('revision', old_cursor, new_cursor) + copy_tuples('node_change', old_cursor, new_cursor) + copy_tuples('auth_cookie', old_cursor, new_cursor) + copy_tuples('enum', old_cursor, new_cursor) + copy_tuples('ticket_change', old_cursor, new_cursor) + copy_tuples('permission', old_cursor, new_cursor) + copy_tuples('component', old_cursor, new_cursor) + copy_tuples('milestone', old_cursor, new_cursor, "name, time") + new_cursor.execute("UPDATE milestone SET descr=''") + copy_tuples('version', old_cursor, new_cursor) + copy_tuples('report', old_cursor, new_cursor, + 'id,author,title,sql') + copy_tuples('ticket', old_cursor, new_cursor, + 'id,time,changetime,component,severity,priority,' + 'owner,reporter,cc,url,version,milestone,status,' + 'resolution,summary,description') + copy_tuples('wiki', old_cursor, new_cursor, + 'name,version,time,author,ipnr,text') + +if __name__ == '__main__': + if len(sys.argv) != 3: + print >> sys.stderr, 'Usage: %s <db-file> <env-dir>\n' % sys.argv[0] + print >> sys.stderr, \ + 'Creates a new Trac environment and initializes it with ' \ + 'information\nfrom an existing pre 0.7 trac database.' + print >> sys.stderr + sys.exit(1) + db2env(sys.argv[1], sys.argv[2]) + print >> sys.stderr, 'Environment successfully created.'