mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-24 23:06:16 +02:00
Provide a default Input::fetch() that uses lazyFetch()
This commit is contained in:
parent
df713a5d25
commit
c80b942c6e
3 changed files with 21 additions and 7 deletions
|
@ -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());
|
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)
|
std::pair<ref<InputAccessor>, Input> InputScheme::lazyFetch(ref<Store> store, const Input & input)
|
||||||
{
|
{
|
||||||
auto [storePath, input2] = fetch(store, input);
|
auto [storePath, input2] = fetch(store, input);
|
||||||
|
|
|
@ -135,7 +135,11 @@ struct InputScheme
|
||||||
|
|
||||||
virtual void markChangedFile(const Input & input, std::string_view file, std::optional<std::string> commitMsg);
|
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);
|
virtual std::pair<ref<InputAccessor>, Input> lazyFetch(ref<Store> store, const Input & input);
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,9 @@ struct GitArchiveInputScheme : InputScheme
|
||||||
|
|
||||||
bool hasAllInfo(const Input & input) override
|
bool hasAllInfo(const Input & input) override
|
||||||
{
|
{
|
||||||
return input.getRev() && maybeGetIntAttr(input.attrs, "lastModified");
|
return input.getRev() &&
|
||||||
|
true; // FIXME
|
||||||
|
//maybeGetIntAttr(input.attrs, "lastModified");
|
||||||
}
|
}
|
||||||
|
|
||||||
Input applyOverrides(
|
Input applyOverrides(
|
||||||
|
@ -224,11 +226,6 @@ struct GitArchiveInputScheme : InputScheme
|
||||||
return {res.storePath, input};
|
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
|
std::pair<ref<InputAccessor>, Input> lazyFetch(ref<Store> store, const Input & input) override
|
||||||
{
|
{
|
||||||
auto [storePath, input2] = downloadArchive(store, input);
|
auto [storePath, input2] = downloadArchive(store, input);
|
||||||
|
|
Loading…
Reference in a new issue