Last active
September 20, 2023 02:39
-
-
Save auipga/8726110728ff6ccf75fe4671bf35115f to your computer and use it in GitHub Desktop.
This script circumvents the guaranteed loss of your loved local file history in PhpStorm (with hook for Archlinux)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[Trigger] | |
Operation = Upgrade | |
Operation = Install | |
Type = Package | |
Target = phpstorm | |
[Action] | |
Depends = rsync | |
Description = Keeping JetBrains Cache (including local file history)... | |
When = PostTransaction | |
Exec = /usr/bin/su your_user_name -c ~/.local/bin/phpstorm-upgrade.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# choose: rsync, mv, cp, ln. cp is great for btrfs | |
METHOD=cp | |
PACKAGE=phpstorm # or: phpstorm-eap | |
PKGNAME=PhpStorm # what the folder name starts with | |
CACHE_LOCATION=~/.cache/JetBrains | |
# no changes needed below this line | |
VERSION=$(pacman -Qi "$PACKAGE" | grep -Po '^Version\s*: \K.+') # 2022.3.1-1 | |
ARRAY=( ${VERSION//./ } ) # array ("2022", "3", "1-1") or array ("2023", "1-1") | |
NEW_FOLDER_NAME="${PKGNAME}${ARRAY[0]}.${ARRAY[1]%-*}" # PhpStorm2022.3 | |
NEW_CACHE_FOLDER=$CACHE_LOCATION/$NEW_FOLDER_NAME | |
function e() { echo "${PACKAGE}-hook: $*"; } | |
if [[ $EUID -eq 0 ]]; then e "Do not run this as root!"; exit 1; fi | |
# TODO: fix this regex, which I think should already work but doesn't | |
#if [[ ! $VERSION =~ "^20\d\d\.\d\.\d+(\-\d+)?$" ]]; then | |
# e "Version \"${VERSION}\" looks wrong. Backup skipped." | |
# exit 1 | |
#fi | |
if [ -d $NEW_CACHE_FOLDER ]; then | |
e "Recent cache folder is already present at $NEW_CACHE_FOLDER" | |
exit 0 | |
fi | |
function handle() { # method, source, target | |
set +e | |
e "$OLD_FOLDER_NAME -> $NEW_FOLDER_NAME (${1})" | |
if [[ $1 == rsync ]]; then | |
rsync -avzq "$2" "$3" | |
elif [[ $1 == ln ]]; then | |
ln -srf "$2" "$3" | |
elif [[ $1 == cp ]]; then | |
cp -ra "$2" "$3" | |
elif [[ $1 == mv ]]; then | |
mv "$2" "$3" | |
else | |
e "Error: Method unsupported" | |
exit 1 | |
fi | |
e "Success!" | |
exit 0 | |
} | |
# find most recent existing folder | |
MAJOR=${ARRAY[0]} | |
MINOR=${ARRAY[1]%-*} | |
while [ $MAJOR -ge 2016 ]; do | |
while [ $MINOR -ge 1 ]; do | |
OLD_FOLDER_NAME="${PKGNAME}${MAJOR}.${MINOR}" | |
OLD_CACHE_FOLDER=$CACHE_LOCATION/$OLD_FOLDER_NAME | |
if [ -d $OLD_CACHE_FOLDER ]; then | |
handle "$METHOD" "$OLD_CACHE_FOLDER" "$NEW_CACHE_FOLDER" | |
#else | |
# echo "no hit: $OLD_CACHE_FOLDER" | |
fi | |
((MINOR-=1)) # check last release | |
done | |
((MAJOR-=1)) # check last year | |
MINOR=3 # reset to maximal possible minor | |
done | |
e "no recent cache folder found. This is ok if you never ran ${PKGNAME} before." | |
exit 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Fixed a bug