¿Hay alguna manera de actualizar brew cask

37

¿Hay alguna forma de actualizar todos los brew casks? Algo como brew cask upgrade?

demas
fuente

Respuestas:

23

Bash script para actualizar paquetes

inspirado en la respuesta 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

Que hace

  • actualizar brew / brew cask, limpieza
  • lea la lista de barriles
  • verifique la brew cask infoversión más nueva
  • instale una nueva versión si está disponible (¡y elimina todas las versiones antiguas!)

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

un forro para impacientes:

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

guardar como /usr/local/bin/cask-upgrade , para que pueda ejecutarlo localmente más cask-upgradetarde

Atais
fuente
Trabajado como un encanto. Sin embargo, sería bueno consultar primero una lista de paquetes desactualizados. Lo suficientemente fácil como para modificar el guión para hacerlo.
eduncan911
¡Gracias! ¿Has intentado integrar esto directamente en Homebrew Cask? Lo acabo de convertir en pescado y también funciona para mí. También me reveló que algunas versiones antiguas todavía estaban presentes después de haber instalado las actuales.
Pascal
Debe ejecutar brew cask uninstall --forceantes de instalar la nueva versión si no desea que la versión anterior permanezca allí.
Pascal
@Pascal, sí, noté que también tengo muchas versiones antiguas apiladas aquí. Pronto agregaré el comando de desinstalación.
Atais
@Atais, ¿la desinstalación aún funciona de manera consistente para usted? Algunos barriles ahora dejan una carpeta vacía con el número de versión con mi script, que se mete con la verificación de la versión.
Pascal
19

homebrew-cask-upgrade

Creo que esta es, con mucho, la mejor solución para actualizar los barriles.
fuente: https://github.com/buo/homebrew-cask-upgrade

Instalación y uso

brew tap buo/cask-upgrade
brew update
brew cu

(Opcional) Fuerce la actualización de aplicaciones obsoletas, incluidas las marcadas como más recientes:

brew cu --all
Atais
fuente
12

Como dice la cita en la otra respuesta, actualmente no hay forma de actualizar todos los barriles actualizados.

Sin embargo, la segunda parte de la respuesta es incorrecta: brew upgrade --allno se pueden actualizar los barriles.

La única forma de actualizar todos los barriles es obtener una lista de los barriles instalados y obligarlos a volver a instalarlos, ¡incluidos los que no han cambiado!

En pescado , podrías hacer eso así:

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

editar:

Atais creó un script que funciona: Bash script para actualizar paquetes .
Vota por favor su respuesta en lugar de esta.

Pascal
fuente
1
Bueno, tenga en cuenta que en realidad reinstalará todas sus aplicaciones, no solo actualizará la obsoleta :(
Atais
1
Para actualizar las listas de cask, debe ejecutar brew cask updatey seguir la respuesta anterior para actualizar solo los paquetes que actualmente están desactualizados aquí: apple.stackexchange.com/a/231020/49601
Danijel-James W
@ Danijel-JamesW Revertí tu cambio porque estaba mal. Puede ser la forma de hacerlo en otras conchas, pero no en los peces.
Pascal
10

De la homebrew caskdocumentación :

Dado que el repositorio homebrew-cask es un Homebrew Tap, desplegará los últimos Casks cada vez que emita el comando Homebrew normal brew update. Actualmente, homebrew-cask no siempre puede detectar si una aplicación se ha actualizado. Puede forzar una actualización a través del comando brew cask install --force. Estamos trabajando para mejorar esto.

Lo siguiente debería ser suficiente para actualizar tanto las fórmulas de preparación como los barriles.

brew upgrade --all 
jherran
fuente
44
Esto ya no es verdad. brew upgrade --alles equivalente a brew upgradeahora. Los barriles no se actualizan con ese comando.
proski
6

Esto es lo que tengo en mi .bash_profile que ejecuto para hacer una actualización completa de homebrew. "Fijo" un par de elementos para evitar que se descarguen descargas gigantes para cada actualización, porque sus versiones son siempre "más recientes" o no deberían actualizarse.

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

Para reinstalar aplicaciones de brew cask en zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done
sqren
fuente
Esto no es muy bueno para los usuarios que pueden tener muchas brew caskinstalaciones que requieren la entrada del usuario (por ejemplo, cuarzo) . Además, no es necesario desinstalar todas las aplicaciones antes de volver a instalarlas. Idealmente, también debería ejecutar una actualización como la brew cask updateprimera.
Danijel-James W
@ Danijel-JamesW Lamentablemente es si no quieres que la versión anterior se quede.
Pascal
1

Recomiendo la respuesta de @ eduncan911 en la pregunta de contraparte en Stack Overflow .

En breve:

  • $ brew-cask.shsolo enumera una salida similar a la de Homebrew brew update. la lista anterior muestra todos los paquetes instalados, con un verde que indica las actualizaciones pendientes.
  • $ brew-cask.shupgrade forzará la actualización de esos paquetes.

Instalar desde su repositorio con:

$ 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

Entonces úsalo así:

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

Hice tal guión solo. Mire el github https://github.com/pesh1983/brew_cask_upgrade . Tiene una descripción bastante buena, pero si tiene alguna pregunta adicional, no dude en preguntarme. Realiza una actualización justa: desinstala e instala, por lo que cualquier limpieza necesaria será realizada por 'brew'.

Pavel Goltsev
fuente
1

Esto probablemente sería más apropiado como comentario, pero no tengo suficiente reputación para dejar uno, así que ...

A partir de este escrito, homebrew-casktiene su propio sistema de actualización, por lo que ya no se necesitan los scripts y herramientas de terceros.

Para enumerar barriles obsoletos: brew cask outdated

Para actualizar todos los barriles obsoletos: brew cask upgrade

DarrenPMeyer
fuente
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
nombre
fuente
Esto es ilegible, también necesita una explicación de lo que hace
user151019