Summary
Критический баг потери данных: при автообновлении Linux Portable zip скрипт buildLinuxBundleReplaceScript удаляет папку QueryaData с базой данных подключений и историей пользователя.
Context & Cause
В lib/core/updater/installers/update_install_utils.dart (строки 165–170):
if command -v rsync >/dev/null 2>&1; then
rsync -a --delete "$SRC"/ "$DST"/
else
rm -rf "$DST"/*
cp -a "$SRC"/. "$DST"/
fi
Когда пользователь использует Portable-режим, директория профиля QueryaData (где лежат querya.db, темы и расширения) располагается прямо в $DST.
- При вызове
rsync -a --delete: флаг --delete удаляет любые файлы и папки в $DST, которых нет в распакованном исходнике $SRC (включая QueryaData).
- При отсутствии rsync: команда
rm -rf "$DST"/* принудительно стирает ВСЁ содержимое каталога установки под корень!
Fix
- В
rsync добавить исключение: --exclude='QueryaData'.
- В fallback ветке никогда не выполнять слепой
rm -rf "$DST"/*. Находить и удалять только системные файлы бандла Flutter (lib/, data/, querya_desktop), сохраняя QueryaData.
Acceptance Criteria
Summary
Критический баг потери данных: при автообновлении Linux Portable zip скрипт
buildLinuxBundleReplaceScriptудаляет папкуQueryaDataс базой данных подключений и историей пользователя.Context & Cause
В
lib/core/updater/installers/update_install_utils.dart(строки 165–170):Когда пользователь использует Portable-режим, директория профиля
QueryaData(где лежатquerya.db, темы и расширения) располагается прямо в$DST.rsync -a --delete: флаг--deleteудаляет любые файлы и папки в$DST, которых нет в распакованном исходнике$SRC(включаяQueryaData).rm -rf "$DST"/*принудительно стирает ВСЁ содержимое каталога установки под корень!Fix
rsyncдобавить исключение:--exclude='QueryaData'.rm -rf "$DST"/*. Находить и удалять только системные файлы бандла Flutter (lib/,data/,querya_desktop), сохраняяQueryaData.Acceptance Criteria
QueryaDataи файлquerya.dbостаются в целости и сохранности.test/core/updater/на проверку скрипта обновления с флагом исключенияQueryaData.