Paul Hinze
12 years ago
1 changed files with 17 additions and 1 deletions
@ -1,5 +1,21 @@ |
|||||
|
require 'open3' |
||||
|
|
||||
class Cask::Fetcher |
class Cask::Fetcher |
||||
|
TIMEOUT = 10 |
||||
|
|
||||
def self.head(url) |
def self.head(url) |
||||
`curl --max-time 5 --silent --location --head '#{url}'` |
if url.to_s =~ /googlecode/ |
||||
|
googlecode_fake_head(url) |
||||
|
else |
||||
|
`curl --max-time #{TIMEOUT} --silent --location --head '#{url}'` |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
# google code does not properly respond to HTTP HEAD requests, like a jerk |
||||
|
# this fakes a HEAD by doing a GET, taking the first 20 lines, then running away |
||||
|
def self.googlecode_fake_head(url) |
||||
|
command = "curl --max-time #{TIMEOUT} --verbose --location '#{url}' | head -n 20 > /dev/null" |
||||
|
stderr = Open3.popen3(command) { |_, _, err, _| err.read } |
||||
|
stderr.split("\n").grep(/^< /).map { |line| line.sub(/^< /, '') }.join("\n") |
||||
end |
end |
||||
end |
end |
||||
|
Loading…
Reference in new issue