Mike McQuaid 8b5b220d88 tap: don't print warning for apple-gcc42 failure.
This should be a temporary workaround until we get a grip on some
Mavericks/Xcode 5.0 issues with e.g. ghc and go (stuff in core
that currently needs GCC at runtime). These formulae both have
Clang fixes in development.

Things that needs GCC at compile-time should be booted from core.

References Homebrew/homebrew#22872.
References Homebrew/homebrew-dupes#229
2013-10-16 08:40:41 +01:00

130 lines
3.8 KiB
Ruby

module Homebrew extend self
def tap
if ARGV.empty?
tapd = HOMEBREW_LIBRARY/"Taps"
tapd.children.each do |tap|
# only replace the *last* dash: yes, tap filenames suck
puts tap.basename.to_s.reverse.sub('-', '/').reverse if (tap/'.git').directory?
end if tapd.directory?
elsif ARGV.first == "--repair"
repair_taps
else
install_tap(*tap_args)
end
end
def install_tap user, repo
raise "brew install git" unless which 'git'
# we special case homebrew so users don't have to shift in a terminal
repouser = if user == "homebrew" then "Homebrew" else user end
user = "homebrew" if user == "Homebrew"
# we downcase to avoid case-insensitive filesystem issues
tapd = HOMEBREW_LIBRARY/"Taps/#{user.downcase}-#{repo.downcase}"
raise "Already tapped!" if tapd.directory?
abort unless system "git clone https://github.com/#{repouser}/homebrew-#{repo} #{tapd}"
files = []
tapd.find_formula{ |file| files << tapd.basename.join(file) }
link_tap_formula(files)
puts "Tapped #{files.length} formula"
# Figure out if this repo is private
# curl will throw an exception if the repo is private (Github returns a 404)
begin
curl('-Ifso', '/dev/null', "https://api.github.com/repos/#{repouser}/homebrew-#{repo}")
rescue
puts
puts "It looks like you tapped a private repository"
puts "In order to not input your credentials every time"
puts "you can use git HTTP credential caching or issue the"
puts "following command:"
puts
puts " cd #{tapd}"
puts " git remote set-url origin git@github.com:#{repouser}/homebrew-#{repo}.git"
puts
end
end
def link_tap_formula formulae
ignores = (HOMEBREW_LIBRARY/"Formula/.gitignore").read.split rescue []
tapped = 0
cd HOMEBREW_LIBRARY/"Formula" do
formulae.each do |formula|
from = HOMEBREW_LIBRARY.join("Taps/#{formula}")
to = HOMEBREW_LIBRARY.join("Formula/#{formula.basename}")
# Unexpected, but possible, lets proceed as if nothing happened
to.delete if to.symlink? and to.realpath == from
# using the system ln is the only way to get relative symlinks
system "ln -s ../Taps/#{formula} 2>/dev/null"
if $?.success?
ignores << formula.basename.to_s
tapped += 1
else
to = to.realpath if to.exist?
# Whitelist gcc42 temporarily until Mavericks/Xcode 5.0 issues are resolved.
unless to.tap_ref == 'mxcl/master/apple-gcc42'
opoo "Could not tap #{Tty.white}#{from.tap_ref}#{Tty.reset} over #{Tty.white}#{to.tap_ref}#{Tty.reset}"
end
end
end
end
HOMEBREW_LIBRARY.join("Formula/.gitignore").atomic_write(ignores.uniq.join("\n"))
tapped
end
def repair_taps
count = 0
# prune dead symlinks in Formula
Dir["#{HOMEBREW_REPOSITORY}/Library/Formula/*.rb"].each do |fn|
if not File.exist? fn
File.delete fn
count += 1
end
end
puts "Pruned #{count} dead formula"
return unless HOMEBREW_REPOSITORY.join("Library/Taps").exist?
count = 0
# check symlinks are all set in each tap
HOMEBREW_REPOSITORY.join("Library/Taps").children.each do |tap|
files = []
tap.find_formula{ |file| files << tap.basename.join(file) } if tap.directory?
count += link_tap_formula(files)
end
puts "Tapped #{count} formula"
end
private
def tap_args
ARGV.first =~ %r{^(\S+)/(homebrew-)?(\w+)$}
raise "Invalid usage" unless $1 and $3
[$1, $3]
end
end
class Pathname
def tap_ref
case self.to_s
when %r{^#{HOMEBREW_LIBRARY}/Taps/([a-z\-_]+)-(\w+)/(.+)}
"#$1/#$2/#{File.basename($3, '.rb')}"
when %r{^#{HOMEBREW_LIBRARY}/Formula/(.+)}
"mxcl/master/#{File.basename($1, '.rb')}"
else
nil
end
end
end