From 3fc691d4e5fa6ea568643b89b28346ef9303346b Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Sat, 20 Sep 2014 14:31:44 +0100 Subject: brew-switch: make an internal command. --- Library/Homebrew/cmd/switch.rb | 49 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 Library/Homebrew/cmd/switch.rb (limited to 'Library/Homebrew/cmd') diff --git a/Library/Homebrew/cmd/switch.rb b/Library/Homebrew/cmd/switch.rb new file mode 100755 index 000000000..a626aaf4c --- /dev/null +++ b/Library/Homebrew/cmd/switch.rb @@ -0,0 +1,49 @@ +require 'formula' +require 'keg' + +module Homebrew + def switch + if ARGV.named.length != 2 + onoe "Usage: brew switch " + exit 1 + end + + name = ARGV.shift + version = ARGV.shift + + # Does this formula have any versions? + f = Formula.factory(name.downcase) + cellar = f.prefix.parent + unless cellar.directory? + onoe "#{name} not found in the Cellar." + exit 2 + end + + # Does the target version exist? + unless (cellar+version).directory? + onoe "#{name} does not have a version \"#{version}\" in the Cellar." + + versions = cellar.subdirs.map { |d| Keg.new(d).version } + puts "Versions available: #{versions.join(', ')}" + + exit 3 + end + + # Unlink all existing versions + cellar.subdirs.each do |v| + keg = Keg.new(v) + puts "Cleaning #{keg}" + keg.unlink + end + + # Link new version, if not keg-only + if f.keg_only? + keg = Keg.new(cellar+version) + keg.optlink + puts "Opt link created for #{keg}" + else + keg = Keg.new(cellar+version) + puts "#{keg.link} links created for #{keg}" + end + end +end -- cgit v1.2.3