From ecfc8a8c1192084dd0da07510257e30cede91462 Mon Sep 17 00:00:00 2001 From: Adam Vandenberg Date: Wed, 16 Jun 2010 09:42:06 -0700 Subject: [PATCH] External command: brew switch formula version This external command allows you to switch between installed versions of a formula. If you have multiple versions of a formula in your cellar, the standard "brew link" command will refuse to run. This new command "brew switch" tries to unlink all versions of the brew from the prefix, then links the specific requested version. --- Library/Contributions/examples/brew-switch.rb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 Library/Contributions/examples/brew-switch.rb diff --git a/Library/Contributions/examples/brew-switch.rb b/Library/Contributions/examples/brew-switch.rb new file mode 100755 index 0000000000..e580feafad --- /dev/null +++ b/Library/Contributions/examples/brew-switch.rb @@ -0,0 +1,40 @@ +require 'formula' +require 'keg' + +if ARGV.named.length != 2 + onoe "Two parameters are expected, the formula name and version to link." + 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.children.select { |pn| pn.directory? }.collect { |pn| pn.basename.to_s } + puts "Versions available: #{versions.join(', ')}" + + exit 3 +end + +# Unlink all existing versions +cellar.children.select { |pn| pn.directory? }.each do |v| + keg = Keg.new(v) + puts "Cleaning #{keg}" + keg.unlink +end + +# Link new version + +keg = Keg.new(cellar+version) +puts "#{keg.link} links created for #{keg}" \ No newline at end of file