← Back to team overview

credativ team mailing list archive

lp:~therp-nl/openupgrade-server/openupgrade-server_migrate-script into lp:openupgrade-server

 

Holger Brunn (Therp) has proposed merging lp:~therp-nl/openupgrade-server/openupgrade-server_migrate-script into lp:openupgrade-server.

Requested reviews:
  OpenUpgrade Committers (openupgrade-committers)

For more details, see:
https://code.launchpad.net/~therp-nl/openupgrade-server/openupgrade-server_migrate-script/+merge/117287

Usage: migrate.py [options]

Migrate script for the impatient or lazy. Makes a copy of your database,
downloads the files necessary to migrate it as requested and runs the
migration on the copy (so your original  database will not be touched). While
the migration is running only errors are  shown, for a detailed log see
${branch-dir}/migration.log

Options:
  -h, --help            show this help message and exit
  -C CONFIG, --config=CONFIG
                        current openerp config (required)
  -D DATABASE, --database=DATABASE
                        current openerp database (required if not given in
                        config)
  -B BRANCH_DIR, --branch-dir=BRANCH_DIR
                        the directory to download openupgrade-server code to
                        [/var/tmp/openupgrade]
  -R MIGRATIONS, --run-migrations=MIGRATIONS
                        comma separated list of migrations to run  6.0,6.1
                        (required)

