Czy jest jakiś sposób na ulepszenie beczki do zaparzania

37

Czy jest jakiś sposób na uaktualnienie wszystkich brew casks? Coś takiego brew cask upgrade?

demas
źródło

Odpowiedzi:

23

Skrypt Bash do aktualizacji pakietów

zainspirowany odpowiedzią Pascala

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

Co to robi

  • zaktualizuj napar / beczkę zaparzania, czyszczenie
  • przeczytaj listę beczek
  • sprawdź brew cask infonajnowszą wersję
  • zainstaluj nową wersję, jeśli jest dostępna (i usuwa wszystkie stare wersje!)

źródło: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b

jedna wkładka dla niecierpliwych:

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

zapisz jako /usr/local/bin/cask-upgrade , abyś mógł uruchomić go lokalnie jako cask-upgradepóźniej

Atais
źródło
Działa jak urok. Byłoby miło zapytać najpierw o listę nieaktualnych pakietów. Łatwo dostroić skrypt, aby to zrobić.
eduncan911
Dziękuję Ci! Czy próbowałeś zintegrować to bezpośrednio z Homebrew Cask? Właśnie przekonwertowałem go na ryby i to też działa dla mnie. Ujawniło mi również, że niektóre stare wersje były nadal obecne po zainstalowaniu bieżących.
Pascal
Musisz uruchomić brew cask uninstall --forceprzed zainstalowaniem nowej wersji, jeśli nie chcesz, aby starsza wersja pozostała.
Pascal
@Pascal tak, zauważyłem, że mam tu też wiele starych wersji. Wkrótce dodam polecenie odinstalowania.
Atais
@Atais czy deinstalacja nadal działa dla Ciebie? Niektóre beczki pozostawiają teraz pusty folder z numerem wersji w moim skrypcie, który zadziera z kontrolą wersji.
Pascal
19

homebrew-cask-upgrade

Myślę, że jest to zdecydowanie najlepsze rozwiązanie do ulepszenia beczek.
źródło: https://github.com/buo/homebrew-cask-upgrade

Instalacja i użytkowanie

brew tap buo/cask-upgrade
brew update
brew cu

(Opcjonalnie) Wymuś aktualizację nieaktualnych aplikacji, w tym tych oznaczonych jako najnowsze:

brew cu --all
Atais
źródło
12

Jak mówi cytat z drugiej odpowiedzi, obecnie nie ma możliwości uaktualnienia wszystkich zaktualizowanych beczek.

Druga część odpowiedzi jest błędna: brew upgrade --allnie można ulepszyć beczek.

Jedynym sposobem na uaktualnienie wszystkich beczek jest uzyskanie listy zainstalowanych beczek i wymuszenie ich ponownej instalacji - w tym tych, które się nie zmieniły!

W przypadku ryb możesz to zrobić w następujący sposób:

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

edytować:

Atais utworzył skrypt, który działa: Skrypt Bash do aktualizacji pakietów .
Proszę głosować raczej na jego odpowiedź niż na tę.

Pascal
źródło
1
Cóż, pamiętaj, że faktycznie przeinstaluje wszystkie twoje aplikacje, a nie tylko zaktualizuje przestarzałe :(
Atais
1
Aby zaktualizować listę beczek, należy uruchomić, brew cask updatea następnie postępować zgodnie z wcześniejszą odpowiedzią, aby zaktualizować tylko te pakiety, które są obecnie nieaktualne tutaj: apple.stackexchange.com/a/231020/49601
Danijel-James W
@ Danijel-JamesW Cofnąłem twoją zmianę, ponieważ była zła. Może to być sposób na zrobienie tego w innych skorupach, ale nie ma go u ryb.
Pascal
10

Z homebrew caskdokumentacji :

Ponieważ repozytorium homebrew-beczki jest Homebrew Tap, będziesz pobierać najnowsze Beczki za każdym razem, gdy wydasz zwykłe polecenie Homebrew brew update. Obecnie homebrew-cask nie zawsze może wykryć, czy aplikacja została zaktualizowana. Możesz wymusić aktualizację za pomocą polecenia brew cask install --force. Pracujemy nad poprawą tego.

Poniższe elementy powinny wystarczyć do uaktualnienia zarówno formuł parzenia, jak i beczek.

brew upgrade --all 
Jherran
źródło
4
To już nie jest prawda. brew upgrade --alljest równoważne z brew upgradeteraz. Beczki nie są ulepszane przez to polecenie.
proski
6

Oto, co mam w moim .bash_profile, który uruchamiam, aby wykonać pełną aktualizację homebrew. „Przypinam” kilka elementów, aby uniemożliwić wielokrotne pobieranie gigantycznych pobrań dla każdej aktualizacji, ponieważ ich wersje są zawsze „najnowsze” lub nie należy ich aktualizować.

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
źródło
2

Aby ponownie zainstalować aplikacje Brew Cask w Zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done
sqren
źródło
Nie jest to zbyt dobre dla użytkowników, którzy mogą mieć wiele brew caskinstalacji wymagających wkładu użytkownika (np. - kwarc) . Ponadto nie trzeba odinstalowywać każdej aplikacji przed jej ponowną instalacją. Idealnie powinieneś również uruchomić aktualizację jak brew cask updatepierwsza.
Danijel-James W
@ Danijel-JamesW Niestety dzieje się tak, jeśli nie chcesz, aby pozostała stara wersja.
Pascal
1

Polecam odpowiedź @ eduncan911 w odpowiedzi na pytanie dotyczące przepełnienia stosu .

W skrócie:

  • $ brew-cask.shpo prostu wyświetla dane wyjściowe podobne do Homebrew brew update. powyższa lista pokazuje wszystkie zainstalowane pakiety, a zielony oznacza wszelkie oczekujące aktualizacje.
  • brew-cask.shAktualizacja $ wymusi aktualizację tych pakietów.

Zainstaluj z jego repozytorium za pomocą:

$ 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

Następnie użyj go w następujący sposób:

$ brew-cask.sh
$ brew-cask.sh upgrade
lucianf
źródło
1

Sam stworzyłem taki skrypt. Proszę spojrzeć na github https://github.com/pesh1983/brew_cask_upgrade . Ma dość dobry opis, ale jeśli masz jakieś dodatkowe pytanie, zadaj mi pytanie. Dokonuje sprawiedliwego uaktualnienia: odinstaluj i zainstaluj, więc każde niezbędne czyszczenie zostanie wykonane przez sam program „brew”.

Pavel Goltsev
źródło
1

Byłoby to prawdopodobnie bardziej odpowiednie jako komentarz, ale nie mam wystarczającej reputacji, aby je zostawić, więc ...

W chwili pisania tego tekstu homebrew-caskma własny system aktualizacji, w związku z czym skrypty i narzędzia innych firm nie są już wymagane.

Aby wyświetlić listę nieaktualnych beczek: brew cask outdated

Aby zaktualizować wszystkie nieaktualne beczki: brew cask upgrade

DarrenPMeyer
źródło
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
imię
źródło
Jest to nieczytelne - wymaga również wyjaśnienia, co robi
151019