fix(install): чужой конфиг kitty больше не срывает stow целиком
- Зачем:
- при существующем ~/.config/kitty/kitty.conf stow печатал
"All operations aborted" и откатывал все пакеты, а install.sh падал
по pipefail, не дойдя до настройки claude, opencode и .bashrc.
- Что:
- добавлена backup_conflicting_kitty_files: неуправляемые файлы и чужие
симлинки в ~/.config/kitty уносятся в .bak с временной меткой перед stow.
- собственные симлинки пакета пропускаются, поэтому повторный запуск
install.sh не плодит бэкапы.
- добавлены тесты на существующий файл, чужой симлинк и повторный запуск.
- из таблицы пакетов README убран zed: он не в PACKAGES с ab4c7c7.
- Проверка:
- bash tests/test_install.sh
This commit is contained in:
1 parent
91592c5893
commit
6610adeac5
3 files changed
+99
-1
No files matched your search
+39
@@ -169,6 +169,43 @@ migrate_claude_stow_symlink() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Убрать с пути чужие файлы конфигурации kitty: kitty создаёт их сам, и без
|
||||
# бэкапа stow отказывается ставить весь набор пакетов ("All operations
|
||||
# aborted"), а не только kitty.
|
||||
backup_conflicting_kitty_files() {
|
||||
local src_dir="$DOTFILES_DIR/kitty/.config/kitty"
|
||||
local dst_dir="$HOME/.config/kitty"
|
||||
local src=""
|
||||
local dst=""
|
||||
local base=""
|
||||
local src_real=""
|
||||
local dst_real=""
|
||||
|
||||
[ -d "$src_dir" ] || return 0
|
||||
[ -d "$dst_dir" ] || return 0
|
||||
[ ! -L "$dst_dir" ] || return 0
|
||||
|
||||
for src in "$src_dir"/*; do
|
||||
[ -e "$src" ] || continue
|
||||
base="$(basename "$src")"
|
||||
dst="$dst_dir/$base"
|
||||
|
||||
# -L отдельно от -e: битый симлинк для stow тоже конфликт.
|
||||
[ -e "$dst" ] || [ -L "$dst" ] || continue
|
||||
|
||||
# Симлинк на наш же файл — это результат прошлого прогона, не трогаем.
|
||||
if [ -L "$dst" ]; then
|
||||
src_real="$(readlink -f "$src" 2>/dev/null || true)"
|
||||
dst_real="$(readlink -f "$dst" 2>/dev/null || true)"
|
||||
if [ -n "$src_real" ] && [ "$src_real" = "$dst_real" ]; then
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
backup_existing_path "$dst" "~/.config/kitty/$base"
|
||||
done
|
||||
}
|
||||
|
||||
# Миграция: раскрыть старую stow-ссылку ~/.config -> zed/.config.
|
||||
# В пакете zed остаётся только управляемый каталог zed; остальные настройки
|
||||
# возвращаются в домашний каталог и больше не попадают в репозиторий.
|
||||
@@ -341,6 +378,8 @@ if [ -d "$HOME/.config" ] && [ ! -L "$HOME/.config" ] \
|
||||
mkdir -p "$HOME/.config/kitty"
|
||||
fi
|
||||
|
||||
backup_conflicting_kitty_files
|
||||
|
||||
if [ "${#AVAILABLE_PACKAGES[@]}" -gt 0 ]; then
|
||||
stow_package "${AVAILABLE_PACKAGES[@]}"
|
||||
fi
|
||||
|
||||
Reference in new issue
Block a user