Provide a InputScheme::fetch() built on top of InputScheme::getAccessor()

This is for graceful migration to lazy-trees fetchers (which are all
accessor-based). Eventually fetch() will be removed.
This commit is contained in:
Eelco Dolstra 2023-10-24 10:23:46 +02:00
parent e1b8442fa1
commit 1d0e3d84b6
2 changed files with 17 additions and 2 deletions

View file

@ -1,5 +1,6 @@
#include "fetchers.hh" #include "fetchers.hh"
#include "store-api.hh" #include "store-api.hh"
#include "input-accessor.hh"
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
@ -312,6 +313,18 @@ void InputScheme::clone(const Input & input, const Path & destDir) const
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] = getAccessor(store, input);
auto storePath = accessor->root().fetchToStore(store, input2.getName());
return {storePath, input2};
}
std::pair<ref<InputAccessor>, Input> InputScheme::getAccessor(ref<Store> store, const Input & input) const
{
throw UnimplementedError("InputScheme must implement fetch() or getAccessor()");
}
std::optional<ExperimentalFeature> InputScheme::experimentalFeature() std::optional<ExperimentalFeature> InputScheme::experimentalFeature()
{ {
return {}; return {};

View file

@ -9,7 +9,7 @@
#include <memory> #include <memory>
namespace nix { class Store; class StorePath; } namespace nix { class Store; class StorePath; struct InputAccessor; }
namespace nix::fetchers { namespace nix::fetchers {
@ -148,7 +148,9 @@ struct InputScheme
std::string_view contents, std::string_view contents,
std::optional<std::string> commitMsg) const; std::optional<std::string> commitMsg) const;
virtual std::pair<StorePath, Input> fetch(ref<Store> store, const Input & input) = 0; virtual std::pair<StorePath, Input> fetch(ref<Store> store, const Input & input);
virtual std::pair<ref<InputAccessor>, Input> getAccessor(ref<Store> store, const Input & input) const;
/** /**
* Is this `InputScheme` part of an experimental feature? * Is this `InputScheme` part of an experimental feature?