Fix cached download file extension for certain URL

PHP URLs have the downloadable file in the middle of the pathname. If no
extension is detected, continue up the pathname.
This commit is contained in:
Kevin Abel 2018-01-09 19:56:54 -06:00
parent f06b54f1bb
commit 06f2b50ee4
No known key found for this signature in database
GPG Key ID: E0F7636DDDB96BF6
2 changed files with 18 additions and 1 deletions

View File

@ -303,7 +303,11 @@ class AbstractFileDownloadStrategy < AbstractDownloadStrategy
# We can't use basename_without_params, because given a URL like
# https://example.com/download.php?file=foo-1.0.tar.gz
# the extension we want is ".tar.gz", not ".php".
Pathname.new(@url).extname[/[^?]+/]
url_pathname = Pathname.new(@url)
while !ext = url_pathname.extname[/[^?]+/]
url_pathname = url_pathname.dirname
end
ext
end
end

View File

@ -209,6 +209,19 @@ describe CurlDownloadStrategy do
it "parses the opts and sets the corresponding args" do
expect(subject.send(:_curl_opts)).to eq(["--user", "download:123456"])
end
describe "#tarball_path" do
subject { described_class.new(name, resource).tarball_path }
context "when URL ends with file" do
it { is_expected.to eq(HOMEBREW_CACHE/"foo-.tar.gz") }
end
context "when URL file is in middle" do
let(:url) { "http://example.com/foo.tar.gz/from/this/mirror" }
it { is_expected.to eq(HOMEBREW_CACHE/"foo-.tar.gz") }
end
end
end
describe DownloadStrategyDetector do