Bug 53884

Summary: Не работает замена папок
Product: Sisyphus Reporter: Vladislav Glinkin <glinkinvd>
Component: gpupdateAssignee: Valery Sinelnikov <greh>
Status: ASSIGNED --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: greh, nir, sin
Version: unstable   
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=45645

Description Vladislav Glinkin 2025-04-17 17:22:29 MSK
Версия пакета: gpupdate-0.13.2-alt1

Шаги воспроизведения:
1. Компьютер -> Административные шаблоны -> Система ALT -> Групповые политики -> Экспериментальные групповые политики -> Включено
2. Компьютер -> Административные шаблоны -> Система ALT -> Групповые политики -> Механизмы GPUpdate:
-   Управление локальными каталогами -> Включено
-   Управление локальными каталогами для пользователей -> Включено
3. Открыть раздел Компьютер - Настройки - Настройки системы - Папки
4. Создать папку и запустить gpupdate на клиентской машине
5. Изменить ранее созданную папку в GPUI: поменять путь и выбрать "Действие -> Изменить"

Фактический результат:
Предыдущая папка сохраняется, создаётся новая.

Ожидаемый результат:
Предыдущая папка удаляется, создаётся новая.

Дополнительно:
Аналогично https://bugzilla.altlinux.org/47645, причина в том, что работаем с FOLDERS.XML, которое не сохраняет предыдущее значение.

gpoa/frontend/appliers/folder.py:
    def act(self):
        if self.hidden_folder == True and str(self.folder_path.name)[0] != '.':
            path_components = list(self.folder_path.parts)
            path_components[-1] = '.' + path_components[-1]
            new_folder_path = Path(*path_components)
            self.folder_path = new_folder_path
        if self.action == FileAction.CREATE:
            self._create_action()
        if self.action == FileAction.UPDATE:
            self._create_action()
        if self.action == FileAction.DELETE:
            self._delete_action()
        if self.action == FileAction.REPLACE:
            self._delete_action()
            self._create_action()

    def _delete_action(self):
        if self.folder_path.exists():
            if self.action == FileAction.REPLACE:
                self.delete_folder = True
            remove_dir_tree(self.folder_path,
                self.delete_files,
                self.delete_folder,
                self.delete_sub_folders)

gpoa/gpt/folders.py:
def read_folders(folders_file):
    folders = list()

    for fld in get_xml_root(folders_file):
        props = fld.find('Properties')
        path = props.get('path')
        action = props.get('action', default='C')
        fld_obj = folderentry(path, action)
        fld_obj.set_delete_folder(folder_int2bool(props.get('deleteFolder', default=1)))
        fld_obj.set_delete_sub_folders(folder_int2bool(props.get('deleteSubFolders', default=1)))
        fld_obj.set_delete_files(folder_int2bool(props.get('deleteFiles', default=1)))
        fld_obj.set_hidden_folder(folder_int2bool(props.get('hidden', default=0)))

        folders.append(fld_obj)


    return folders

Полагаю, что если изменить логику работы таким образом, чтобы оперировать вводными данными из dconf - то будет работать, поскольку там сохраняется предыдущее значение в Previous/Software/BaseALT/Policies/Preferences/Machine