Merge branch 'dev-4-finish-openupgrade-analyse' into 'main'

Dev 4 finish openupgrade analyse

See merge request odoo-openupgrade-wizard/odoo-openupgrade-wizard!5
This commit is contained in:
LE GAL SYLVAIN 2022-06-20 21:57:44 +00:00
commit 6ca28fd3a9
4 changed files with 124 additions and 23 deletions

View File

@ -279,9 +279,14 @@ def get_openupgrade_analysis_files(
] ]
for file in 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 module_name = file.parent.parent.parent.name
else: else:
module_name = file.parent.parent.name module_name = file.parent.parent.name
result[module_name] = file result[module_name] = file
logger.debug(
"Release %s : %d analysis files found." % (release, len(result))
)
return result return result

View File

@ -38,6 +38,18 @@ workload_settings:
# Porting 10 lines of XML costs 1 minute # Porting 10 lines of XML costs 1 minute
port_per_xml_line_time: 0.10 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 = """ REPO_YML_TEMPLATE = """
@ -269,19 +281,32 @@ ANALYSIS_HTML_TEMPLATE = """
{% set module_version = odoo_module.get_module_version(release) %} {% set module_version = odoo_module.get_module_version(release) %}
{% if module_version %} {% if module_version %}
{% set size_text = module_version.get_size_text() %} {% set size_text = module_version.get_size_text() %}
{% set analysis_text = module_version.get_analysis_text() %}
{% set workload = module_version.workload %} {% set workload = module_version.workload %}
<td style="background-color:{{module_version.get_bg_color()}};"> <td style="background-color:{{module_version.get_bg_color()}};">
{{module_version.get_text()}} {{module_version.get_text()}}
{% if size_text %}
<span style="color:gray">({{ size_text}})</span>
{% endif %}
{% if workload %} {% if workload %}
<span style="background-color:lightblue;"> <span style="background-color:lightblue;">
({{ module_version.workload_hour_text()}}) ({{ module_version.workload_hour_text()}})
</span> </span>
{% endif %} {% endif %}
{% if size_text %}
<br/>
<span style="color:gray;font-size:11px;font-family:monospace;">
({{ size_text}})
</span>
{% endif %}
{% if analysis_text %}
<br/>
<span style="color:gray;font-size:11px;font-family:monospace;">
<a href="{{module_version.analysis_url()}}" target="_blank">
({{ analysis_text}})
</a>
</span>
{% endif %}
</td> </td>
{% else %} {% else %}
<td style="background-color:gray;">&nbsp;</td> <td style="background-color:gray;">&nbsp;</td>

View File

@ -75,19 +75,19 @@ class Analysis(object):
module_version.analyse_openupgrade_state(coverage_analysis) module_version.analyse_openupgrade_state(coverage_analysis)
for release in self.all_releases[1:]: 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( for odoo_module in filter(
lambda x: x.module_type == "odoo", self.modules lambda x: x.module_type == "odoo", self.modules
): ):
odoo_env_path = get_odoo_env_path(ctx, {"release": release}) module_version = odoo_module.get_module_version(release)
openupgrade_analysis_files = get_openupgrade_analysis_files( if module_version:
odoo_env_path, release module_version.analyse_openupgrade_work(
) openupgrade_analysis_files
# 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
# )
def analyse_missing_module(self): def analyse_missing_module(self):
for odoo_module in filter( for odoo_module in filter(
@ -435,6 +435,7 @@ class OdooModuleVersion(object):
self.xml_code = 0 self.xml_code = 0
self.javascript_code = 0 self.javascript_code = 0
self.workload = 0 self.workload = 0
self.analysis_file = False
self.openupgrade_model_lines = 0 self.openupgrade_model_lines = 0
self.openupgrade_field_lines = 0 self.openupgrade_field_lines = 0
self.openupgrade_xml_lines = 0 self.openupgrade_xml_lines = 0
@ -452,6 +453,10 @@ class OdooModuleVersion(object):
"port_per_javascript_line_time" "port_per_javascript_line_time"
] ]
port_per_xml_line_time = settings["port_per_xml_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"]: if self.state in ["merged", "renamed", "normal_loss"]:
# The module has been moved, nothing to do # The module has been moved, nothing to do
@ -467,8 +472,22 @@ class OdooModuleVersion(object):
): ):
return return
else: else:
# TODO self.workload = (
self.workload = 99 # 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 # OCA / Custom Module
if self.release != self.odoo_module.analyse.final_release: 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: if self.release == self.odoo_module.analyse.initial_release:
return return
analysis_file = analysis_files.get(self.odoo_module.name, False) analysis_file = analysis_files.get(self.odoo_module.name, False)
if analysis_file:
# TODO if not analysis_file:
pass return
else:
# TODO self.analysis_file = analysis_file
pass 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): def workload_hour_text(self):
if not self.workload: if not self.workload:
return "" 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): def get_size_text(self):
data = { data = {
@ -566,6 +609,22 @@ class OdooModuleVersion(object):
else: else:
return ", ".join(["%s: %s" % (a, b) for a, b in data.items()]) 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): def analyse_missing_module(self):
last_existing_version = self.get_last_existing_version() last_existing_version = self.get_last_existing_version()
last_existing_version.analyse_size() last_existing_version.analyse_size()

View File

@ -49,3 +49,15 @@ workload_settings:
# Porting 10 lines of XML costs 1 minute # Porting 10 lines of XML costs 1 minute
port_per_xml_line_time: 0.10 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