|
|
|
@ -463,6 +463,15 @@ class DirectoryTree:
|
|
|
|
|
directory_tree._tree = self._tree[directory]
|
|
|
|
|
return directory_tree
|
|
|
|
|
|
|
|
|
|
def __getitem__(self, name):
|
|
|
|
|
if name in self._tree:
|
|
|
|
|
return self._tree[name]
|
|
|
|
|
else:
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
def __setitem__(self, name, value):
|
|
|
|
|
self._tree[name] = value
|
|
|
|
|
|
|
|
|
|
def __iter__(self):
|
|
|
|
|
if self._tree is not None:
|
|
|
|
|
return iter(self._tree.keys())
|
|
|
|
@ -512,19 +521,23 @@ class DirectoryProcessor:
|
|
|
|
|
main.cl_template_path.split(','))
|
|
|
|
|
|
|
|
|
|
self.inheritable_parameters = set(
|
|
|
|
|
ParametersProcessor.inheritable_parameters)
|
|
|
|
|
ParametersProcessor.inheritable_parameters)
|
|
|
|
|
|
|
|
|
|
self.processed_packages = []
|
|
|
|
|
|
|
|
|
|
self.packages_to_merge = []
|
|
|
|
|
self.packages_file_trees = {}
|
|
|
|
|
|
|
|
|
|
def process_template_directories(self):
|
|
|
|
|
# Проходим каталоги из main.cl_template.path
|
|
|
|
|
|
|
|
|
|
# Режим заполнения очередей директорий пакетов, необходимых для более
|
|
|
|
|
# быстрой обработки параметра merge.
|
|
|
|
|
self.fill_queues = True
|
|
|
|
|
if self.for_package:
|
|
|
|
|
self.fill_trees = True
|
|
|
|
|
else:
|
|
|
|
|
self.fill_trees = False
|
|
|
|
|
|
|
|
|
|
def process_template_directories(self):
|
|
|
|
|
# Проходим каталоги из main.cl_template.path
|
|
|
|
|
for directory_path in self.template_paths:
|
|
|
|
|
self.base_directory = directory_path.strip()
|
|
|
|
|
entries = os.scandir(self.base_directory)
|
|
|
|
@ -535,10 +548,9 @@ class DirectoryProcessor:
|
|
|
|
|
self.cl_chroot_path,
|
|
|
|
|
ParametersContainer(),
|
|
|
|
|
directory_tree=self.directory_tree)
|
|
|
|
|
print('\n#######################################\n')
|
|
|
|
|
|
|
|
|
|
# Теперь когда дерево заполнено, можно выключить этот режим.
|
|
|
|
|
self.fill_queues = False
|
|
|
|
|
self.fill_trees = False
|
|
|
|
|
|
|
|
|
|
if self.for_package:
|
|
|
|
|
self.output.set_info('Processing packages from merge parameter...')
|
|
|
|
@ -547,13 +559,6 @@ class DirectoryProcessor:
|
|
|
|
|
|
|
|
|
|
def merge_packages(self):
|
|
|
|
|
not_merged_packages = []
|
|
|
|
|
print('It was for package: {}'.format(self.for_package))
|
|
|
|
|
print('Packages to merge: {}'.format(self.packages_to_merge))
|
|
|
|
|
print('ALL TREES')
|
|
|
|
|
for package, tree in self.packages_file_trees.items():
|
|
|
|
|
print('package: {}'.format(package))
|
|
|
|
|
print('tree')
|
|
|
|
|
tree.show_tree()
|
|
|
|
|
|
|
|
|
|
while self.packages_to_merge:
|
|
|
|
|
self.for_package = self.packages_to_merge.pop()
|
|
|
|
@ -566,12 +571,9 @@ class DirectoryProcessor:
|
|
|
|
|
not_merged_packages.append(self.for_package)
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
print('TREE FOR {}'.format(self.for_package))
|
|
|
|
|
|
|
|
|
|
for directory_name in self.packages_file_trees[self.for_package]:
|
|
|
|
|
directory_tree = self.packages_file_trees[self.for_package].\
|
|
|
|
|
get_directory_tree(directory_name)
|
|
|
|
|
print('current directory tree:')
|
|
|
|
|
|
|
|
|
|
self.walk_directory_tree(directory_tree.base_directory,
|
|
|
|
|
self.cl_chroot_path,
|
|
|
|
@ -579,6 +581,7 @@ class DirectoryProcessor:
|
|
|
|
|
directory_tree=directory_tree)
|
|
|
|
|
|
|
|
|
|
self.processed_packages.append(self.for_package)
|
|
|
|
|
|
|
|
|
|
if not_merged_packages:
|
|
|
|
|
self.output.set_error('Packages {} is not merged.'.
|
|
|
|
|
format(','.join(self.packages_to_merge)))
|
|
|
|
@ -586,7 +589,10 @@ class DirectoryProcessor:
|
|
|
|
|
self.output.set_success('All packages are merged...')
|
|
|
|
|
|
|
|
|
|
def get_directories_queue(self, path):
|
|
|
|
|
'''Уже не актуальный метод для построение очередей из путей к
|
|
|
|
|
шаблонам.'''
|
|
|
|
|
directories_queue = []
|
|
|
|
|
|
|
|
|
|
for base_dir in self.template_paths:
|
|
|
|
|
base_dir = base_dir.strip()
|
|
|
|
|
if path.startswith(base_dir):
|
|
|
|
@ -606,9 +612,8 @@ class DirectoryProcessor:
|
|
|
|
|
|
|
|
|
|
directory_name = os.path.basename(current_directory_path)
|
|
|
|
|
|
|
|
|
|
if self.fill_queues:
|
|
|
|
|
if self.fill_trees:
|
|
|
|
|
directory_tree[directory_name] = {}
|
|
|
|
|
pprint(directory_tree)
|
|
|
|
|
|
|
|
|
|
current_target_path = target_path
|
|
|
|
|
|
|
|
|
@ -627,8 +632,8 @@ class DirectoryProcessor:
|
|
|
|
|
|
|
|
|
|
# обрабатываем в первую очередь шаблон директории.
|
|
|
|
|
if '.calculate_directory' in template_files:
|
|
|
|
|
print('.calculate_directory is found.')
|
|
|
|
|
template_files.remove('.calculate_directory')
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
self.template_engine.process_template(
|
|
|
|
|
'.calculate_directory',
|
|
|
|
@ -659,40 +664,33 @@ class DirectoryProcessor:
|
|
|
|
|
current_target_path = join_paths(self.cl_chroot_path,
|
|
|
|
|
directory_parameters.path)
|
|
|
|
|
|
|
|
|
|
if self.check_package_and_action(
|
|
|
|
|
if self.fill_trees and self.check_package_and_action(
|
|
|
|
|
directory_parameters,
|
|
|
|
|
current_directory_path,
|
|
|
|
|
DIR,
|
|
|
|
|
directory_tree=directory_tree):
|
|
|
|
|
current_target_path = os.path.join(current_target_path,
|
|
|
|
|
directory_name)
|
|
|
|
|
elif self.fill_trees and self.check_package_and_action(
|
|
|
|
|
directory_parameters,
|
|
|
|
|
current_directory_path,
|
|
|
|
|
DIR):
|
|
|
|
|
current_target_path = os.path.join(current_target_path,
|
|
|
|
|
directory_name)
|
|
|
|
|
else:
|
|
|
|
|
# Обновляем дерево директорий для данного пакета.
|
|
|
|
|
if (directory_tree[directory_name] is None and
|
|
|
|
|
self.fill_queues):
|
|
|
|
|
print('\ndirectory_tree: {}'.format(
|
|
|
|
|
self.directory_tree))
|
|
|
|
|
print('packages_file_trees: {}\n'.format(
|
|
|
|
|
self.packages_file_trees))
|
|
|
|
|
if (self.fill_trees and
|
|
|
|
|
directory_tree[directory_name] is None):
|
|
|
|
|
package_name = directory_parameters.package
|
|
|
|
|
if package_name in self.packages_file_trees:
|
|
|
|
|
print('Package is in package file trees')
|
|
|
|
|
self.packages_file_trees[package_name].update_tree(
|
|
|
|
|
copy.deepcopy(self.directory_tree)
|
|
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
print('Package is not in package file trees')
|
|
|
|
|
directory_tree = DirectoryTree(self.base_directory)
|
|
|
|
|
directory_tree.update_tree(
|
|
|
|
|
copy.deepcopy(self.directory_tree))
|
|
|
|
|
self.packages_file_trees[package_name] = directory_tree
|
|
|
|
|
print(
|
|
|
|
|
'Created in: {}'.format(self.packages_file_trees))
|
|
|
|
|
self.output.set_error(
|
|
|
|
|
'add directory {} to merge'.format(
|
|
|
|
|
directory_name
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
directory_tree = {}
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
@ -700,7 +698,6 @@ class DirectoryProcessor:
|
|
|
|
|
self.packages_to_merge.extend(directory_parameters.merge)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
print('.calculate_directory is found.')
|
|
|
|
|
# Если .calculate_directory отсутствует -- создаем директорию
|
|
|
|
|
# используя унаследованные параметры и имя самой директории.
|
|
|
|
|
if not self.check_package_and_action(
|
|
|
|
@ -710,26 +707,18 @@ class DirectoryProcessor:
|
|
|
|
|
directory_tree=directory_tree):
|
|
|
|
|
# Обновляем дерево директорий для данного пакета.
|
|
|
|
|
if (directory_tree[directory_name] is None and
|
|
|
|
|
self.fill_queues):
|
|
|
|
|
self.fill_trees):
|
|
|
|
|
package_name = directory_parameters.package
|
|
|
|
|
print('\ndirectory_tree: {}'.format(self.directory_tree))
|
|
|
|
|
print('packages_file_trees: {}\n'.format(
|
|
|
|
|
self.packages_file_trees))
|
|
|
|
|
if package_name in self.packages_file_trees:
|
|
|
|
|
print('Package is in package file trees')
|
|
|
|
|
self.packages_file_trees[package_name].update_tree(
|
|
|
|
|
copy.deepcopy(self.directory_tree)
|
|
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
print('Package is not in package file trees')
|
|
|
|
|
directory_tree = DirectoryTree(self.base_directory)
|
|
|
|
|
directory_tree.update_tree(
|
|
|
|
|
copy.deepcopy(self.directory_tree))
|
|
|
|
|
self.packages_file_trees[package_name] = directory_tree
|
|
|
|
|
print(
|
|
|
|
|
'Created in: {}'.format(self.packages_file_trees))
|
|
|
|
|
self.output.set_error('add directory {} to merge'.format(
|
|
|
|
|
directory_name))
|
|
|
|
|
|
|
|
|
|
directory_tree = {}
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
@ -751,8 +740,8 @@ class DirectoryProcessor:
|
|
|
|
|
format(current_directory_path))
|
|
|
|
|
|
|
|
|
|
# Если режим заполнения очередей выключен -- используем имеющуюся
|
|
|
|
|
# очередь.
|
|
|
|
|
if not self.fill_queues and directory_tree:
|
|
|
|
|
# очередь для получения списков обрабатываемых файлов и директорий.
|
|
|
|
|
if not self.fill_trees and directory_tree:
|
|
|
|
|
template_files = []
|
|
|
|
|
template_directories = []
|
|
|
|
|
|
|
|
|
@ -789,14 +778,18 @@ class DirectoryProcessor:
|
|
|
|
|
|
|
|
|
|
template_text = self.template_engine.template_text
|
|
|
|
|
|
|
|
|
|
if not self.check_package_and_action(
|
|
|
|
|
if self.fill_trees and not self.check_package_and_action(
|
|
|
|
|
directory_parameters,
|
|
|
|
|
template_path, FILE,
|
|
|
|
|
directory_tree=directory_tree[directory_name]):
|
|
|
|
|
self.output.set_error('add template {} to merge'.format(
|
|
|
|
|
template_name))
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
elif not self.fill_trees and not self.check_package_and_action(
|
|
|
|
|
directory_parameters,
|
|
|
|
|
template_path, FILE):
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
# Если есть параметр merge добавляем в список
|
|
|
|
|
if self.for_package and directory_parameters.merge:
|
|
|
|
|
self.packages_to_merge.extend(directory_parameters.merge)
|
|
|
|
|
|
|
|
|
@ -826,44 +819,44 @@ class DirectoryProcessor:
|
|
|
|
|
format(template_path))
|
|
|
|
|
|
|
|
|
|
# Обновляем дерево директорий для данного пакета.
|
|
|
|
|
if (self.fill_queues and directory_tree[directory_name]):
|
|
|
|
|
if (self.fill_trees and directory_tree[directory_name]):
|
|
|
|
|
package_name = directory_parameters.package
|
|
|
|
|
|
|
|
|
|
if package_name in self.packages_file_trees:
|
|
|
|
|
print('Package is in package file trees')
|
|
|
|
|
self.packages_file_trees[package_name].update_tree(
|
|
|
|
|
copy.deepcopy(self.directory_tree))
|
|
|
|
|
else:
|
|
|
|
|
print('Package is not in package file trees')
|
|
|
|
|
directory_tree = DirectoryTree(self.base_directory)
|
|
|
|
|
directory_tree.update_tree(copy.deepcopy(self.directory_tree))
|
|
|
|
|
self.packages_file_trees[package_name] = directory_tree
|
|
|
|
|
print(
|
|
|
|
|
'Created in: {}'.format(self.packages_file_trees))
|
|
|
|
|
|
|
|
|
|
directory_tree[directory_name] = {}
|
|
|
|
|
|
|
|
|
|
# проходимся далее по директориям.
|
|
|
|
|
for directory in template_directories:
|
|
|
|
|
if self.fill_queues:
|
|
|
|
|
if self.fill_trees:
|
|
|
|
|
self.walk_directory_tree(
|
|
|
|
|
directory, current_target_path,
|
|
|
|
|
directory_parameters.get_inheritables(),
|
|
|
|
|
directory_tree=directory_tree[directory_name])
|
|
|
|
|
directory_tree[directory_name] = {}
|
|
|
|
|
else:
|
|
|
|
|
if isinstance(directory, DirectoryTree):
|
|
|
|
|
directory_path = directory.base_directory
|
|
|
|
|
else:
|
|
|
|
|
directory_path = directory
|
|
|
|
|
|
|
|
|
|
self.walk_directory_tree(
|
|
|
|
|
directory.base_directory,
|
|
|
|
|
directory_path,
|
|
|
|
|
current_target_path,
|
|
|
|
|
directory_parameters.get_inheritables(),
|
|
|
|
|
directory_tree=directory)
|
|
|
|
|
directory_parameters.get_inheritables())
|
|
|
|
|
|
|
|
|
|
if self.fill_queues:
|
|
|
|
|
if self.fill_trees:
|
|
|
|
|
directory_tree = {}
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
def check_package_and_action(self, parameters, template_path,
|
|
|
|
|
template_type, directory_tree={}):
|
|
|
|
|
template_type, directory_tree=None):
|
|
|
|
|
if parameters.append != 'skip':
|
|
|
|
|
if not parameters.action:
|
|
|
|
|
self.output.set_warning(
|
|
|
|
@ -888,7 +881,7 @@ class DirectoryProcessor:
|
|
|
|
|
# return False
|
|
|
|
|
|
|
|
|
|
elif parameters.package != self.for_package:
|
|
|
|
|
if self.fill_queues:
|
|
|
|
|
if directory_tree is not None:
|
|
|
|
|
template_name = os.path.basename(template_path)
|
|
|
|
|
directory_tree[template_name] = None
|
|
|
|
|
|
|
|
|
|