Templates with append = 'link' are able to create links to an unexisting files or directories if force parameter is set now. fixed #68

master
Иванов Денис 3 years ago
parent 62db17009a
commit d52239f172

@ -280,14 +280,12 @@ class ParametersProcessor:
parameter_value):
self._parameters_container.set_inheritable(
{parameter_name: checked_value})
return
else:
self._parameters_container.set_inheritable(
{parameter_name: checked_value})
return
self._parameters_container.set_parameter(
{parameter_name: checked_value})
else:
self._parameters_container.set_parameter({parameter_name:
checked_value})
def check_postparse_parameters(self) -> None:
'''Метод, запускающий проверку параметров после их разбора.'''
@ -306,6 +304,8 @@ class ParametersProcessor:
'''Метод, запускающий проверку указанных параметров.'''
self.template_type = template_type
self.lineno = lineno
print('TEMPLATE PARAMETERS:')
print(parameters)
for parameter_name in parameters:
if parameter_name not in self.available_parameters:
@ -473,7 +473,7 @@ class ParametersProcessor:
# Ставим True, чтобы потом проверить этот параметр в postparse
if not os.path.exists(real_path):
return True
return (False, real_path)
source_file_type = DIR if os.path.isdir(real_path) else FILE
@ -601,8 +601,11 @@ class ParametersProcessor:
# Если файл по пути source не существует, но присутствует параметр
# mirror -- пропускаем шаблон для того, чтобы целевой файл мог быть
# удален в исполнительном модуле.
if parameter_value is True:
if not self._parameters_container.mirror:
if isinstance(parameter_value, tuple):
if (self._parameters_container.append == "link" and
self._parameters_container.force):
self._parameters_container['source'] = parameter_value[1]
elif not self._parameters_container.mirror:
raise IncorrectParameter(
"File from 'source' parameter does not exist")
elif (self.template_type == DIR and

@ -310,7 +310,8 @@ class TemplateWrapper:
'''Метод для проверки конфликтов типов.'''
if self.parameters.append == 'link':
if self.parameters.force:
self.remove_original = True
if os.path.exists(self.parameters.source):
self.remove_original = True
elif self.target_is_link:
if self.template_type != self.target_type:
raise TemplateTypeConflict(
@ -1308,10 +1309,10 @@ class TemplateExecutor:
if template_object.contents_matching:
output_paths = [output_path]
# Если целевой файл защищен, а шаблон не userspace.
# Если целевой файл защищен, а шаблон не userspace,
# тогда также обновляем архив.
if (template_object.protected
and not template_object.is_userspace):
# Тогда также обновляем архив.
output_paths.append(template_object.archive_path)
for link_path in output_paths:
@ -1483,7 +1484,8 @@ class TemplateExecutor:
" reason: {}").format(target_path,
error_message))
def _link_directory(self, source: str, target_path: str) -> None:
def _link_directory(self, source: str, target_path: str,
force: bool = False) -> None:
'''Метод для создания по целевому пути ссылки на директорию
расположенную на пути, указанному в source.'''
try:

@ -1112,7 +1112,7 @@ class TestDirectoryProcessor:
'install',
datavars_module=datavars,
install='test-category/test-package'
)
)
directory_processor.process_template_directories()
test_package = Package(test_package_name_1, chroot_path=CHROOT_PATH)
@ -1570,6 +1570,16 @@ class TestDirectoryProcessor:
"Format execution error: correction failed Template:"
f" {join_paths(CHROOT_PATH, 'templates_53/install/patch')}")
def test_templates_with_append_link_force_and_source_paths_to_an_unexisting_file_or_directory(self):
datavars.main['cl_template_path'] = os.path.join(CHROOT_PATH,
'templates_54')
directory_processor = DirectoryProcessor('install',
datavars_module=datavars
)
directory_processor.process_template_directories()
assert os.path.lexists(join_paths(CHROOT_PATH, '/etc/link_0'))
assert os.path.lexists(join_paths(CHROOT_PATH, '/etc/link_1'))
def test_view_tree(self):
list_path = join_paths(CHROOT_PATH, '/etc')
show_tree(list_path)

@ -0,0 +1,2 @@
{% calculate append = "link", package = "test-category/test-package",
source = "/unexisting/dir", force %}

@ -0,0 +1,2 @@
{% calculate append = "link", package = "test-category/test-package",
source = "/unexisting/file", force %}
Loading…
Cancel
Save