-- 
https://code.launchpad.net/~therp-nl/openupgrade-server/openupgrade-server_migrate-script/+merge/117287
Your team OpenUpgrade Committers is requested to review the proposed merge of lp:~therp-nl/openupgrade-server/openupgrade-server_migrate-script into lp:openupgrade-server.
=== added file 'migrate.py'
--- migrate.py	1970-01-01 00:00:00 +0000
+++ migrate.py	2012-07-30 16:05:21 +0000
@@ -0,0 +1,167 @@
+#!/usr/bin/python
+
+import os
+import sys
+import StringIO
+import psycopg2
+import psycopg2.extensions
+from optparse import OptionParser
+from ConfigParser import SafeConfigParser
+from bzrlib.branch import Branch
+from bzrlib.repository import Repository
+from bzrlib.workingtree import WorkingTree
+import bzrlib.plugin
+import bzrlib.builtins
+import bzrlib.info
+
+migrations={
+  '6.1': {
+    'url': 'lp:openupgrade-server', 
+    'addons_url': 'lp:openupgrade-addons',
+    'banking_url': 'lp:banking-addons',
+    'web_url': 'lp:openerp-web/6.1',
+    'addons_dir': os.path.join('openerp','addons'),
+    'root_dir': os.path.join(''),
+    'cmd': 'openerp-server --update=all --database=%(db)s --config=%(config)s '+
+        '--stop-after-init --no-xmlrpc --no-netrpc',
+    },
+  '6.0': {
+    'url': 'lp:openupgrade-server/6.0',
+    'addons_url': 'lp:openupgrade-addons/6.0',
+    'banking_url': 'lp:banking-addons/6.0',
+    'addons_dir': os.path.join('bin','addons'),
+    'root_dir': os.path.join('bin'),
+    'cmd': 'bin/openerp-server.py --update=all --database=%(db)s '+
+        '--config=%(config)s --stop-after-init --no-xmlrpc --no-netrpc --debug'
+    },
+}
+config = SafeConfigParser({'db_host': 'localhost'})
+parser = OptionParser(description="""Migrate script for the impatient or lazy.
+Makes a copy of your database, downloads the files necessary to migrate
+it as requested and runs the migration on the copy (so your original 
+database will not be touched). While the migration is running only errors are 
+shown, for a detailed log see ${branch-dir}/migration.log
+""")
+parser.add_option("-C", "--config", action="store", type="string", 
+        dest="config", 
+        help="current openerp config (required)")
+parser.add_option("-D", "--database", action="store", type="string", 
+        dest="database", 
+        help="current openerp database (required if not given in config)")
+parser.add_option("-B", "--branch-dir", action="store", type="string", 
+        dest="branch_dir", 
+        help="the directory to download openupgrade-server code to [%default]", 
+        default='/var/tmp/openupgrade')
+parser.add_option("-R", "--run-migrations", action="store", type="string", 
+        dest="migrations", 
+        help="comma separated list of migrations to run\n\n"+
+                ','.join(sorted([a for a in migrations]))+
+                "\n(required)")
+(options, args) = parser.parse_args()
+
+if (not options.config or not options.migrations 
+        or not reduce(lambda a,b: a and (b in migrations), 
+                        options.migrations.split(','), True)):
+  parser.print_help()
+  sys.exit()
+
+config.read(options.config)
+
+db_user=config.get('options', 'db_user')
+db_name=options.database or config.get('options', 'db_name')
+
+if not db_name or db_name=='' or db_name.isspace() or db_name.lower()=='false':
+  parser.print_help()
+  sys.exit()
+
+db=db_name+'_migrated'
+
+print('copying database %(db_name)s to %(db)s...' % {'db_name': db_name, 
+                                                     'db': db})
+conn=psycopg2.connect(database=db_name, user=db_user)
+conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
+cur=conn.cursor()
+cur.execute('drop database if exists %(db)s' % {'db': db})
+cur.execute('create database %(db)s' % {'db': db})
+cur.close()
+os.system(('pg_dump --format=custom --user=%(user)s %(db_name)s | pg_restore '+
+'--dbname=%(db)s') % {
+    'user': db_user, 
+    'db_name': db_name, 
+    'db': db,
+    })
+
+print('getting/upgrading code in %s' % options.branch_dir)
+
+bzrlib.plugin.load_plugins()
+logfile=os.path.join(options.branch_dir,'migration.log')
+
+if os.path.exists(options.branch_dir):
+  (_, branches, _)=next(os.walk(options.branch_dir))
+  for branch in branches:
+    cmd_revno=bzrlib.builtins.cmd_revno()
+    cmd_revno.outf=StringIO.StringIO()
+    cmd_revno.run(location=os.path.join(options.branch_dir,branch))
+    print 'updating '+branch+' rev'+cmd_revno.outf.getvalue().strip()
+    cmd_pull=bzrlib.builtins.cmd_pull()
+    cmd_pull.outf=StringIO.StringIO()
+    cmd_pull.outf.encoding='utf8'
+    cmd_pull.run(directory=os.path.join(options.branch_dir,branch), 
+            overwrite=True)
+    if hasattr(cmd_pull, '_operation'):
+        cmd_pull.cleanup_now()
+    print 'now at rev'+cmd_revno.outf.getvalue().strip()
+
+else:
+  os.mkdir(options.branch_dir)
+  for version in options.migrations.split(','):
+
+    print 'getting '+migrations[version]['url']
+    cmd_branch=bzrlib.builtins.cmd_branch()
+    cmd_branch.outf=StringIO.StringIO()
+    cmd_branch.run(migrations[version]['url'], 
+            os.path.join(options.branch_dir,version))
+
+    print 'getting '+migrations[version]['addons_url']
+    cmd_branch.run(migrations[version]['addons_url'], 
+            os.path.join(options.branch_dir,version+'_addons'))
+
+    print 'getting '+migrations[version]['banking_url']
+    cmd_branch.run(migrations[version]['banking_url'], 
+            os.path.join(options.branch_dir,version+'_banking_addons'))
+    if 'web_url' in migrations[version]:
+      print 'getting '+migrations[version]['web_url']
+      cmd_branch.run(migrations[version]['web_url'], 
+              os.path.join(options.branch_dir,version+'_web_addons'))
+
+for version in options.migrations.split(','):
+  print 'running migration for '+version
+  config.set('options', 'logfile', logfile)
+  config.set('options', 'port', '4200')
+  config.set('options', 'netport', '4201')
+  config.set('options', 'xmlrpc_port', '4200')
+  config.set('options', 'netrpc_port', '4201')
+  config.set('options', 'addons_path', 
+   ','.join([os.path.join(options.branch_dir,
+       version,migrations[version]['addons_dir']),
+       os.path.join(options.branch_dir,version+'_addons'),
+       os.path.join(options.branch_dir,version+'_banking_addons')]+
+       ([os.path.join(options.branch_dir,version+'_web_addons','addons')]
+           if 
+           'web_url' in migrations[version]
+           else 
+           []
+        )
+       )
+   )
+  config.set('options', 'root_path', os.path.join(options.branch_dir,version,
+                                            migrations[version]['root_dir']))
+  config.write(open(
+      os.path.join(options.branch_dir,version,'server.cfg'), 'w+'))
+  os.system(
+          os.path.join(options.branch_dir,version,migrations[version]['cmd'] % {
+              'db': db, 
+              'config': os.path.join(options.branch_dir,version,'server.cfg')
+              }
+              )
+          )


Follow ups