Есть ли способ обновить варево бочки

37

Есть ли способ обновить все brew casks? Что то типа brew cask upgrade?

Димас
источник

Ответы:

23

Bash скрипт для обновления пакетов

вдохновленный ответом Паскаля

#!/usr/bin/env bash

(set -x; brew update;)

(set -x; brew cleanup;)
(set -x; brew cask cleanup;)

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`

casks=( $(brew cask list) )

for cask in ${casks[@]}
do
    version=$(brew cask info $cask | sed -n "s/$cask:\ \(.*\)/\1/p")
    installed=$(find "/usr/local/Caskroom/$cask" -type d -maxdepth 1 -maxdepth 1 -name "$version")

    if [[ -z $installed ]]; then
        echo "${red}${cask}${reset} requires ${red}update${reset}."
        (set -x; brew cask uninstall $cask --force;)
        (set -x; brew cask install $cask --force;)
    else
        echo "${red}${cask}${reset} is ${green}up-to-date${reset}."
    fi
done

Что оно делает

  • обновить варево / заварить бочку, очистить
  • прочитать список бочек
  • проверьте brew cask infoдля самой новой версии
  • установить новую версию, если она доступна (и удалить все старые версии!)

источник: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b

один лайнер для нетерпеливых:

curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin

сохранить как /usr/local/bin/cask-upgrade , так что вы можете запустить его локально, как cask-upgradeпозже

Atais
источник
Работал как шарм. Хотелось бы сначала запросить список первых устаревших пакетов. Достаточно легко настроить скрипт, чтобы сделать это.
eduncan911
Спасибо! Вы пытались интегрировать это непосредственно в Homebrew Cask? Я просто преобразовал это в рыбу, и это работает для меня также. Это также показало мне, что некоторые старые версии все еще присутствовали после того, как я установил текущие.
Паскаль
Вам нужно запустить brew cask uninstall --forceперед установкой новой версии, если вы не хотите, чтобы старая версия оставалась там.
Паскаль
@Pascal, да, я заметил, что у меня тоже есть много старых версий. Вскоре я добавлю команду удаления.
Atais
@ Atais деинсталляция все еще работает на вас? Некоторые бочки теперь оставляют пустую папку с номером версии с моим скриптом, что портит проверку версии.
Паскаль
19

доморощенная-бочка-обновление

Я думаю, что это лучшее решение для модернизации бочек.
источник: https://github.com/buo/homebrew-cask-upgrade

Установка и использование

brew tap buo/cask-upgrade
brew update
brew cu

(Необязательно) Принудительное обновление устаревших приложений, в том числе помеченных как последние:

brew cu --all
Atais
источник
12

Как следует из цитаты из другого ответа, в настоящее время нет способа обновить все обновленные бочки.

Однако вторая часть ответа неверна: brew upgrade --allне может обновить бочки.

Единственный способ обновить все бочки - это получить список установленных бочек и принудительно переустановить их, включая те, которые не были изменены!

В рыбе это можно сделать так:

for app in (brew cask list)
    brew cask install --force $app
end

редактировать:

Atais создал скрипт, который работает: скрипт Bash для обновления пакетов .
Пожалуйста, подтвердите его ответ, а не этот.

паскаль
источник
1
Ну, имейте в виду, что он будет фактически переустанавливать все ваши приложения, а не только обновлять устаревшие :(
Atais
1
Чтобы обновить списки бочек, вы должны запустить, а brew cask updateзатем выполнить предыдущий ответ, чтобы обновить только те пакеты, которые в данный момент устарели здесь: apple.stackexchange.com/a/231020/49601
Даниэль-Джеймс W
@ Danijel-JamesW Я откатил твои изменения, потому что это было неправильно. Это может быть способ сделать это в других оболочках, но это не в рыбе.
Паскаль
10

Из homebrew caskдокументации :

Поскольку репозиторий homebrew-cask - это Homebrew Tap, вы будете сбрасывать последние версии Casks каждый раз, когда будете вводить обычную команду Homebrew brew update. В настоящее время homebrew-cask не всегда может определить, обновлено ли приложение. Вы можете принудительно обновить с помощью команды brew cask install --force. Мы работаем над улучшением этого.

Следующего должно быть достаточно для обновления формул и бочек.

brew upgrade --all 
jherran
источник
4
Это больше не правда. brew upgrade --allэквивалентно brew upgradeсейчас. Бочки не обновляются этой командой.
Проски
6

Вот то, что у меня есть в моем .bash_profile, который я запускаю для полного обновления homebrew. Я «прикрепляю» пару элементов, чтобы предотвратить повторную загрузку гигантских загрузок для каждого обновления, потому что их версии всегда «самые последние» или их не следует обновлять.

boop() {
  brew update && brew upgrade && brew cleanup \
    && cask-upgrade && cask-retire && brew cask cleanup \
      && brew doctor && brew cask doctor
}

__is_pinned() {
  local pinned=";pixate-studio;sketchup;skype;"
  [[ *";${1};"* != "${pinned}" ]] && return 0 || return 1
}

cask-upgrade() {
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      if [[ "${vers}" == "latest" ]]; then
        brew cask install "${name}" --force
      else
        brew cask install "${name}" 2> >(grep -v "re-install")
      fi
    fi
  done < <(brew cask list --versions)
}

cask-retire() {
  room="/opt/homebrew-cask/Caskroom"
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      for inst in $(ls "${room}/${name}"); do
        if [[ "${inst}" != "${vers}" ]]; then
          echo "Removing ${name} version ${inst}"
          rm -r "${room}/${name}/${inst}"
        fi
      done
    fi
  done < <(brew cask list --versions)
}
MithrilTuxedo
источник
2

Чтобы переустановить приложения brew cask в zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done
sqren
источник
Это не очень хорошо для пользователей, у которых может быть много brew caskустановок, требующих ввода данных пользователем (например, - кварц) . Кроме того, нет необходимости удалять каждое приложение перед его повторной установкой. В идеале вы также должны запустить обновление, как в brew cask updateпервую очередь.
Даниэль-Джеймс W
@ Danijel-JamesW К сожалению, это если вы не хотите, чтобы старая версия осталась.
Паскаль
1

Это действительно раздражало меня, поэтому я создал этот скрипт, чтобы обновить все приложения Brew и позволить пользователю выбирать, какие приложения Cask обновлять. Вы также можете исключить приложения из рассмотрения.

https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh

Деррек
источник
1

Я рекомендую ответ @ eduncan911 в ответе на вопрос о переполнении стека .

Короче:

  • $ brew-cask.shпросто выводит вывод, похожий на вывод Homebrew brew update. В приведенном выше списке показаны все установленные пакеты, а зеленым цветом указаны все ожидающие обновления.
  • $ brew-cask.shupgrade приведет к обновлению этих пакетов.

Установить из его репо с:

$ curl -L https://raw.githubusercontent.com/eduncan911/dotfiles/master/bin/brew-cask.sh --create-dirs -o ~/bin/brew-cask.sh
$ chmod 755 ~/bin/brew-cask.sh

Тогда используйте это так:

$ brew-cask.sh
$ brew-cask.sh upgrade
lucianf
источник
1

Я сделал такой скрипт сам. Пожалуйста, посмотрите на github https://github.com/pesh1983/brew_cask_upgrade . У него довольно хорошее описание, но если у вас есть дополнительные вопросы, не стесняйтесь их задавать. Обновление справедливо: удалите и установите, поэтому вся необходимая очистка будет выполняться самим brew.

Павел Гольцев
источник
1

Это, вероятно, будет более уместным в качестве комментария, но у меня недостаточно репутации, чтобы оставить комментарий, так что ...

На момент написания этой статьи homebrew-caskимеется собственная система обновления, поэтому сторонние сценарии и инструменты больше не требуются.

Чтобы перечислить устаревшие бочки: brew cask outdated

Чтобы обновить все устаревшие бочки: brew cask upgrade

DarrenPMeyer
источник
0
for app in $(brew cask list); do
    cver="$(brew cask info "${app}" | head -n 1 | cut -d " " -f 2)"
    ivers=$(ls -1 "/opt/homebrew-cask/Caskroom/${app}/.metadata/" | tr '\n' ' ' | sed -e 's/ $//')
    aivers=(${ivers})
    nvers=$(echo ${#aivers[@]})
    echo "[*] Found ${app} in cask list. Latest available version is ${cver}. You have installed version(s): ${overs}"
    if [[ ${nvers} -eq 1 ]]; then
        echo "${ivers}" | grep -q "^${cver}$" && { echo "[*] Latest version already installed :) Skipping changes ..."
        continue; }
    fi
    echo "[+] Fixing from ${ivers} to ${cver} ..."
    brew cask uninstall "${app}" --force
    brew cask install "${app}"
done
название
источник
Это нечитаемо - также нужно объяснение того, что он делает
user151019