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 |
Fixed a bug with 2023.1-1
(it has only major and minor but no patch version)
Fixed a bug
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Adjust
your_user_name
and the path of the script if you placed it somewhere else. Both here: hook#L11