diff --git a/runbot/models/build_config.py b/runbot/models/build_config.py index 4fc2b3df..1dd109d6 100644 --- a/runbot/models/build_config.py +++ b/runbot/models/build_config.py @@ -740,26 +740,26 @@ class ConfigStep(models.Model): upgrade_complement_step = trigger.upgrade_dumps_trigger_id.upgrade_step_id - if next_versions: + if next_versions and bundle.to_upgrade: for next_version in next_versions: if bundle.version_id in upgrade_complement_step._get_upgrade_source_versions(next_version): target_versions |= next_version return target_versions.with_context( category_id=category_id, project_id=bundle.project_id.id - ).mapped('base_bundle_id.last_done_batch') + ).mapped('base_bundle_id').filtered('to_upgrade').mapped('last_done_batch') def _reference_batches_upgrade(self, bundle, category_id): target_refs_bundles = self.env['runbot.bundle'] - sticky_domain = [('sticky', '=', True), ('project_id', '=', bundle.project_id.id)] + upgrade_domain = [('to_upgrade', '=', True), ('project_id', '=', bundle.project_id.id)] if self.upgrade_to_version_ids: - target_refs_bundles |= self.env['runbot.bundle'].search(sticky_domain + [('version_id', 'in', self.upgrade_to_version_ids.ids)]) + target_refs_bundles |= self.env['runbot.bundle'].search(upgrade_domain + [('version_id', 'in', self.upgrade_to_version_ids.ids)]) else: if self.upgrade_to_master: - target_refs_bundles |= self.env['runbot.bundle'].search(sticky_domain + [('name', '=', 'master')]) + target_refs_bundles |= self.env['runbot.bundle'].search(upgrade_domain + [('name', '=', 'master')]) if self.upgrade_to_all_versions: - target_refs_bundles |= self.env['runbot.bundle'].search(sticky_domain + [('name', '!=', 'master')]) + target_refs_bundles |= self.env['runbot.bundle'].search(upgrade_domain + [('name', '!=', 'master')]) elif self.upgrade_to_major_versions: - target_refs_bundles |= self.env['runbot.bundle'].search(sticky_domain + [('name', '!=', 'master'), ('version_id.is_major', '=', True)]) + target_refs_bundles |= self.env['runbot.bundle'].search(upgrade_domain + [('name', '!=', 'master'), ('version_id.is_major', '=', True)]) source_refs_bundles = self.env['runbot.bundle'] @@ -774,13 +774,14 @@ class ConfigStep(models.Model): source_refs_bundles |= f_bundle.intermediate_version_base_ids[-1] if self.upgrade_from_version_ids: - source_refs_bundles |= self.env['runbot.bundle'].search(sticky_domain + [('version_id', 'in', self.upgrade_from_version_ids.ids)]) + source_refs_bundles |= self.env['runbot.bundle'].search(upgrade_domain + [('version_id', 'in', self.upgrade_from_version_ids.ids)]) # this is subject to discussion. should this be smart and filter 'from_versions' or should it be flexible and do all possibilities else: if self.upgrade_to_current: from_versions(bundle) for f_bundle in target_refs_bundles: from_versions(f_bundle) + source_refs_bundles = source_refs_bundles.filtered('to_upgrade') return (target_refs_bundles | source_refs_bundles).with_context( category_id=category_id diff --git a/runbot/models/bundle.py b/runbot/models/bundle.py index 66ecb506..77a2ae50 100644 --- a/runbot/models/bundle.py +++ b/runbot/models/bundle.py @@ -33,6 +33,7 @@ class Bundle(models.Model): is_base = fields.Boolean('Is base', index=True) defined_base_id = fields.Many2one('runbot.bundle', 'Forced base bundle', domain="[('project_id', '=', project_id), ('is_base', '=', True)]") base_id = fields.Many2one('runbot.bundle', 'Base bundle', compute='_compute_base_id', store=True) + to_upgrade = fields.Boolean('To upgrade', compute='_compute_to_upgrade', store=True, index=False) version_id = fields.Many2one('runbot.version', 'Version', compute='_compute_version_id', store=True) version_number = fields.Char(related='version_id.number', store=True, index=True) @@ -76,6 +77,11 @@ class Bundle(models.Model): for bundle in self: bundle.sticky = bundle.is_base + @api.depends('is_base') + def _compute_to_upgrade(self): + for bundle in self: + bundle.to_upgrade = bundle.is_base + @api.depends('name', 'is_base', 'defined_base_id', 'base_id.is_base', 'project_id') def _compute_base_id(self): for bundle in self: diff --git a/runbot/views/bundle_views.xml b/runbot/views/bundle_views.xml index e6edbd8a..add1c699 100644 --- a/runbot/views/bundle_views.xml +++ b/runbot/views/bundle_views.xml @@ -25,6 +25,7 @@ + @@ -70,6 +71,7 @@ +