Commit 87bcd6d9 authored by Ayush Tiwari's avatar Ayush Tiwari

bt5_config: Add recursive migration of BT while updating layers

parent 1c634bbb
......@@ -827,6 +827,85 @@ class TemplateTool (BaseTool):
# XXX: Add layer=1 and sign=1 for default for all paths
template_path_list = [l + ' | 1 | 1' for l in template_path_list]
def reduceDependencyList(bt, template_path_list):
"""
Used for recursive udpation of layer for dependency in a BT
"""
dependency_list = bt.getDependencyList()
if not dependency_list:
return template_path_list
else:
# Copy of the initial template list to be used to update the layer
new_template_path_list = list(template_path_list)
for item in dependency_list:
dependency = item.split(' ', 1)
if len(dependency) > 1:
version = dependency[1]
if version:
version = version[1:-1]
base_bt = self.getLastestBTOnRepos(dependency[0], version)
else:
try:
base_bt = self.getLastestBTOnRepos(dependency[0])
except BusinessTemplateIsMeta:
bt_list = self.getProviderList(dependency[0])
# We explicilty use the Business Template which is used the most
# while dealing with provision list
repository_list = self.getRepositoryList()
if dependency[0] == 'erp5_full_text_catalog':
base_bt = [repository_list[1], 'erp5_full_text_mroonga_catalog']
if dependency[0] == 'erp5_view_style':
base_bt = [repository_list[0], 'erp5_xhtml_style']
if dependency[0] == 'erp5_catalog':
base_bt = [repository_list[0], 'erp5_mysql_innodb_catalog']
# XXX: Create path for the BT(s) here
# Download the base_bt
base_bt_path = os.path.join(base_bt[0], base_bt[1])
base_bt = self.download(base_bt_path)
# Check for the item list and if the BT is Business Manager,
# if BM, then compare and update layer and if not run migration and
# then do it again
if base_bt.getPortalType() == 'Business Manager':
# Check for item path which also exists in base_bt
base_path_list = base_bt.getPathList()
copy_of_template_path_list = new_template_path_list[:]
# Loop through all the paths in the new_template_path_list and
# check for their existence in base_path_list
for idx, path in enumerate(new_template_path_list):
path_list = path.split(' | ')
item_path = path_list[0]
item_layer = path_list[2]
if item_path in base_path_list:
# TODO: Increase the layer of the path item by +1 and save it
# back at updated_template_path_list
item_layer = int(item_layer) + 1
updated_path = item_path + ' | 1 | ' + str(item_layer)
copy_of_template_path_list[idx] = updated_path
new_template_path_list = copy_of_template_path_list
if base_bt.getPortalType() != 'Business Manager':
# Recursively reduce the base Business Templatem no need to do
# this for Business Manager(s) as it had already been migrated
# with taking care of layer
reduceDependencyList(base_bt, new_template_path_list)
# If the base_bt is not Business Manager, run the migration on the
# base_bt
else:
# XXX: Just calling migrateBTToBM here won't do anything, we need
# to remove the BT from path and then update it with the migrated
# one
base_bt = self.migrateBTToBM(base_bt_path)
return new_template_path_list
# Take care about the the dependency_list also and then update the layer
# accordingly for the path(s) that already exists in the dependencies.
template_path_list = reduceDependencyList(import_template, template_path_list)
# Create new sub-objects instead based on template_path_list
for path in template_path_list:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment