1
0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2025-12-13 16:04:08 +08:00

Compare commits

...

4 Commits

Author SHA1 Message Date
Paul Frederiksen
0ab6bbad1e
Merge 4bcd3b5757 into f84341c574 2025-12-11 19:47:19 +01:00
tDwtp
f84341c574
fix(git): git_status_prompt should respect spaces in prefixes (#13478) 2025-12-11 15:05:23 +01:00
Tanzim Hossain Romel
92aed2e936
feat(extract): add unar as fallback for RAR extraction (#13472)
Add unar as a fallback when unrar is not available for extracting
RAR files. This addresses the issue where unrar has been removed
from Homebrew due to licensing issues.

The extraction now:
- Prefers unrar if available (backward compatible)
- Falls back to unar if unrar is not found
- Shows helpful error message if neither tool is installed
2025-12-09 20:14:31 +01:00
Paul Frederiksen
4bcd3b5757 fix: prevent .zshrc deletion during uninstall when no backup exists
Fixes #13156

- Enhanced uninstall script to automatically restore .zshrc from uninstall backup
  when no original backup (.zshrc.pre-oh-my-zsh) exists
- Improved install script to create backup even when KEEP_ZSHRC=yes
- Added better user feedback and error handling
- Prevents data loss for users who installed with --keep-zshrc option

The issue occurred when users installed oh-my-zsh with KEEP_ZSHRC=yes
(keeping their existing .zshrc), which didn't create a backup. During
uninstall, their .zshrc would be deleted with no backup to restore.

Now the uninstall process:
1. Creates a timestamped backup of current .zshrc
2. Looks for original backup (.zshrc.pre-oh-my-zsh)
3. If found, restores the original
4. If not found, automatically restores from the uninstall backup
5. Provides clear feedback to the user

This ensures users never lose their .zshrc configuration during uninstall.
2025-09-10 12:37:18 -04:00
4 changed files with 28 additions and 2 deletions

View File

@ -117,7 +117,7 @@ function _omz_git_prompt_status() {
fi
# For each status prefix, do a regex comparison
for status_prefix in ${(k)prefix_constant_map}; do
for status_prefix in "${(@k)prefix_constant_map}"; do
local status_constant="${prefix_constant_map[$status_prefix]}"
local status_regex=$'(^|\n)'"$status_prefix"

View File

@ -77,7 +77,15 @@ EOF
(*.lzma) unlzma "$full_path" ;;
(*.z) uncompress "$full_path" ;;
(*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx|*.pk3|*.pk4) unzip "$full_path" ;;
(*.rar) unrar x -ad "$full_path" ;;
(*.rar)
if (( $+commands[unrar] )); then
unrar x -ad "$full_path"
elif (( $+commands[unar] )); then
unar -o . "$full_path"
else
echo "extract: cannot extract RAR files: install unrar or unar" >&2
success=1
fi ;;
(*.rpm)
rpm2cpio "$full_path" | cpio --quiet -id ;;
(*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;;

View File

@ -341,6 +341,11 @@ setup_zshrc() {
# Skip this if the user doesn't want to replace an existing .zshrc
if [ "$KEEP_ZSHRC" = yes ]; then
echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Keeping...${FMT_RESET}"
# Still create a backup for uninstall safety, but don't overwrite the existing .zshrc
if [ ! -e "$OLD_ZSHRC" ]; then
echo "${FMT_GREEN}Creating backup at ${OLD_ZSHRC} for safe uninstall${FMT_RESET}"
cp "$zdot/.zshrc" "$OLD_ZSHRC"
fi
return
fi

View File

@ -35,6 +35,19 @@ if [ -e "$ZSHRC_ORIG" ]; then
echo "Your original zsh config was restored."
else
echo "No original zsh config found"
# Check if we have a backup from this uninstall session
if [ -e ~/.zshrc.omz-uninstalled-* ]; then
echo "However, your .zshrc was backed up during this uninstall."
echo "Restoring it automatically..."
# Find the most recent backup and restore it
LATEST_BACKUP=$(ls -t ~/.zshrc.omz-uninstalled-* 2>/dev/null | head -1)
if [ -n "$LATEST_BACKUP" ]; then
mv "$LATEST_BACKUP" ~/.zshrc
echo "Your .zshrc has been restored from backup."
fi
else
echo "No backup found. You may need to recreate your .zshrc configuration."
fi
fi
echo "Thanks for trying out Oh My Zsh. It's been uninstalled."