Re-jig the cask-upgrade script.

This commit is contained in:
Scott Wallace 2016-03-16 16:37:11 +00:00
parent 158b05543b
commit 304bd62dea

View file

@ -6,141 +6,116 @@
# Therefore casks that use "latest" will not be updated # Therefore casks that use "latest" will not be updated
# #
# NOTE: THIS SCRIPT COMPLETELY REMOVES OUT-OF-DATE CASKS & ADDS THE LATEST VERSION. # NOTE: THIS SCRIPT COMPLETELY REMOVES OUT-OF-DATE CASKS & ADDS THE LATEST VERSION.
#
# Usage :
# cask-upgrade : prompt each time it encouter an update to install it
# cask-upgrade auto : will upgrade applications automatically
# cask-upgrade atom : will search for an application called atom and upgrade it
class String require 'optparse'
def black; "\e[30m#{self}\e[0m" end
def red; "\e[31m#{self}\e[0m" end
def green; "\e[32m#{self}\e[0m" end
def brown; "\e[33m#{self}\e[0m" end
def blue; "\e[34m#{self}\e[0m" end
def magenta; "\e[35m#{self}\e[0m" end
def cyan; "\e[36m#{self}\e[0m" end
def gray; "\e[1;30m#{self}\e[0m" end
def bg_black; "\e[40m#{self}\e[0m" end options = {}
def bg_red; "\e[41m#{self}\e[0m" end OptionParser.new do |opts|
def bg_green; "\e[42m#{self}\e[0m" end opts.banner = "Usage: #{opts.program_name()} <options> <package name>"
def bg_brown; "\e[43m#{self}\e[0m" end
def bg_blue; "\e[44m#{self}\e[0m" end
def bg_magenta; "\e[45m#{self}\e[0m" end
def bg_cyan; "\e[46m#{self}\e[0m" end
def bg_gray; "\e[47m#{self}\e[0m" end
def bold; "\e[1m#{self}\e[22m" end opts.on("-y", "Assume yes") do |y|
def italic; "\e[3m#{self}\e[23m" end options[:auto] = y
def underline; "\e[4m#{self}\e[24m" end
def blink; "\e[5m#{self}\e[25m" end
def reverse_color; "\e[7m#{self}\e[27m" end
end end
end.parse!
option = ARGV[0] options[:package] = ARGV[0]
auto = (option == 'auto') ? true : false
# this is where you want to install casks
appdir = '/Applications'
system('clear')
# CHANGE APP FOLDER
CASK_OPTIONS = `echo $HOMEBREW_CASK_OPTS`.freeze
if appdiropt = CASK_OPTIONS.match(/--appdir=(\S+)\s+/)
appdir = appdiropt[1] if File.exist?(appdiropt[1])
end
puts "Application directory: #{appdir}"
# UPGRADE SPECIFIC APP # UPGRADE SPECIFIC APP
if !option.nil? && !option.empty? && option != 'auto' if options[:package]
app = option.chomp app = options[:package]
if system("brew cask info #{app} &>/dev/null") if system("brew cask info #{app} &>/dev/null")
print "Do you want to reinstall #{app}? " + '[ y/N ] '.gray print "Do you want to reinstall #{app}? " + '[y/N]'
if options[:auto]
update = 'y'
else
update = STDIN.gets.strip update = STDIN.gets.strip
end
if update =~ /[yY]/ if update =~ /[yY]/
puts "closing any open instances of #{app}".cyan puts "Closing any open instances of #{app}"
system("osascript -e \'quit app \"#{app}\"\' && sleep 1") system("osascript -e \'quit app \"#{app}\"\' && sleep 1")
puts "Upgrading #{app}".green puts "Upgrading #{app}".green
system("brew cask uninstall #{app} --force && sleep 1 && brew cask install #{app} --force") system("brew cask uninstall #{app} --force && sleep 1 && brew cask install #{app} --force")
else else
puts 'Canceling update...'.brown puts 'Cancelling update...'
end end
else else
puts 'Unknow app to update'.red puts 'Unknown app to update'
end end
exit! exit!
end end
# UPDATE HOMEBREW # UPDATE HOMEBREW
puts 'Updating homebrew cask, please wait...'.cyan puts 'Updating homebrew cask, please wait...'
system('brew cask update') system('brew cask update')
if $CHILD_STATUS == 1 if $CHILD_STATUS == 1
puts 'Cask update failed'.red puts 'Cask update failed'.red
exit! exit!
end end
system('clear')
# BREW CASK LIST # BREW CASK LIST
# IO.popen("echo atom") { |apps|
IO.popen('brew cask list') do |apps| IO.popen('brew cask list') do |apps|
apps.each do |app| apps.each do |app|
app.chomp! app.chomp!
puts '+-------------------------------------------------------------------+' infosstr = app
infosstr = app.upcase
infos = `brew cask info #{app}` infos = `brew cask info #{app}`
if vmatch = /: ([0-9\._]+)/.match(infos.lines.first) if vmatch = /: ([A-z0-9\._]+)/.match(infos.lines.first)
version, build = vmatch[1].split(/[_-]/) version, build = vmatch[1].split(/[_-]/)
infosstr += " version #{version}".gray infosstr += " version: #{version}"
infosstr += " (#{build})".gray if build infosstr += " (#{build})" if build
print infosstr.to_s print infosstr.to_s
column1length = 69 - infosstr.gsub(/\e\[[0-9;]+[m]?/, '').length column1length = 80 - infosstr.gsub(/\e\[[0-9;]+[m]?/, '').length
if appname = /(.*) \(app\)/.match(infos) if appname = /(.+) \(app\)/.match(infos)
# APPLICATION FILENAME # APPLICATION FILENAME
appname = appname[1].strip appname = appname[1].strip
if File.exist?("#{appdir}/#{appname}")
fullpath = `mdfind -onlyin /opt/homebrew-cask/Caskroom -onlyin /Applications -onlyin ~/Applications "#{appname}" | grep "#{appname}"`.strip
if File.exist?(fullpath)
# GET APPLICATION VERSION WITH SPOTLIGHT # GET APPLICATION VERSION WITH SPOTLIGHT
if currentmatch = /([0-9\.]+)/.match(`mdls "#{appdir}/#{appname}" -name kMDItemVersion -raw`) if currentmatch = /([A-z0-9\.]+)/.match(`mdls "#{fullpath}" -name kMDItemVersion -raw`)
current = currentmatch[1].chomp current = currentmatch[1].chomp
# COMPARE INSTALLED VERSION WITH CASK VERSION # COMPARE INSTALLED VERSION WITH CASK VERSION
begin
if Gem::Version.new(version) <= Gem::Version.new(current) if Gem::Version.new(version) <= Gem::Version.new(current)
puts 'up-to-date'.rjust(column1length).green puts 'Up-to-date'.rjust(column1length)
elsif current != '(null)' && version != 'latest' elsif current != '(null)' && version != 'latest'
puts 'update available'.rjust(column1length).cyan puts 'Update available'.rjust(column1length)
print "Do you want to update #{app} to version #{version.green} (current #{current.green})? " + '[ y/N ] '.gray print "Do you want to update #{app} to version #{version.green} (current #{current.green})? " + '[y/N] '
if auto if options[:auto]
puts 'auto'.cyan
update = 'y' update = 'y'
else else
update = STDIN.gets.strip update = STDIN.gets.strip
end end
# UPDATE CURRENT APPLICAION # UPDATE CURRENT APPLICAION
if update =~ /[yY]/ if update =~ /[yY]/
puts "Updating #{app} to version #{version}".green puts "Updating #{app} to version #{version}"
puts "Closing any open instances of #{app}".cyan puts "Closing any open instances of #{app}"
system("osascript -e \'quit app \"#{app}\"\' && sleep 1") system("osascript -e \'quit app \"#{app}\"\' && sleep 1")
system("brew cask uninstall #{app} --force && sleep 1 && brew cask install #{app} --force") system("brew cask uninstall #{app} --force && sleep 1 && brew cask install #{app} --force")
else else
puts 'Cancel update...'.brown puts 'Cancelling update'
end end
else else
puts 'update undefined...'.rjust(column1length) puts 'Update undefined'.rjust(column1length)
end
rescue
puts 'Cannot determine latest version'.rjust(column1length)
end end
else else
puts 'unknown installed version'.rjust(column1length).brown puts 'Unknown installed version'.rjust(column1length)
end end
else else
puts 'not found'.rjust(column1length) puts 'Not found'.rjust(column1length)
end end
else else
puts 'unknown app'.rjust(column1length).brown puts 'Unknown app'.rjust(column1length)
end end
else else
print infosstr.to_s print infosstr.to_s
column1length = 69 - infosstr.length column1length = 80 - infosstr.length
puts 'unknown version'.rjust(column1length).brown puts 'Unknown version'.rjust(column1length)
end end
end end
end end