forked from CastroFidel/winehelper
updated creation and restoration of a prefix backup
This commit is contained in:
58
winehelper
58
winehelper
@ -1568,12 +1568,13 @@ backup_prefix() {
|
||||
export WINEPREFIX="$1"
|
||||
check_prefix_var
|
||||
|
||||
local backup_base_dir="$(xdg-user-dir DESKTOP)"
|
||||
local backup_archive_name="backup_${PREFIX_NAME}_$(date +%Y.%m.%d).whpack"
|
||||
local backup_dest_path="$backup_base_dir/$backup_archive_name"
|
||||
local temp_backup_dir="$WH_TMP_DIR/backup_${PREFIX_NAME}_$(date +%Y.%m.%d)"
|
||||
local temp_prefix_dir="$temp_backup_dir/prefixes/$PREFIX_NAME"
|
||||
local temp_users_dir="$temp_prefix_dir/drive_c/users"
|
||||
local backup_base_dir backup_archive_name backup_dest_path temp_backup_dir temp_prefix_dir temp_users_dir
|
||||
backup_base_dir="$(xdg-user-dir DESKTOP)"
|
||||
backup_archive_name="backup_${PREFIX_NAME}_$(date +%d.%m.%Y-%H.%M.%S).whpack"
|
||||
backup_dest_path="$backup_base_dir/$backup_archive_name"
|
||||
temp_backup_dir="$WH_TMP_DIR/backup_${PREFIX_NAME}_$(date +%d.%m.%Y-%H.%M.%S)"
|
||||
temp_prefix_dir="$temp_backup_dir/prefixes/$PREFIX_NAME"
|
||||
temp_users_dir="$temp_prefix_dir/drive_c/users"
|
||||
|
||||
print_info "Начало резервного копирования префикса: $PREFIX_NAME"
|
||||
create_new_dir "$temp_backup_dir"
|
||||
@ -1617,9 +1618,11 @@ backup_prefix() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# Сохраняем метаданные внутри временной директории
|
||||
echo "$PREFIX_NAME" > "$temp_backup_dir/prefix_name.whmeta"
|
||||
|
||||
print_info "Создание squashfs архива..."
|
||||
if mksquashfs "$temp_backup_dir" "$backup_dest_path" -comp zstd ; then
|
||||
echo -e "\n# PREFIX_NAME=$PREFIX_NAME" >> "$backup_dest_path"
|
||||
print_ok "Архив префикса $PREFIX_NAME успешно создан по пути:\n$backup_dest_path"
|
||||
else
|
||||
print_error "Не удалось создать архив префикса $PREFIX_NAME."
|
||||
@ -1651,15 +1654,7 @@ restore_prefix() {
|
||||
|
||||
print_info "Восстановление из резервной копии: $backup_archive_path"
|
||||
|
||||
prefix_name="$(tail -n1 "$backup_archive_path" | sed -e 's/.*PREFIX_NAME=//')"
|
||||
|
||||
if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then
|
||||
fatal "Префикс $prefix_name уже существует!
|
||||
Удалите его, если действительно желаете восстановить префикс заново.
|
||||
Команда для удаления: $SCRIPT_NAME remove-prefix $prefix_name"
|
||||
fi
|
||||
|
||||
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)"
|
||||
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)_$$"
|
||||
create_new_dir "$temp_extract_dir"
|
||||
|
||||
print_info "Распаковка архива..."
|
||||
@ -1670,9 +1665,32 @@ restore_prefix() {
|
||||
fatal "Не удалось распаковать архив."
|
||||
fi
|
||||
|
||||
if [[ -d "$temp_extract_dir/prefixes" ]] ; then
|
||||
local prefix_name
|
||||
prefix_name="$(ls -1 "$temp_extract_dir/prefixes")"
|
||||
# Определяем имя префикса
|
||||
if [[ -f "$temp_extract_dir/prefix_name.whmeta" ]]; then
|
||||
prefix_name="$(cat "$temp_extract_dir/prefix_name.whmeta")"
|
||||
try_remove_file "$temp_extract_dir/prefix_name.whmeta"
|
||||
elif grep -q "PREFIX_NAME=" "$backup_archive_path" ; then
|
||||
# Обратная совместимость со старыми бэкапами (с приписанной строкой)
|
||||
prefix_name="$(tail -n1 "$backup_archive_path" | sed -e 's/.*PREFIX_NAME=//')"
|
||||
elif [[ -d "$temp_extract_dir/prefixes" ]] && [[ $(find "$temp_extract_dir/prefixes" -mindepth 1 -maxdepth 1 -type d | wc -l) -eq 1 ]]; then
|
||||
# Обратная совместимость со старыми бэкапами (по имени каталога)
|
||||
prefix_name="$(basename "$(find "$temp_extract_dir/prefixes" -mindepth 1 -maxdepth 1 -type d)")"
|
||||
else
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
fatal "Не удалось определить имя префикса в архиве (метаданные не найдены)."
|
||||
fi
|
||||
|
||||
if [[ -z "$prefix_name" ]]; then
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
fatal "Не удалось определить имя префикса в архиве."
|
||||
fi
|
||||
|
||||
if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
fatal "Префикс $prefix_name уже существует!\n Удалите его, если действительно желаете восстановить префикс заново.\n Команда для удаления: $SCRIPT_NAME remove-prefix $prefix_name"
|
||||
fi
|
||||
|
||||
if [[ -d "$temp_extract_dir/prefixes/$prefix_name" ]] ; then
|
||||
local prefix_dir="$temp_extract_dir/prefixes/$prefix_name"
|
||||
|
||||
print_info "Восстановление префикса: $prefix_name"
|
||||
@ -1711,7 +1729,7 @@ restore_prefix() {
|
||||
fi
|
||||
else
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
fatal "Директория prefixes не найдена в архиве."
|
||||
fatal "Директория префикса '$prefix_name' не найдена в архиве."
|
||||
fi
|
||||
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
|
Reference in New Issue
Block a user