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 @@ - + + +