Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

`brew tap` and `brew untap`

  • Loading branch information...
commit fb13b6a99e48984fc74675784f74cb409a4a7557 1 parent 36ebeb2
@mxcl mxcl authored
View
3  .gitignore
@@ -7,4 +7,5 @@
!/bin/brew
!/share/man/man1/brew.1
.DS_Store
-/Library/LinkedKegs
+/Library/LinkedKegs
+/Library/Taps
View
38 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
View
17 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
View
11 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

5 comments on commit fb13b6a

@MindTooth

Worked great!

~ $ brew tap adamv/homebrew-alt
Cloning into '/usr/local/Library/Taps/adamv-alt'...
remote: Counting objects: 1021, done.
remote: Compressing objects: 100% (510/510), done.
remote: Total 1021 (delta 616), reused 867 (delta 498)
Receiving objects: 100% (1021/1021), 168.87 KiB | 140 KiB/s, done.
Resolving deltas: 100% (616/616), done.
Warning: Could not tap adamv/alt/autoconf over mxcl/master/autoconf
Warning: Could not tap adamv/alt/flex_sdk over mxcl/master/flex_sdk
Warning: Could not tap adamv/alt/grails over mxcl/master/grails
Warning: Could not tap adamv/alt/ruby over mxcl/master/ruby
Tapped 0 formula

@mxcl
Collaborator

Hmm, shouldn't say "0 formula" though. However I tested again to be sure, it does tap some formula!

@MindTooth

I were able to find vim from homebrew-alt:

/usr/local $ b info vim
vim 7.3.462
http://www.vim.org/
/usr/local/Cellar/vim/HEAD (1256 files, 22M)
https://github.com/adamv/homebrew-alt/commits/master/duplicates/vim.rb

The local install is from my own formula. But it locates the Vim from homebrew-alt. So I believe :P

@mxcl
Collaborator

Yes, local installs are a problem that will not be solved for a bit. It confuses brew. We always look to formula from the Formula directory for command outputs.

@MindTooth

I only mentioned my local install as a side-note :P But good to know :)

Please sign in to comment.
Something went wrong with that request. Please try again.