Mercurial > genshi > mirror
view examples/trac/scripts/tracdb2env @ 60:2cb5b54d87ff trunk
Migrate attachment templates to Markup.
author | cmlenz |
---|---|
date | Wed, 05 Jul 2006 21:32:27 +0000 |
parents | 93b4dcbafd7b |
children |
line wrap: on
line source
#!/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.'