mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

This patch adds a ArchiveDownloadStrategy that handles downloading tarbarlls and decompressing them into the staging area ready for brewing. Refactored safe_system and curl into utils.rb Signed-off-by: Max Howell <max@methylblue.com> Modifications to Adam's original patch: I reverted objectification of checksum verification because I couldn't think of any other download validation methods that might be useful to us in the future, so allowing such flexibility had no advantages. If we ever need this to be OO we can add it. But for now less complexity is preferable. I removed the @svnurl class member. Instead download_strategy is autodetected by examining the url. The user can override the download_strategy in case this fails. Thus we already can easily add support for clones of git repositories.
66 lines
1.8 KiB
Ruby
66 lines
1.8 KiB
Ruby
# Copyright 2009 Max Howell <max@methylblue.com>
|
|
#
|
|
# This file is part of Homebrew.
|
|
#
|
|
# Homebrew is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Homebrew is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# args are additional inputs to puts until a nil arg is encountered
|
|
def ohai title, *args
|
|
return if args.length > 0 and args[0].nil?
|
|
n=`tput cols`.strip.to_i-4
|
|
puts "\033[0;34m==>\033[0;0;1m #{title[0,n]}\033[0;0m"
|
|
args.each do |arg|
|
|
return if arg.nil?
|
|
puts arg
|
|
end
|
|
end
|
|
|
|
# shows a warning in delicious pink
|
|
def opoo warning
|
|
puts "\033[1;35m==>\033[0;0;1m Warning\033[0;0m: #{warning}"
|
|
end
|
|
|
|
def onoe error
|
|
puts "\033[1;31m==>\033[0;0;1m Error\033[0;0m: #{error}"
|
|
end
|
|
|
|
def pretty_duration s
|
|
return "#{(s*1000).to_i} milliseconds" if s < 3
|
|
return "#{s.to_i} seconds" if s < 10*60
|
|
return "#{(s/60).to_i} minutes"
|
|
end
|
|
|
|
def interactive_shell
|
|
pid=fork
|
|
if pid.nil?
|
|
exec ENV['SHELL']
|
|
else
|
|
Process.wait pid
|
|
end
|
|
end
|
|
|
|
# Kernel.system but with exceptions
|
|
def safe_system cmd, *args
|
|
puts "#{cmd} #{args*' '}" if ARGV.verbose?
|
|
|
|
execd=Kernel.system cmd, *args
|
|
# somehow Ruby doesn't handle the CTRL-C from another process -- WTF!?
|
|
raise Interrupt, cmd if $?.termsig == 2
|
|
raise ExecutionError.new(cmd, args) unless execd and $? == 0
|
|
end
|
|
|
|
def curl url, *args
|
|
safe_system 'curl', '-f#LA', HOMEBREW_USER_AGENT, url, *args
|
|
end
|