diff --git a/.gitignore b/.gitignore index 6a7ee0e63a94..ace8a694c487 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ .DS_Store /Library/LinkedKegs /Library/Taps +/Library/Formula/.gitignore diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index e1f53db8bcd2..a311af7f0c40 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -1,3 +1,5 @@ +require 'tempfile' + HOMEBREW_LIBRARY = HOMEBREW_REPOSITORY/"Library" module Homebrew extend self @@ -19,12 +21,23 @@ def install_tap user, repo raise "Already tapped!" if tapd.directory? abort unless system "git clone https://github.com/#{user}/homebrew-#{repo} #{tapd}" + gitignores = (HOMEBREW_LIBRARY/"Formula/.gitignore").read.split rescue [] + 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? + if $?.success? + gitignores << relative_pathname.basename.to_s + else + opoo "#{relative_pathname.basename, ".rb"} conflicts" + end end + + tf = Tempfile.new("brew-tap") + tf.write(gitignores.uniq.join("\n")) + tf.close + mv tf.path, "#{HOMEBREW_PREFIX}/Library/Formula/.gitignore" end private diff --git a/Library/Homebrew/cmd/untap.rb b/Library/Homebrew/cmd/untap.rb index 78778e6fc191..80d38934b000 100644 --- a/Library/Homebrew/cmd/untap.rb +++ b/Library/Homebrew/cmd/untap.rb @@ -1,4 +1,5 @@ require 'cmd/tap' # for Pathname.recursive_formula +require 'tempfile' module Homebrew extend self def untap @@ -7,11 +8,19 @@ def untap raise "No such tap!" unless tapd.directory? + gitignores = (HOMEBREW_PREFIX/"Library/Formula/.gitignore").read.split rescue [] + tapd.find_formula do |pn| - pn = HOMEBREW_REPOSITORY/"Library/Formula"/pn.basename + bn = pn.basename.to_s + pn = HOMEBREW_REPOSITORY/"Library/Formula"/bn pn.delete if pn.symlink? and pn.realpath.to_s =~ %r[^#{tapd.realpath}] + gitignores.delete(bn) end - rm_rf tapd + + tf = Tempfile.new("brew-untap") + tf.write(gitignores.join("\n")) + tf.close + mv tf.path, "#{HOMEBREW_PREFIX}/Library/Formula/.gitignore" end end