diff --git a/runbot/__openerp__.py b/runbot/__openerp__.py
index c538112d..9e6fa1bb 100644
--- a/runbot/__openerp__.py
+++ b/runbot/__openerp__.py
@@ -2,7 +2,7 @@
'name': 'Runbot',
'category': 'Website',
'summary': 'Runbot',
- 'version': '1.0',
+ 'version': '1.1',
'description': "Runbot",
'author': 'OpenERP SA',
'depends': ['website'],
diff --git a/runbot/migrations/8.0.1.1/post-migration.py b/runbot/migrations/8.0.1.1/post-migration.py
new file mode 100644
index 00000000..e294b5d9
--- /dev/null
+++ b/runbot/migrations/8.0.1.1/post-migration.py
@@ -0,0 +1,33 @@
+# -*- encoding: utf-8 -*-
+
+
+from openerp import SUPERUSER_ID
+from openerp.modules.registry import RegistryManager
+
+
+def get_legacy_name(original_name, version):
+ return 'legacy_%s_%s' % (version.replace('.', '_'), original_name)
+
+
+def m2o_to_x2m(cr, model, table, field, source_field):
+ cr.execute('SELECT id, %(field)s '
+ 'FROM %(table)s '
+ 'WHERE %(field)s is not null' % {
+ 'table': table,
+ 'field': source_field,
+ })
+ for row in cr.fetchall():
+ model.write(cr, SUPERUSER_ID, row[0], {field: [(4, row[1])]})
+
+
+def migrate(cr, version):
+ if not version:
+ return
+ registry = RegistryManager.get(cr.dbname)
+ m2o_to_x2m(
+ cr,
+ registry['runbot.repo'],
+ 'runbot_repo',
+ 'dependency_ids',
+ get_legacy_name('fallback_id', version),
+ )
diff --git a/runbot/migrations/8.0.1.1/pre-migration.py b/runbot/migrations/8.0.1.1/pre-migration.py
new file mode 100644
index 00000000..10a844c3
--- /dev/null
+++ b/runbot/migrations/8.0.1.1/pre-migration.py
@@ -0,0 +1,35 @@
+# -*- encoding: utf-8 -*-
+
+from openerp import release
+import logging
+
+logger = logging.getLogger('upgrade')
+
+
+def get_legacy_name(original_name, version):
+ return 'legacy_%s_%s' % (version.replace('.', '_'), original_name)
+
+
+def rename_columns(cr, column_spec, version):
+ for table, renames in column_spec.iteritems():
+ for old, new in renames:
+ if new is None:
+ new = get_legacy_name(old, version)
+ logger.info("table %s, column %s: renaming to %s",
+ table, old, new)
+ cr.execute('ALTER TABLE "%s" RENAME "%s" TO "%s"'
+ % (table, old, new,))
+ cr.execute('DROP INDEX IF EXISTS "%s_%s_index"'
+ % (table, old))
+
+column_renames = {
+ 'runbot_repo': [
+ ('fallback_id', None)
+ ]
+}
+
+
+def migrate(cr, version):
+ if not version:
+ return
+ rename_columns(cr, column_renames, version)
diff --git a/runbot/runbot.py b/runbot/runbot.py
index ef85235e..e8245816 100644
--- a/runbot/runbot.py
+++ b/runbot/runbot.py
@@ -172,8 +172,12 @@ class runbot_repo(osv.osv):
'nginx': fields.boolean('Nginx'),
'auto': fields.boolean('Auto'),
'duplicate_id': fields.many2one('runbot.repo', 'Repository for finding duplicate builds'),
- 'fallback_id': fields.many2one('runbot.repo', 'Fallback repo'),
'modules': fields.char("Modules to Install", help="Comma-separated list of modules to install and test."),
+ 'dependency_ids': fields.many2many(
+ 'runbot.repo', 'runbot_repo_dep_rel',
+ id1='dependant_id', id2='dependency_id',
+ string='Extra dependencies',
+ help="Community addon repos which need to be present to run tests."),
'token': fields.char("Github token"),
}
_defaults = {
@@ -544,16 +548,17 @@ class runbot_build(osv.osv):
if os.path.isdir(build.path('bin/addons')):
shutil.move(build.path('bin'), build.server())
- # fallback for addons-only community/projet branches
+ # fallback for addons-only community/project branches
if not os.path.isfile(build.server('__init__.py')):
# Find modules to test and store in build
modules_to_test = glob.glob(build.path('*/__openerp__.py'))
build.write({'modules': ','.join(modules_to_test)})
- for i in modules_to_test:
- shutil.move(os.path.dirname(i), build.server('addons'))
name = build.branch_id.branch_name.split('-',1)[0]
- if build.repo_id.fallback_id:
- build.repo_id.fallback_id.git_export(name, build.path())
+ for extra_repo in build.repo_id.dependency_ids:
+ extra_repo.git_export(name, build.path())
+ # Finally move all addons to openerp/addons
+ for module in glob.glob(build.path('*/__openerp__.py')):
+ shutil.move(os.path.dirname(module), build.path('openerp/addons'))
# move all addons to server addons path
for i in glob.glob(build.path('addons/*')):
diff --git a/runbot/runbot.xml b/runbot/runbot.xml
index 39793784..5d133824 100644
--- a/runbot/runbot.xml
+++ b/runbot/runbot.xml
@@ -23,8 +23,10 @@
-
+
+
+