aboutsummaryrefslogtreecommitdiff
path: root/src/libfetchers/tarball.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2023-08-01 16:07:20 +0200
committerEelco Dolstra <edolstra@gmail.com>2023-08-01 16:07:20 +0200
commitd9e7758f4756c10592407b3fe99dc253ef56eac9 (patch)
tree960315c30ed9cbc7dd182c391aba64f212dba183 /src/libfetchers/tarball.cc
parentdcdd5fed74445c526a361202a9e6c8459a38726b (diff)
Don't require .tar/.zip extension for tarball flakerefs
Special-casing the file name is rather ugly, so we shouldn't do that. So now any {file,http,https} URL is handled by TarballInputScheme, except for non-flake inputs (i.e. inputs that have the attribute `flake = false`).
Diffstat (limited to 'src/libfetchers/tarball.cc')
-rw-r--r--src/libfetchers/tarball.cc18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/libfetchers/tarball.cc b/src/libfetchers/tarball.cc
index a012234e0..107d38e92 100644
--- a/src/libfetchers/tarball.cc
+++ b/src/libfetchers/tarball.cc
@@ -194,11 +194,11 @@ struct CurlInputScheme : InputScheme
|| hasSuffix(path, ".tar.zst");
}
- virtual bool isValidURL(const ParsedURL & url) const = 0;
+ virtual bool isValidURL(const ParsedURL & url, bool requireTree) const = 0;
- std::optional<Input> inputFromURL(const ParsedURL & _url) const override
+ std::optional<Input> inputFromURL(const ParsedURL & _url, bool requireTree) const override
{
- if (!isValidURL(_url))
+ if (!isValidURL(_url, requireTree))
return std::nullopt;
Input input;
@@ -265,13 +265,13 @@ struct FileInputScheme : CurlInputScheme
{
const std::string inputType() const override { return "file"; }
- bool isValidURL(const ParsedURL & url) const override
+ bool isValidURL(const ParsedURL & url, bool requireTree) const override
{
auto parsedUrlScheme = parseUrlScheme(url.scheme);
return transportUrlSchemes.count(std::string(parsedUrlScheme.transport))
&& (parsedUrlScheme.application
- ? parsedUrlScheme.application.value() == inputType()
- : !hasTarballExtension(url.path));
+ ? parsedUrlScheme.application.value() == inputType()
+ : (!requireTree && !hasTarballExtension(url.path)));
}
std::pair<StorePath, Input> fetch(ref<Store> store, const Input & input) override
@@ -285,14 +285,14 @@ struct TarballInputScheme : CurlInputScheme
{
const std::string inputType() const override { return "tarball"; }
- bool isValidURL(const ParsedURL & url) const override
+ bool isValidURL(const ParsedURL & url, bool requireTree) const override
{
auto parsedUrlScheme = parseUrlScheme(url.scheme);
return transportUrlSchemes.count(std::string(parsedUrlScheme.transport))
&& (parsedUrlScheme.application
- ? parsedUrlScheme.application.value() == inputType()
- : hasTarballExtension(url.path));
+ ? parsedUrlScheme.application.value() == inputType()
+ : (requireTree || hasTarballExtension(url.path)));
}
std::pair<StorePath, Input> fetch(ref<Store> store, const Input & _input) override