From 2b690de56663b079ecb31311eb3a67565fe7fde5 Mon Sep 17 00:00:00 2001
From: Xavier-Do <xdo@odoo.com>
Date: Thu, 16 May 2024 09:08:46 +0200
Subject: [PATCH] [IMP] runbot: allow to disable upgrade from a version

---
 runbot/models/build_config.py | 6 ++++--
 runbot/models/bundle.py       | 6 ++++++
 runbot/views/bundle_views.xml | 4 ++++
 runbot_builder/tools.py       | 3 ++-
 4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/runbot/models/build_config.py b/runbot/models/build_config.py
index ec777cb6..33159d7a 100644
--- a/runbot/models/build_config.py
+++ b/runbot/models/build_config.py
@@ -822,6 +822,8 @@ class ConfigStep(models.Model):
 
     def _reference_batches_complement(self, batch, trigger):
         bundle = batch.bundle_id
+        if not bundle.base_id.to_upgrade or not bundle.base_id.to_upgrade_from:
+            return self.env['runbot.batch']
         category_id = trigger.upgrade_dumps_trigger_id.category_id.id
         version = bundle.version_id
         next_versions = version.next_major_version_id | version.next_intermediate_version_ids  # TODO filter on trigger version
@@ -829,7 +831,7 @@ class ConfigStep(models.Model):
 
         upgrade_complement_step = trigger.upgrade_dumps_trigger_id.upgrade_step_id
 
-        if next_versions and bundle.base_id.to_upgrade:
+        if next_versions:
             for next_version in next_versions:
                 if bundle.version_id in upgrade_complement_step._get_upgrade_source_versions(next_version):
                     target_versions |= next_version
@@ -871,7 +873,7 @@ class ConfigStep(models.Model):
                 from_versions(bundle)
             for f_bundle in target_refs_bundles:
                 from_versions(f_bundle)
-            source_refs_bundles = source_refs_bundles.filtered('to_upgrade')
+            source_refs_bundles = source_refs_bundles.filtered('to_upgrade_from')
 
         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 8d07b007..97d7c4e2 100644
--- a/runbot/models/bundle.py
+++ b/runbot/models/bundle.py
@@ -34,6 +34,7 @@ class Bundle(models.Model):
     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)
+    to_upgrade_from = fields.Boolean('To upgrade From', compute='_compute_to_upgrade_from', store=True, index=False)
 
     has_pr = fields.Boolean('Has PR', compute='_compute_has_pr', store=True)
 
@@ -89,6 +90,11 @@ class Bundle(models.Model):
         for bundle in self:
             bundle.to_upgrade = bundle.is_base
 
+    @api.depends('is_base')
+    def _compute_to_upgrade_from(self):
+        for bundle in self:
+            bundle.to_upgrade_from = 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 cb02d487..6692e035 100644
--- a/runbot/views/bundle_views.xml
+++ b/runbot/views/bundle_views.xml
@@ -50,6 +50,7 @@
                             <field name="project_id"/>
                             <field name="sticky" readonly="0"/>
                             <field name="to_upgrade" readonly="0"/>
+                            <field name="to_upgrade_from" readonly="0"/>
                             <field name="is_base"/>
                             <field name="base_id"/>
                             <field name="defined_base_id"/>
@@ -150,6 +151,7 @@
                 <field name="is_base"/>
                 <field name="sticky"/>
                 <field name="to_upgrade"/>
+                <field name="to_upgrade_from"/>
                 <field name="no_build"/>
                 <field name="branch_ids"/>
                 <field name="version_id"/>
@@ -168,6 +170,8 @@
             <filter string="For next freeze" name="for_next_freeze" domain="[('for_next_freeze', '=', True)]"/>
             <filter string="Has open pr" name="has_pr" domain="[('has_pr', '=', True)]"/>
             <filter string="No pr" name="no_pr" domain="[('branch_ids', '!=', []), '!', ('branch_ids', 'any', [('is_pr', '=', True)])]"/>
+            <filter string="Is base" name="is_base" domain="[('is_base', '=', True)]"/>
+            <filter string="Is sticky" name="is_sticky" domain="[('sticky', '=', True)]"/>
             <separator/>
           </search>
         </field>
diff --git a/runbot_builder/tools.py b/runbot_builder/tools.py
index 3e37c69b..636b1382 100644
--- a/runbot_builder/tools.py
+++ b/runbot_builder/tools.py
@@ -171,9 +171,10 @@ def run(client_class):
         config_addons_path = ','.join([config_addons_path, addon_path])
     odoo.tools.config['addons_path'] = config_addons_path
     odoo.tools.config['forced_host_name'] = args.forced_host_name
+    import odoo.modules
 
     # create environment
-    registry = odoo.registry(args.database)
+    registry = odoo.modules.registry.Registry(args.database)
     try:
         with registry.cursor() as cr:
             env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})