upgrade update
This commit is contained in:
@@ -75,6 +75,37 @@ elapsed() {
|
||||
printf '%dm %ds' $((secs / 60)) $((secs % 60))
|
||||
}
|
||||
|
||||
# --- Save/restore user-modifiable paths across git pull ---
|
||||
save_user_paths() {
|
||||
USER_SAVE_DIR="$(mktemp -d)"
|
||||
for p in "${USER_PATHS[@]}"; do
|
||||
if [[ -e "$PROJECT_DIR/$p" ]]; then
|
||||
mkdir -p "$USER_SAVE_DIR/$(dirname "$p")"
|
||||
cp -a "$PROJECT_DIR/$p" "$USER_SAVE_DIR/$p"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
restore_user_paths() {
|
||||
if [[ -z "${USER_SAVE_DIR:-}" ]] || [[ ! -d "${USER_SAVE_DIR:-}" ]]; then
|
||||
return
|
||||
fi
|
||||
local restored=0
|
||||
for p in "${USER_PATHS[@]}"; do
|
||||
if [[ -e "$USER_SAVE_DIR/$p" ]]; then
|
||||
# Ensure parent directory exists (in case pull deleted it)
|
||||
mkdir -p "$PROJECT_DIR/$(dirname "$p")"
|
||||
rm -rf "$PROJECT_DIR/$p"
|
||||
cp -a "$USER_SAVE_DIR/$p" "$PROJECT_DIR/$p"
|
||||
restored=$((restored + 1))
|
||||
fi
|
||||
done
|
||||
rm -rf "$USER_SAVE_DIR"
|
||||
if [[ $restored -gt 0 ]]; then
|
||||
success "Restored $restored user-modifiable path(s)"
|
||||
fi
|
||||
}
|
||||
|
||||
# --- Lockfile ---
|
||||
acquire_lock() {
|
||||
if [[ -f "$LOCK_FILE" ]]; then
|
||||
@@ -142,6 +173,10 @@ print_rollback_help() {
|
||||
# --- Failure trap ---
|
||||
on_failure() {
|
||||
local exit_code=$?
|
||||
# Clean up user path save directory if it exists
|
||||
if [[ -n "${USER_SAVE_DIR:-}" ]] && [[ -d "${USER_SAVE_DIR:-}" ]]; then
|
||||
rm -rf "$USER_SAVE_DIR"
|
||||
fi
|
||||
release_lock
|
||||
if [[ $exit_code -ne 0 ]] && [[ "$DRY_RUN" != "true" ]]; then
|
||||
error "Upgrade failed at line ${BASH_LINENO[0]} (exit code $exit_code)"
|
||||
@@ -454,11 +489,15 @@ if [[ "$DRY_RUN" == "true" ]]; then
|
||||
else
|
||||
info "No new commits to pull."
|
||||
fi
|
||||
info "[DRY RUN] Would preserve user-modifiable paths: ${USER_PATHS[*]}"
|
||||
info "[DRY RUN] Would stash local changes, pull, and pop stash"
|
||||
release_lock
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Step 0: Save user-modifiable paths before any git operations
|
||||
save_user_paths
|
||||
|
||||
# Step 1: Stash user changes if any exist
|
||||
HAS_CHANGES=false
|
||||
if [[ -n "$(git status --porcelain 2>/dev/null)" ]]; then
|
||||
@@ -523,6 +562,9 @@ if [[ "$HAS_CHANGES" == "true" ]]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Step 4b: Restore user-modifiable paths (unconditionally overwrites with saved copies)
|
||||
restore_user_paths
|
||||
|
||||
# Step 5: Detect new env vars
|
||||
info "Checking for new environment variables..."
|
||||
if [[ -f "$PROJECT_DIR/.env.example" ]] && [[ -f "$PROJECT_DIR/.env" ]]; then
|
||||
|
||||
Reference in New Issue
Block a user