Provide a default Input::fetch() that uses lazyFetch()

This commit is contained in:
Eelco Dolstra 2022-05-18 23:24:05 +02:00
parent df713a5d25
commit c80b942c6e
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
3 changed files with 21 additions and 7 deletions

View file

@ -311,6 +311,19 @@ void InputScheme::clone(const Input & input, const Path & destDir)
throw Error("do not know how to clone input '%s'", input.to_string());
}
std::pair<StorePath, Input> InputScheme::fetch(ref<Store> store, const Input & input)
{
auto [accessor, input2] = lazyFetch(store, input);
auto source = sinkToSource([&](Sink & sink) {
accessor->dumpPath(CanonPath::root, sink);
});
auto storePath = store->addToStoreFromDump(*source, "source");
return {storePath, input2};
}
std::pair<ref<InputAccessor>, Input> InputScheme::lazyFetch(ref<Store> store, const Input & input)
{
auto [storePath, input2] = fetch(store, input);

View file

@ -135,7 +135,11 @@ struct InputScheme
virtual void markChangedFile(const Input & input, std::string_view file, std::optional<std::string> commitMsg);
virtual std::pair<StorePath, Input> fetch(ref<Store> store, const Input & input) = 0;
/* Note: the default implementations of fetch() and lazyFetch()
are defined using the other, so implementations have to
override at least one. */
virtual std::pair<StorePath, Input> fetch(ref<Store> store, const Input & input);
virtual std::pair<ref<InputAccessor>, Input> lazyFetch(ref<Store> store, const Input & input);

View file

@ -134,7 +134,9 @@ struct GitArchiveInputScheme : InputScheme
bool hasAllInfo(const Input & input) override
{
return input.getRev() && maybeGetIntAttr(input.attrs, "lastModified");
return input.getRev() &&
true; // FIXME
//maybeGetIntAttr(input.attrs, "lastModified");
}
Input applyOverrides(
@ -224,11 +226,6 @@ struct GitArchiveInputScheme : InputScheme
return {res.storePath, input};
}
std::pair<StorePath, Input> fetch(ref<Store> store, const Input & _input) override
{
throw UnimplementedError("GitArchive::fetch()");
}
std::pair<ref<InputAccessor>, Input> lazyFetch(ref<Store> store, const Input & input) override
{
auto [storePath, input2] = downloadArchive(store, input);