aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/formula_pin.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/formula_pin.rb')
-rw-r--r--Library/Homebrew/formula_pin.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/Library/Homebrew/formula_pin.rb b/Library/Homebrew/formula_pin.rb
new file mode 100644
index 000000000..cdffd7fc0
--- /dev/null
+++ b/Library/Homebrew/formula_pin.rb
@@ -0,0 +1,36 @@
+require 'formula'
+require 'fileutils'
+
+class FormulaPin
+ HOMEBREW_PINNED = HOMEBREW_LIBRARY/'PinnedKegs'
+
+ def initialize(formula)
+ @formula = formula
+ @name = formula.name
+ HOMEBREW_PINNED.mkdir unless HOMEBREW_PINNED.exist?
+ @path = HOMEBREW_PINNED/@name
+ end
+
+ def pin_at(version)
+ version_path = @formula.installed_prefix.parent.join(version)
+ FileUtils.ln_s version_path, @path unless pinned? or not version_path.exist?
+ end
+
+ def pin
+ versions = @formula.installed_prefix.parent.children.map { |item| item.basename.to_s }
+ version = versions.map { |item| Version.new(item) }.sort[0].to_s
+ pin_at(version)
+ end
+
+ def unpin
+ FileUtils.rm @path if pinned?
+ end
+
+ def pinned?
+ @path.exist?
+ end
+
+ def pinable?
+ @formula.installed_prefix.parent.children.length > 0
+ end
+end