brew tap and brew untap

This commit is contained in:
Max Howell 2012-03-02 20:28:54 +00:00
parent a42714ce82
commit 0c7e7ae437
4 changed files with 68 additions and 1 deletions

3
.gitignore vendored
View File

@ -7,4 +7,5 @@
!/bin/brew
!/share/man/man1/brew.1
.DS_Store
/Library/LinkedKegs
/Library/LinkedKegs
/Library/Taps

View File

@ -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

View File

@ -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

View File

@ -313,6 +313,17 @@ class Pathname
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