Last active
March 19, 2024 02:38
-
-
Save yumauri/1915426eff7c07990fbc802376db8f30 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
#!/bin/sh | |
CASKNAME="$1" | |
CASKROOM=$(brew --caskroom) | |
CASKDIR="$CASKROOM/$CASKNAME" | |
DATE=$(date +"%Y%m%d%H%M%S.000") | |
BACKUPDIR="$CASKDIR/.backup" | |
BLACK='\033[30m' | |
RED='\033[31m' | |
BLUE='\033[34m' | |
NC='\033[0m' | |
# | |
# show usage | |
# | |
if [ "$1" = "" ]; then | |
echo "USAGE:\n\t$0 caskname" | |
exit | |
fi | |
if ! [ -x "$(command -v jq)" ]; then | |
echo "${RED}Error:${NC} This script requires ${BLUE}jq${NC} to work, install it using ${BLUE}brew install jq${NC}" | |
exit | |
fi | |
# | |
# show warning | |
# | |
echo "${RED}WARNING!${NC}" | |
echo "${RED}This script aimed to update cask version without reinstalling cask.${NC}" | |
echo "${RED}There is no official way to do it, so, use this script on your risk!${NC}" | |
echo "${RED}You will get no support for issues that arise from using this script!${NC}" | |
echo; echo "${BLACK}See\thttps://github.com/Homebrew/homebrew-cask/issues/88440\n\thttps://stackoverflow.com/questions/63651114/update-homebrew-casks-versions${NC}" | |
echo; read -n 1 -s -r -p "Press any key to proceed or Ctrl+C to abort..."; echo | |
set -x | |
# | |
# check outdated | |
# | |
{ echo; echo "${BLACK}Check if cask ${RED}$CASKNAME${BLACK} requires updates${NC}"; } 2> /dev/null | |
if [ "$(brew outdated --cask --greedy $CASKNAME)" = "" ]; then | |
{ echo "${RED}Looks like cask ${BLACK}$CASKNAME${RED} either not exists, or not needed to update${NC}"; } 2> /dev/null | |
exit | |
fi | |
{ echo; echo "${BLACK}Get versions${NC}"; } 2> /dev/null | |
INSTALLED=$(brew outdated --cask --greedy --json=v2 $CASKNAME | jq -r '.casks[0].installed_versions[0]') | |
CURRENT=$(brew outdated --cask --greedy --json=v2 $CASKNAME | jq -r '.casks[0].current_version') | |
if [ "$INSTALLED" = "latest" ]; then | |
{ echo "${RED}Looks like cask ${BLACK}$CASKNAME${RED} has ${BLUE}latest${RED} version, ignore such casks${NC}"; } 2> /dev/null | |
exit | |
fi | |
# | |
# backup current cask | |
# | |
{ echo; echo "${BLACK}Check/create backup directory ${RED}$BACKUPDIR${NC}"; } 2> /dev/null | |
[[ ! -e "$BACKUPDIR" ]] && mkdir "$BACKUPDIR" | |
{ echo; echo "${BLACK}Creating backup directory ${RED}$BACKUPDIR/$DATE${NC}"; } 2> /dev/null | |
mkdir -p "$BACKUPDIR/$DATE" | |
{ echo; echo "${BLACK}Backing up current cask files${NC}"; } 2> /dev/null | |
cp -R "$CASKDIR/.metadata" "$BACKUPDIR/$DATE" | |
cp -R "$CASKDIR/$INSTALLED" "$BACKUPDIR/$DATE" | |
# | |
# rename installed cask version to current | |
# | |
{ echo; echo "${BLACK}Rename ${BLUE}$INSTALLED${BLACK} with ${BLUE}$CURRENT${NC}"; } 2> /dev/null | |
mv "$CASKDIR/$INSTALLED" "$CASKDIR/$CURRENT" | |
mv "$CASKDIR/.metadata/$INSTALLED" "$CASKDIR/.metadata/$CURRENT" | |
for install_date in $(ls -1 "$CASKDIR/.metadata/$CURRENT" | head -1); do | |
mv "$CASKDIR/.metadata/$CURRENT/$install_date" "$CASKDIR/.metadata/$CURRENT/$DATE" | |
done | |
# | |
# replace cask script | |
# | |
{ echo; echo "${BLACK}Replace cask script with latest version${NC}"; } 2> /dev/null | |
brew cat --cask $CASKNAME > "$CASKDIR/.metadata/$CURRENT/$DATE/Casks/$CASKNAME.rb" |
This file contains hidden or 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
# | |
# Before update | |
# | |
$ tree -a $(brew --caskroom)/telegram | |
/usr/local/Caskroom/telegram | |
├── .metadata | |
│ ├── 6.3.203623 | |
│ │ └── 20200728065951.983 | |
│ │ └── Casks | |
│ │ └── telegram.rb | |
│ └── config.json | |
└── 6.3.203623 | |
└── Telegram.app -> /Applications/Telegram.app | |
6 directories, 2 files | |
# | |
# Update | |
# | |
$ ./brew_cask_version_update.sh telegram | |
Check if cask telegram requires updates | |
++ brew cask outdated --greedy telegram | |
+ '[' telegram = '' ']' | |
Get versions | |
++ brew cask outdated --greedy --json telegram | |
++ jq -r '.[0].installed_versions' | |
+ INSTALLED=6.3.203623 | |
++ brew cask outdated --greedy --json telegram | |
++ jq -r '.[0].current_version' | |
+ CURRENT=7.0.1,204835 | |
Check/create backup directory /usr/local/Caskroom/telegram/.backup | |
+ [[ ! -e /usr/local/Caskroom/telegram/.backup ]] | |
+ mkdir /usr/local/Caskroom/telegram/.backup | |
Creating backup directory /usr/local/Caskroom/telegram/.backup/20200831195308.000 | |
+ mkdir -p /usr/local/Caskroom/telegram/.backup/20200831195308.000 | |
Backing up current cask files | |
+ cp -R /usr/local/Caskroom/telegram/.metadata /usr/local/Caskroom/telegram/.backup/20200831195308.000 | |
+ cp -R /usr/local/Caskroom/telegram/6.3.203623 /usr/local/Caskroom/telegram/.backup/20200831195308.000 | |
Rename 6.3.203623 with 7.0.1,204835 | |
+ mv /usr/local/Caskroom/telegram/6.3.203623 /usr/local/Caskroom/telegram/7.0.1,204835 | |
+ mv /usr/local/Caskroom/telegram/.metadata/6.3.203623 /usr/local/Caskroom/telegram/.metadata/7.0.1,204835 | |
++ ls -1 /usr/local/Caskroom/telegram/.metadata/7.0.1,204835 | |
++ head -1 | |
+ for install_date in '$(ls -1 "$CASKDIR/.metadata/$CURRENT" | head -1)' | |
+ mv /usr/local/Caskroom/telegram/.metadata/7.0.1,204835/20200728065951.983 /usr/local/Caskroom/telegram/.metadata/7.0.1,204835/20200831195308.000 | |
Replace cask script with latest version | |
+ brew cask cat telegram | |
# | |
# After update | |
# | |
$ tree -a $(brew --caskroom)/telegram | |
/usr/local/Caskroom/telegram | |
├── .backup | |
│ └── 20200831195308.000 | |
│ ├── .metadata | |
│ │ ├── 6.3.203623 | |
│ │ │ └── 20200728065951.983 | |
│ │ │ └── Casks | |
│ │ │ └── telegram.rb | |
│ │ └── config.json | |
│ └── 6.3.203623 | |
│ └── Telegram.app -> /Applications/Telegram.app | |
├── .metadata | |
│ ├── 7.0.1,204835 | |
│ │ └── 20200831195308.000 | |
│ │ └── Casks | |
│ │ └── telegram.rb | |
│ └── config.json | |
└── 7.0.1,204835 | |
└── Telegram.app -> /Applications/Telegram.app | |
14 directories, 4 files |
@jagdishadusumalli hm, why do you run it under sudo
?
@jagdishadusumalli hm, why do you run it under
sudo
?
ah..yes that was the issue..sorry for the trouble
Updated parsing installed version for recent homebrew version.
Also, you need to tap casks now, for brew cat --cask ...
command to work: brew tap homebrew/cask
Updated parsing installed version for recent homebrew version. Also, you need to tap casks now, for
brew cat --cask ...
command to work:brew tap homebrew/cask
i just used the script again on a new system and didn't had to tap the homebrew/cask...it worked without that
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @yumauri, the script seems to fail on macosx v11.2.3 with homebrew v3.0.10
➜ brew outdated --cask --greedy transmission
transmission (2.94) != 3.00
~/Downloads
➜ sudo sh brew_cask_version_update.sh transmission
WARNING!
This script aimed to update cask version without reinstalling cask.
There is no official way to do it, so, use this script on your risk!
You will get no support for issues that arise from using this script!
See Homebrew/homebrew-cask#88440
https://stackoverflow.com/questions/63651114/update-homebrew-casks-versions
Press any key to proceed or Ctrl+C to abort...
Check if cask transmission requires updates
++ brew outdated --cask --greedy transmission
Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.
Looks like cask transmission either not exists, or not needed to update