diff options
Diffstat (limited to 'Library/Homebrew/cmd')
| -rw-r--r-- | Library/Homebrew/cmd/tap.rb | 38 | ||||
| -rw-r--r-- | Library/Homebrew/cmd/untap.rb | 17 |
2 files changed, 55 insertions, 0 deletions
diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb new file mode 100644 index 000000000..e1f53db8b --- /dev/null +++ b/Library/Homebrew/cmd/tap.rb @@ -0,0 +1,38 @@ +HOMEBREW_LIBRARY = HOMEBREW_REPOSITORY/"Library" + +module Homebrew extend self + + def tap + if ARGV.empty? + (HOMEBREW_LIBRARY/"Taps").children.each do |tap| + puts tap.basename.sub('-', '/') if (tap/'.git').directory? + end + else + install_tap(*tap_args) + end + end + + def install_tap user, repo + raise "brew install git" unless system "/usr/bin/which -s git" + + tapd = HOMEBREW_LIBRARY/"Taps/#{user}-#{repo}" + raise "Already tapped!" if tapd.directory? + abort unless system "git clone https://github.com/#{user}/homebrew-#{repo} #{tapd}" + + cd HOMEBREW_LIBRARY/"Formula" + tapd.find_formula do |relative_pathname| + # using the system ln is the only way to get relative symlinks + system "ln -s ../Taps/#{user}-#{repo}/#{relative_pathname} 2>/dev/null" + opoo "#{relative_pathname.basename(".rb")} conflicts" unless $?.success? + end + end + + private + + def tap_args + ARGV.first =~ %r{^(\w+)/(homebrew-)?(\w+)$} + raise "Invalid usage" unless $1 and $3 + [$1, $3] + end + +end diff --git a/Library/Homebrew/cmd/untap.rb b/Library/Homebrew/cmd/untap.rb new file mode 100644 index 000000000..78778e6fc --- /dev/null +++ b/Library/Homebrew/cmd/untap.rb @@ -0,0 +1,17 @@ +require 'cmd/tap' # for Pathname.recursive_formula + +module Homebrew extend self + def untap + user, repo = tap_args + tapd = HOMEBREW_PREFIX/"Library/Taps/#{user}-#{repo}" + + raise "No such tap!" unless tapd.directory? + + tapd.find_formula do |pn| + pn = HOMEBREW_REPOSITORY/"Library/Formula"/pn.basename + pn.delete if pn.symlink? and pn.realpath.to_s =~ %r[^#{tapd.realpath}] + end + + rm_rf tapd + end +end |
