Existe alguma maneira de atualizar o barril de cerveja

37

Existe alguma maneira de atualizar todos os brew casks? Algo como brew cask upgrade?

demas
fonte

Respostas:

23

Script Bash para atualizar pacotes

inspirado pela resposta de Pascal

#!/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

O que faz

  • atualizar fermentação / barril de fermentação, limpeza
  • leia a lista de barris
  • verifique a brew cask infoversão mais recente
  • instale uma nova versão, se disponível (e remove todas as versões antigas!)

fonte: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b

um forro para impaciente:

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

salvar como /usr/local/bin/cask-upgrade , para que você possa executá-lo localmente mais cask-upgradetarde

Atais
fonte
Funcionou como um encanto. Seria bom consultar uma lista primeiro de pacotes desatualizados primeiro. Fácil o suficiente para ajustar o script para fazê-lo.
eduncan911
Obrigado! Você já tentou integrar isso diretamente no Homebrew Cask? Acabei de convertê-lo em peixe e funciona para mim também. Também me revelou que algumas versões antigas ainda estavam presentes após a instalação das atuais.
Pascal
Você precisa executar brew cask uninstall --forceantes de instalar a nova versão, se não quiser que a versão antiga permaneça lá.
Pascal
@ Pascal, sim, notei que tenho muitas versões antigas empilhadas aqui também. Em breve adicionarei o comando de desinstalação.
Atais
@Atais a desinstalação ainda funciona consistentemente para você? Alguns barris agora deixam uma pasta vazia com o número da versão no meu script, o que interfere na verificação da versão.
187 Pascal
19

homebrew-cask-upgrade

Penso que esta é de longe a melhor solução para atualizar os barris.
fonte: https://github.com/buo/homebrew-cask-upgrade

Instalação e uso

brew tap buo/cask-upgrade
brew update
brew cu

(Opcional) Force a atualização de aplicativos desatualizados, incluindo os marcados como mais recentes:

brew cu --all
Atais
fonte
12

Como a citação na outra resposta diz, atualmente não há como atualizar todos os barris atualizados.

A segunda parte da resposta está errada: brew upgrade --allnão é possível atualizar os barris.

A única maneira de atualizar todos os barris é obter uma lista dos barris instalados e forçá-los a serem reinstalados - incluindo aqueles que não foram alterados!

No peixe , você poderia fazer assim:

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

editar:

Atais criou um script que funciona: Script Bash para atualizar pacotes .
Por favor, vote novamente a resposta dele em vez desta.

Pascal
fonte
1
Bem, lembre-se de que ele realmente reinstalará todos os seus aplicativos, não apenas atualizará os desatualizados :(
Atais
1
Para atualizar listagens de barril, você deve executar brew cask update, em seguida, siga a resposta anterior para atualizar somente os pacotes que estão desatualizados aqui: apple.stackexchange.com/a/231020/49601
Danijel-James W
@ Danijel-JamesW Revirei sua alteração porque estava errada. Pode ser a maneira de fazê-lo em outras conchas, mas não em peixes.
Pascal
10

A partir da homebrew caskdocumentação :

Como o repositório homebrew-cask é um Homebrew Tap, você seleciona os Casks mais recentes sempre que emitir o comando regular Homebrew brew update. Atualmente, o homebrew-cask nem sempre pode detectar se um Aplicativo foi atualizado. Você pode forçar uma atualização através do comando brew cask install --force. Estamos trabalhando para melhorar isso.

O seguinte deve ser suficiente para atualizar as fórmulas de fermentação e os barris.

brew upgrade --all 
jherran
fonte
4
Isso não é mais verdade. brew upgrade --allé equivalente a brew upgradeagora. Os barris não são atualizados por esse comando.
proski
6

Aqui está o que eu tenho no meu .bash_profile que eu corro para fazer uma atualização completa do homebrew. Eu "pin" alguns itens para impedir que downloads gigantescos sejam buscados repetidamente para cada atualização, porque suas versões são sempre "mais recentes" ou não devem ser atualizadas.

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
fonte
2

Para reinstalar aplicativos de barril de fermentação no zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done
sqren
fonte
Isso não é muito bom para usuários que podem ter muitas brew caskinstalações que exigem entrada do usuário (por exemplo, quartzo) . Além disso, não é necessário desinstalar todos os aplicativos antes de reinstalá-lo. Idealmente, você também deve executar uma atualização como a brew cask updateprimeira.
Danijel-James W
@ Danijel-JamesW Infelizmente é se você não quer que a versão antiga fique.
Pascal
1

Eu recomendo a resposta de @ eduncan911 na pergunta de contrapartida no Stack Overflow .

Em resumo:

  • $ brew-cask.shapenas lista uma saída semelhante à do Homebrew brew update. a lista acima mostra todos os pacotes instalados, com um verde indicando as atualizações pendentes.
  • $ brew-cask.shupgrade forçará a atualização desses pacotes.

Instale a partir de seu repositório com:

$ 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

Em seguida, use-o assim:

$ brew-cask.sh
$ brew-cask.sh upgrade
lucianf
fonte
1

Eu fiz esse roteiro sozinho. Consulte o github https://github.com/pesh1983/brew_cask_upgrade . Tem uma descrição muito boa, mas se você tiver alguma dúvida adicional, não hesite em me perguntar. Ele faz uma atualização justa: desinstalar e instalar, portanto, qualquer limpeza necessária será realizada pelo próprio 'brew'.

Pavel Goltsev
fonte
1

Provavelmente isso seria mais apropriado como comentário, mas não tenho reputação suficiente para deixar um, então ...

No momento da redação deste artigo, ele homebrew-caskpossui seu próprio sistema de atualização e, portanto, os scripts e ferramentas de terceiros não são mais necessários.

Para listar barris desatualizados: brew cask outdated

Para atualizar todos os barris desatualizados: brew cask upgrade

DarrenPMeyer
fonte
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
nome
fonte
Esta é ilegível - também precisa de explicação sobre o que ele faz
user151019