diff --git a/.gitignore b/.gitignore index 60119cef719b..6a7ee0e63a94 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ !/bin/brew !/share/man/man1/brew.1 .DS_Store -/Library/LinkedKegs \ No newline at end of file +/Library/LinkedKegs +/Library/Taps diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb new file mode 100644 index 000000000000..e1f53db8bcd2 --- /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 000000000000..78778e6fc191 --- /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 diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index 6057c1437488..d0ed3108bf1d 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -313,6 +313,17 @@ def uninstall_info end system '/usr/bin/install-info', '--delete', '--quiet', self.to_s, (self.dirname+'dir').to_s end + + def find_formula pwd = self + children.map{ |child| child.relative_path_from(pwd) }.each do |pn| + yield pn if pn.to_s =~ /.rb$/ + end + children.each do |child| + child.find_formula(pwd) do |pn| + yield pn + end if child.directory? + end + end end # sets $n and $d so you can observe creation of stuff