Skip to content

Conversation

seefood
Copy link
Contributor

@seefood seefood commented Oct 7, 2025

Summary

Improves the uninstall script to preserve user's current configuration before restoring the old backup.

Problem

The uninstall script was blindly restoring from a backup file created during initial installation, potentially overwriting months or years of changes with no way to recover them.

Example scenario:

  1. User installs bash-it in 2023
  2. User makes extensive customizations to .bashrc over the next year
  3. User runs uninstall.sh in 2024
  4. All 2024 changes are lost, replaced with 2023 backup

Solution

Before restoring the old backup, create a new backup of the current config:

  • Saves current config to ~/.bashrc.pre-uninstall.bak (or ~/.bash_profile.pre-uninstall.bak)
  • Clear messaging about where the backup is saved
  • Users can review and merge changes if needed
  • Fully backwards compatible

Changes

# Create a backup of the current config before restoring the old one
if [[ -e "${HOME?}/$CONFIG_FILE" ]]; then
    cp -a "${HOME?}/$CONFIG_FILE" "${HOME?}/$CONFIG_FILE.pre-uninstall.bak"
    printf "Current ~/$CONFIG_FILE backed up to ~/$CONFIG_FILE.pre-uninstall.bak"
fi

Testing

  • ✅ Passes shellcheck with no warnings
  • ✅ Passes shfmt formatting checks
  • ✅ Passes all pre-commit hooks
  • ✅ Backwards compatible with existing uninstall flow

Related

Closes #2238

🤖 Generated with Claude Code

The uninstall script was blindly restoring from an old backup file created
during initial installation, potentially overwriting months or years of user
changes made after installing bash-it.

**Problem:**
Users who ran uninstall.sh would lose all changes made to their bashrc
since the initial bash-it installation, with no way to recover them.

**Solution:**
Before restoring the old backup, create a new backup of the current config
at ~/.bashrc.pre-uninstall.bak (or ~/.bash_profile.pre-uninstall.bak).

**Benefits:**
- Users' current configurations are preserved
- Users can review and merge changes if needed
- Clear messaging about where to find the backup
- Backwards compatible with existing behavior

**Testing:**
- Passes shellcheck with no warnings
- Passes shfmt formatting checks

Closes Bash-it#2238

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
seefood added a commit that referenced this pull request Oct 7, 2025
Updated all three planning documents to reflect the completed work:

**Issues Fixed (6 total)**:
- #2317: Auto-detect git remote (PR #2345)
- #2248: Laravel artisan completion (PR #2349)
- #2296: down4me URL malformation (PR #2350)
- #2260: SSH completion @ sign (PR #2351)
- #2238: Uninstall script backup (PR #2352)
- #2216: Node version conditional display (PR #2353)

**Changes to docs/plans/**:
1. bash-it-issues-comprehensive-analysis.md
   - Marked 5 quick wins as FIXED with PR numbers
   - Updated executive summary: 32 → 27 open issues
   - Updated work plan to show Phase 1 completed
   - Updated issue reference appendix

2. bash-it-quick-reference.md
   - Moved completed issues to "Fixed" section
   - Updated TL;DR metrics
   - Removed completed items from decision list
   - Updated metrics table with current progress

3. bash-it-roadmap-2025.md
   - Updated health metrics (32 → 27 issues)
   - Marked Phase 1 as COMPLETED
   - Listed all 6 PRs with dates
   - Updated success criteria checkmarks

**Remaining Work**:
- 1 quick fix (#2314 - todo alias rename)
- 18 stale issues to close
- 4 strategic decisions needed

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Use -L flag with cp to dereference symlinks when backing up current config.
This ensures users with homesick or other symlink-based dotfile managers get
the actual file content backed up, not just another symlink.

Without this fix:
- User has ~/.bashrc -> ~/dotfiles/bashrc (symlink)
- Uninstall creates ~/.bashrc.pre-uninstall.bak -> ~/dotfiles/bashrc (symlink)
- If user later removes dotfiles repo, backup becomes dangling symlink

With this fix:
- User has ~/.bashrc -> ~/dotfiles/bashrc (symlink)
- Uninstall creates ~/.bashrc.pre-uninstall.bak (regular file with content)
- Backup is always accessible regardless of symlink target state

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@seefood seefood merged commit b2c131c into Bash-it:master Oct 7, 2025
6 checks passed
@seefood seefood deleted the fix/uninstall-script-backup-safety branch October 7, 2025 13:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Uninstall script shouldn't delete existing bashrc and mindlessly pull from old backup

1 participant