aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd
diff options
context:
space:
mode:
authorMike McQuaid2014-09-20 14:31:44 +0100
committerMike McQuaid2014-09-24 15:22:51 -0700
commit3fc691d4e5fa6ea568643b89b28346ef9303346b (patch)
tree95a5668cc2bbe2f600233865d19dde5ccd9a44d5 /Library/Homebrew/cmd
parent9b82398f26ebbbfce9f8b31a9a190b9414c2c1cb (diff)
downloadhomebrew-3fc691d4e5fa6ea568643b89b28346ef9303346b.tar.bz2
brew-switch: make an internal command.
Diffstat (limited to 'Library/Homebrew/cmd')
-rwxr-xr-xLibrary/Homebrew/cmd/switch.rb49
1 files changed, 49 insertions, 0 deletions
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 <formula> <version>"
+ 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