Apakah ada cara untuk memperbarui tong minuman

37

Apakah ada cara untuk memutakhirkan semua brew cask? Sesuatu seperti brew cask upgrade?

demo
sumber

Jawaban:

23

Skrip Bash untuk memutakhirkan paket

terinspirasi oleh jawaban 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

Apa yang dilakukannya

  • perbarui brew / brew tong, pembersihan
  • baca daftar tong
  • periksa brew cask infountuk versi terbaru
  • instal versi baru jika tersedia (dan hapus semua versi lama!)

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

satu liner untuk tidak sabar:

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

simpan sebagai /usr/local/bin/cask-upgrade , sehingga Anda dapat menjalankannya secara lokal seperti cask-upgradenanti

Atais
sumber
Bekerja seperti pesona. Akan lebih baik untuk meminta daftar terlebih dahulu dari paket tanggal terlebih dahulu. Cukup mudah untuk mengubah skrip untuk melakukannya.
eduncan911
Terima kasih! Sudahkah Anda mencoba mengintegrasikan ini langsung ke dalam Homebrew Cask? Saya baru saja mengubahnya menjadi ikan dan itu bekerja untuk saya juga. Ini juga mengungkapkan kepada saya bahwa beberapa versi lama masih ada setelah saya menginstal yang saat ini.
Pascal
Anda harus menjalankan brew cask uninstall --forcesebelum menginstal versi baru jika Anda tidak ingin versi lama tetap di sana.
Pascal
@ Pascal ya saya perhatikan saya punya banyak versi lama yang ditumpuk di sini juga. Segera saya akan menambahkan perintah uninstall.
Atais
@ Amis apakah penghapusan tetap konsisten bekerja untuk Anda? Beberapa tong sekarang meninggalkan folder kosong dengan nomor versi dengan skrip saya, yang mengacaukan pemeriksaan versi.
Pascal
19

upgrade homebrew-tong

Saya pikir ini adalah solusi terbaik untuk meningkatkan tong.
sumber: https://github.com/buo/homebrew-cask-upgrade

Instalasi & penggunaan

brew tap buo/cask-upgrade
brew update
brew cu

(Opsional) Memaksa upgrade aplikasi yang sudah ketinggalan zaman termasuk yang ditandai sebagai yang terbaru:

brew cu --all
Atais
sumber
12

Seperti kutipan dalam jawaban lain mengatakan, saat ini tidak ada cara untuk memutakhirkan semua tong yang diperbarui.

Namun, bagian kedua dari jawabannya salah: brew upgrade --alltidak bisa memutakhirkan tong.

Satu-satunya cara untuk memutakhirkan semua tong adalah dengan mendapatkan daftar tong yang dipasang dan memaksanya untuk diinstal ulang - termasuk yang belum berubah!

Pada ikan , Anda bisa melakukannya seperti ini:

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

edit:

Atais membuat skrip yang berfungsi: Skrip Bash untuk memutakhirkan paket .
Harap jawab jawabannya daripada yang ini.

Pascal
sumber
1
Nah, ingatlah bahwa itu benar-benar akan menginstal ulang semua aplikasi Anda, bukan hanya memperbarui :(
Atais
1
Untuk memutakhirkan daftar tong, Anda harus menjalankan brew cask updatekemudian ikuti respons sebelumnya untuk memutakhirkan hanya paket yang saat ini kedaluwarsa di sini: apple.stackexchange.com/a/231020/49601
Danijel-James W
@ Danijel-JamesW Aku mengembalikan uang kembalianmu karena itu salah. Mungkin itu cara untuk melakukannya di kulit lain, tetapi tidak pada ikan.
Pascal
10

Dari homebrew caskdokumentasi :

Karena repositori homebrew-tong adalah Tap Homebrew, Anda akan menarik tong terbaru setiap kali Anda mengeluarkan perintah Homebrew biasa brew update. Saat ini, tong sampah rumah tidak selalu dapat mendeteksi jika Aplikasi telah diperbarui. Anda dapat memaksa pembaruan melalui perintah brew cask install --force. Kami sedang berupaya meningkatkan ini.

Yang berikut harusnya cukup untuk meningkatkan formula dan tong minuman.

brew upgrade --all 
jherran
sumber
4
Ini tidak benar lagi. brew upgrade --allsetara dengan brew upgradesekarang. Tong tidak ditingkatkan oleh perintah itu.
proski
6

Inilah yang saya miliki di .bash_profile yang saya jalankan untuk melakukan upgrade penuh dari homebrew. Saya "menyematkan" beberapa item untuk mencegah unduhan raksasa berulang kali diambil untuk setiap pembaruan, karena versi mereka selalu "terbaru" atau tidak boleh ditingkatkan.

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

Untuk menginstal ulang aplikasi pembuatan bir di zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done
sqren
sumber
Ini tidak terlalu baik untuk pengguna yang mungkin memiliki banyak brew caskinstalasi yang memerlukan input pengguna (misalnya - kuarsa) . Selain itu, tidak perlu menghapus semua aplikasi sebelum menginstal ulang. Idealnya Anda juga harus menjalankan pembaruan seperti brew cask updatedulu.
Danijel-James W
@ Danijel-JamesW Sayangnya itu adalah jika Anda tidak ingin versi lama tetap.
Pascal
1

Saya merekomendasikan jawaban @ eduncan911 dalam pertanyaan rekan di Stack Overflow .

Pendeknya:

  • $ brew-cask.shhanya mencantumkan output yang mirip dengan Homebrew's brew update. daftar di atas menunjukkan semua paket yang diinstal, dengan warna hijau menunjukkan setiap pembaruan yang menunggu
  • $ brew-cask.shUpgrade akan memaksa upgrade paket-paket itu.

Instal dari repo-nya dengan:

$ 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

Kemudian gunakan seperti ini:

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

Saya membuat skrip seperti itu sendiri. Silakan lihat github https://github.com/pesh1983/brew_cask_upgrade . Ini memiliki deskripsi yang cukup bagus, tetapi jika Anda memiliki pertanyaan tambahan, jangan ragu untuk bertanya kepada saya. Itu tidak adil upgrade: uninstall dan instal, sehingga pembersihan yang diperlukan akan dilakukan oleh 'buatan' itu sendiri.

Pavel Goltsev
sumber
1

Ini mungkin akan lebih tepat sebagai komentar, tapi saya tidak punya cukup reputasi untuk meninggalkan satu, jadi ...

Pada tulisan ini, homebrew-caskmemiliki sistem peningkatan sendiri, sehingga skrip dan alat pihak ketiga tidak lagi diperlukan.

Untuk daftar tong yang kedaluwarsa: brew cask outdated

Untuk memutakhirkan semua tong yang kedaluwarsa: brew cask upgrade

DarrenPMeyer
sumber
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
nama
sumber
Ini tidak dapat dibaca - juga perlu penjelasan tentang apa yang dilakukannya
user151019