Est-il possible d'améliorer le fût de bière?


37

Y at-il un moyen de mettre à jour tous les brew casks? Quelque chose comme brew cask upgrade?

Réponses:


23

Script Bash pour mettre à jour les paquets

inspiré par Pascal répondre

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

Ce qu'il fait

  • mettre à jour le breuvage / fût de bière, nettoyage
  • lire la liste des fûts
  • vérifier la brew cask infopour la dernière version
  • installe la nouvelle version si disponible (et supprime toutes les anciennes versions!)

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

un paquebot pour impatient:

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

enregistrer sous /usr/local/bin/cask-upgrade , vous pouvez donc l'exécuter localement comme cask-upgradeplus tard


Travaillé comme un charme. Ce serait bien de demander d'abord une liste de paquets périmés. Assez facile à modifier le script pour le faire.
Eduncan911

Merci! Avez-vous essayé de l'intégrer directement dans Homebrew Cask? Je viens de le convertir en poisson et cela fonctionne aussi pour moi. Cela m'a aussi révélé que certaines anciennes versions étaient toujours présentes après que j'ai installé les versions actuelles.
Pascal

Vous devez exécuter brew cask uninstall --forceavant d'installer la nouvelle version si vous ne voulez pas que l'ancienne version y reste.
Pascal

@ Pascal Oui, j'ai remarqué que beaucoup d'anciennes versions étaient empilées ici aussi. Bientôt, je vais ajouter une commande de désinstallation.
Atais

@Atais la désinstallation fonctionne-t-elle toujours pour vous? Certains casks laissent maintenant un dossier vide avec le numéro de version avec mon script, ce qui perturbe la vérification de version.
Pascal


19

homebrew-cask-upgrade

Je pense que c'est de loin la meilleure solution pour améliorer les fûts.
source: https://github.com/buo/homebrew-cask-upgrade

Installation et utilisation

brew tap buo/cask-upgrade
brew update
brew cu

(Facultatif) Forcer la mise à niveau des applications obsolètes, y compris celles marquées comme la dernière:

brew cu --all

12

Comme l'indique la citation de l'autre réponse, il n'existe actuellement aucun moyen de mettre à niveau tous les fûts mis à jour.

La deuxième partie de la réponse est fausse, cependant: brew upgrade --allne peut pas mettre à niveau les fûts.

Le seul moyen de mettre à niveau tous les casks est d'obtenir une liste des casks installés et de les forcer à être réinstallés, y compris ceux qui n'ont pas changé!

Dans le poisson , vous pouvez le faire comme ceci:

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

modifier:

Atais a créé un script qui fonctionne: Script Bash pour mettre à niveau des packages .
S'il vous plaît upvote sa réponse plutôt que celui-ci.


1
Eh bien, sachez que toutes vos applications seront réinstallées, pas seulement la mise à jour :(
Atais

1
Pour mettre à niveau les listes de cask, vous devez exécuter brew cask updatepuis suivre la réponse précédente afin de ne mettre à jour que les packages actuellement obsolètes ici: apple.stackexchange.com/a/231020/49601
Danijel-James W

@ Danijel-JamesW J'ai annulé votre changement parce qu'il était faux. C'est peut-être le moyen de le faire dans d'autres coquilles, mais ce n'est pas dans le poisson.
Pascal le

10

De la homebrew caskdocumentation :

Comme le référentiel homebrew-cask est un Homebrew Tap, vous extrayez les derniers Casks à chaque fois que vous exécutez la commande Homebrew standard brew update. À l'heure actuelle, homebrew-cask ne peut pas toujours détecter si une application a été mise à jour. Vous pouvez forcer une mise à jour via la commande brew cask install --force. Nous travaillons à améliorer cela.

Ce qui suit devrait suffire à améliorer les préparations et les fûts.

brew upgrade --all 

4
Ce n'est plus vrai. brew upgrade --allest équivalent à brew upgrademaintenant. Les fûts ne sont pas mis à niveau par cette commande.
proski

6

Voici ce que j'ai dans mon fichier .bash_profile que je lance pour effectuer une passe de mise à niveau complète de homebrew. Je «bloque» quelques éléments pour éviter que des téléchargements gigantesques ne soient récupérés à chaque fois, car leurs versions sont toujours «récentes» ou ne devraient pas être mises à niveau.

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)
}

2

Pour réinstaller les applications de brassage dans zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done

Ce n'est pas très bon pour les utilisateurs qui peuvent avoir beaucoup d' brew caskinstallations nécessitant leur entrée (par exemple, quartz) . De plus, il n'est pas nécessaire de désinstaller chaque application avant de la réinstaller. Idéalement, vous devriez également lancer une mise à jour comme brew cask updateavant.
Danijel-James W

@ Danijel-JamesW Malheureusement, c'est le cas si vous ne souhaitez pas conserver l'ancienne version.
Pascal


1

Je recommande la réponse de @ eduncan911 à la question de la contrepartie de Stack Overflow .

En bref:

  • $ brew-cask.shrépertorie simplement une sortie similaire à celle de Homebrew brew update. la liste ci-dessus montre tous les packages installés, avec un vert indiquant les mises à jour en attente.
  • $ brew-cask.shupgrade forcera la mise à jour de ces paquets.

Installer depuis son repo avec:

$ 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

Ensuite, utilisez-le comme ceci:

$ brew-cask.sh
$ brew-cask.sh upgrade

1

J'ai fait ce scénario par moi-même. Veuillez consulter le github https://github.com/pesh1983/brew_cask_upgrade . La description est assez bonne, mais si vous avez des questions supplémentaires, n'hésitez pas à me les demander. Il effectue une mise à niveau équitable: désinstallez et installez, ainsi tout nettoyage nécessaire sera effectué par «brasser» lui-même.


1

Ce serait probablement plus approprié comme commentaire, mais je n'ai pas assez de réputation pour en laisser un, alors ...

A la date de rédaction de ce document, il homebrew-caskdispose de son propre système de mise à niveau. Les scripts et outils tiers ne sont donc plus nécessaires.

Pour lister les fûts obsolètes: brew cask outdated

Pour mettre à niveau tous les fûts obsolètes: brew cask upgrade


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

Ceci est illisible - nécessite également une explication de ce qu'il fait
user151019
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.