diff options
| author | Max Howell | 2012-03-02 20:28:54 +0000 | 
|---|---|---|
| committer | Max Howell | 2012-03-16 21:06:15 +0000 | 
| commit | fb13b6a99e48984fc74675784f74cb409a4a7557 (patch) | |
| tree | f873307d6972ce088c9b0302ee7cce3d45573197 | |
| parent | 36ebeb2d04d03290e9721fb0e687532af84c9fb2 (diff) | |
| download | homebrew-fb13b6a99e48984fc74675784f74cb409a4a7557.tar.bz2 | |
`brew tap` and `brew untap`
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | Library/Homebrew/cmd/tap.rb | 38 | ||||
| -rw-r--r-- | Library/Homebrew/cmd/untap.rb | 17 | ||||
| -rw-r--r-- | Library/Homebrew/extend/pathname.rb | 11 | 
4 files changed, 68 insertions, 1 deletions
| diff --git a/.gitignore b/.gitignore index 60119cef7..6a7ee0e63 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 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 diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index 6057c1437..d0ed3108b 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -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 | 
