diff --git a/odoo_openupgrade_wizard/configuration_version_dependant.py b/odoo_openupgrade_wizard/configuration_version_dependant.py
index b7a304a..33a0d8f 100644
--- a/odoo_openupgrade_wizard/configuration_version_dependant.py
+++ b/odoo_openupgrade_wizard/configuration_version_dependant.py
@@ -279,9 +279,14 @@ def get_openupgrade_analysis_files(
]
for file in files:
- if file.parent.parent == "migrations":
+ # this part doesn't depends only of the release
+ # 14+ module can have migrations folder.
+ if file.parent.parent.name == "migrations":
module_name = file.parent.parent.parent.name
else:
module_name = file.parent.parent.name
result[module_name] = file
+ logger.debug(
+ "Release %s : %d analysis files found." % (release, len(result))
+ )
return result
diff --git a/odoo_openupgrade_wizard/templates.py b/odoo_openupgrade_wizard/templates.py
index b2087e5..c9c7fa4 100644
--- a/odoo_openupgrade_wizard/templates.py
+++ b/odoo_openupgrade_wizard/templates.py
@@ -38,6 +38,18 @@ workload_settings:
# Porting 10 lines of XML costs 1 minute
port_per_xml_line_time: 0.10
+ # Minimal time for Openupgrade PR
+ open_upgrade_minimal_time: 10
+
+ # time for a line of model in the openupgrade_analysis.txt
+ openupgrade_model_line_time: 10
+
+ # Time for a line of field in the openupgrade_analysis.txt
+ openupgrade_field_line_time: 5
+
+ # Time for a line of XML in the openupgrade_analysis.txt
+ openupgrade_xml_line_time: 0.1
+
"""
REPO_YML_TEMPLATE = """
@@ -269,19 +281,32 @@ ANALYSIS_HTML_TEMPLATE = """
{% set module_version = odoo_module.get_module_version(release) %}
{% if module_version %}
{% set size_text = module_version.get_size_text() %}
+ {% set analysis_text = module_version.get_analysis_text() %}
{% set workload = module_version.workload %}
{{module_version.get_text()}}
- {% if size_text %}
- ({{ size_text}})
- {% endif %}
{% if workload %}
({{ module_version.workload_hour_text()}})
{% endif %}
+ {% if size_text %}
+
+
+ ({{ size_text}})
+
+ {% endif %}
+ {% if analysis_text %}
+
+
+
+ ({{ analysis_text}})
+
+
+ {% endif %}
+
|
{% else %}
|
diff --git a/odoo_openupgrade_wizard/tools_odoo_module.py b/odoo_openupgrade_wizard/tools_odoo_module.py
index 6bc7682..c9ebf08 100644
--- a/odoo_openupgrade_wizard/tools_odoo_module.py
+++ b/odoo_openupgrade_wizard/tools_odoo_module.py
@@ -75,19 +75,19 @@ class Analysis(object):
module_version.analyse_openupgrade_state(coverage_analysis)
for release in self.all_releases[1:]:
+ odoo_env_path = get_odoo_env_path(ctx, {"release": release})
+ openupgrade_analysis_files = get_openupgrade_analysis_files(
+ odoo_env_path, release
+ )
+ openupgrade_analysis_files = openupgrade_analysis_files
for odoo_module in filter(
lambda x: x.module_type == "odoo", self.modules
):
- odoo_env_path = get_odoo_env_path(ctx, {"release": release})
- openupgrade_analysis_files = get_openupgrade_analysis_files(
- odoo_env_path, release
- )
- # TODO, FIX ME
- openupgrade_analysis_files = openupgrade_analysis_files
- # module_version = odoo_module.get_module_version(release)
- # module_version.analyse_openupgrade_work(
- # openupgrade_analysis_files
- # )
+ module_version = odoo_module.get_module_version(release)
+ if module_version:
+ module_version.analyse_openupgrade_work(
+ openupgrade_analysis_files
+ )
def analyse_missing_module(self):
for odoo_module in filter(
@@ -435,6 +435,7 @@ class OdooModuleVersion(object):
self.xml_code = 0
self.javascript_code = 0
self.workload = 0
+ self.analysis_file = False
self.openupgrade_model_lines = 0
self.openupgrade_field_lines = 0
self.openupgrade_xml_lines = 0
@@ -452,6 +453,10 @@ class OdooModuleVersion(object):
"port_per_javascript_line_time"
]
port_per_xml_line_time = settings["port_per_xml_line_time"]
+ open_upgrade_minimal_time = settings["open_upgrade_minimal_time"]
+ openupgrade_model_line_time = settings["openupgrade_model_line_time"]
+ openupgrade_field_line_time = settings["openupgrade_field_line_time"]
+ openupgrade_xml_line_time = settings["openupgrade_xml_line_time"]
if self.state in ["merged", "renamed", "normal_loss"]:
# The module has been moved, nothing to do
@@ -467,8 +472,22 @@ class OdooModuleVersion(object):
):
return
else:
- # TODO
- self.workload = 99
+ self.workload = (
+ # Minimal openupgrade time
+ open_upgrade_minimal_time
+ # Add model time
+ + (
+ openupgrade_model_line_time
+ * self.openupgrade_model_lines
+ )
+ # Add field Time
+ + (
+ openupgrade_field_line_time
+ * self.openupgrade_field_lines
+ )
+ # Add XML Time
+ + (openupgrade_xml_line_time * self.openupgrade_xml_lines)
+ )
# OCA / Custom Module
if self.release != self.odoo_module.analyse.final_release:
@@ -541,17 +560,41 @@ class OdooModuleVersion(object):
if self.release == self.odoo_module.analyse.initial_release:
return
analysis_file = analysis_files.get(self.odoo_module.name, False)
- if analysis_file:
- # TODO
- pass
- else:
- # TODO
- pass
+
+ if not analysis_file:
+ return
+
+ self.analysis_file = analysis_file
+ with open(analysis_file, "r") as input_file:
+ line_type = False
+ for line in input_file.readlines():
+ if line.startswith("---Models in module"):
+ line_type = "model"
+ continue
+ elif line.startswith("---Fields in module"):
+ line_type = "field"
+ continue
+ elif line.startswith("---XML records in module"):
+ line_type = "xml"
+ continue
+ elif line.startswith("---nothing has changed in this module"):
+ continue
+ elif line.startswith("---"):
+ raise Exception("comment %s not undestood" % line)
+
+ if line_type == "model":
+ self.openupgrade_model_lines += 1
+ elif line_type == "field":
+ self.openupgrade_field_lines += 1
+ elif line_type == "xml":
+ self.openupgrade_xml_lines += 1
def workload_hour_text(self):
if not self.workload:
return ""
- return "%d h" % (int(round(self.workload / 60)))
+ hour = int(self.workload // 60)
+ minute = round(self.workload % 60)
+ return f"{hour}h{minute:02}"
def get_size_text(self):
data = {
@@ -566,6 +609,22 @@ class OdooModuleVersion(object):
else:
return ", ".join(["%s: %s" % (a, b) for a, b in data.items()])
+ def get_analysis_text(self):
+ data = {
+ "Model": self.openupgrade_model_lines,
+ "Field": self.openupgrade_field_lines,
+ "XML": self.openupgrade_xml_lines,
+ }
+ # Remove empty values
+ data = {k: v for k, v in data.items() if v}
+ if not data:
+ return ""
+ else:
+ return ", ".join(["%s: %s" % (a, b) for a, b in data.items()])
+
+ def analysis_url(self):
+ return os.path.relpath(self.analysis_file, Path(os.getcwd()))
+
def analyse_missing_module(self):
last_existing_version = self.get_last_existing_version()
last_existing_version.analyse_size()
diff --git a/tests/data/output_expected/config.yml b/tests/data/output_expected/config.yml
index ed35c3b..ff05a0d 100644
--- a/tests/data/output_expected/config.yml
+++ b/tests/data/output_expected/config.yml
@@ -49,3 +49,15 @@ workload_settings:
# Porting 10 lines of XML costs 1 minute
port_per_xml_line_time: 0.10
+
+ # Minimal time for Openupgrade PR
+ open_upgrade_minimal_time: 10
+
+ # time for a line of model in the openupgrade_analysis.txt
+ openupgrade_model_line_time: 10
+
+ # Time for a line of field in the openupgrade_analysis.txt
+ openupgrade_field_line_time: 5
+
+ # Time for a line of XML in the openupgrade_analysis.txt
+ openupgrade_xml_line_time: 0.1