mirror of
https://github.com/NixOS/nix.git
synced 2025-11-19 16:59:35 +01:00
libfetchers: Convert ref<Store> -> Store &
This commit is contained in:
parent
d07c24f4c8
commit
cd5cac0c40
27 changed files with 119 additions and 119 deletions
|
|
@ -34,7 +34,7 @@ EvalSettings evalSettings{
|
||||||
auto flakeRef = parseFlakeRef(fetchSettings, std::string{rest}, {}, true, false);
|
auto flakeRef = parseFlakeRef(fetchSettings, std::string{rest}, {}, true, false);
|
||||||
debug("fetching flake search path element '%s''", rest);
|
debug("fetching flake search path element '%s''", rest);
|
||||||
auto [accessor, lockedRef] =
|
auto [accessor, lockedRef] =
|
||||||
flakeRef.resolve(fetchSettings, state.store).lazyFetch(fetchSettings, state.store);
|
flakeRef.resolve(fetchSettings, *state.store).lazyFetch(fetchSettings, *state.store);
|
||||||
auto storePath = nix::fetchToStore(
|
auto storePath = nix::fetchToStore(
|
||||||
state.fetchSettings,
|
state.fetchSettings,
|
||||||
*state.store,
|
*state.store,
|
||||||
|
|
@ -180,7 +180,7 @@ Bindings * MixEvalArgs::getAutoArgs(EvalState & state)
|
||||||
SourcePath lookupFileArg(EvalState & state, std::string_view s, const Path * baseDir)
|
SourcePath lookupFileArg(EvalState & state, std::string_view s, const Path * baseDir)
|
||||||
{
|
{
|
||||||
if (EvalSettings::isPseudoUrl(s)) {
|
if (EvalSettings::isPseudoUrl(s)) {
|
||||||
auto accessor = fetchers::downloadTarball(state.store, state.fetchSettings, EvalSettings::resolvePseudoUrl(s));
|
auto accessor = fetchers::downloadTarball(*state.store, state.fetchSettings, EvalSettings::resolvePseudoUrl(s));
|
||||||
auto storePath = fetchToStore(state.fetchSettings, *state.store, SourcePath(accessor), FetchMode::Copy);
|
auto storePath = fetchToStore(state.fetchSettings, *state.store, SourcePath(accessor), FetchMode::Copy);
|
||||||
return state.storePath(storePath);
|
return state.storePath(storePath);
|
||||||
}
|
}
|
||||||
|
|
@ -188,7 +188,8 @@ SourcePath lookupFileArg(EvalState & state, std::string_view s, const Path * bas
|
||||||
else if (hasPrefix(s, "flake:")) {
|
else if (hasPrefix(s, "flake:")) {
|
||||||
experimentalFeatureSettings.require(Xp::Flakes);
|
experimentalFeatureSettings.require(Xp::Flakes);
|
||||||
auto flakeRef = parseFlakeRef(fetchSettings, std::string(s.substr(6)), {}, true, false);
|
auto flakeRef = parseFlakeRef(fetchSettings, std::string(s.substr(6)), {}, true, false);
|
||||||
auto [accessor, lockedRef] = flakeRef.resolve(fetchSettings, state.store).lazyFetch(fetchSettings, state.store);
|
auto [accessor, lockedRef] =
|
||||||
|
flakeRef.resolve(fetchSettings, *state.store).lazyFetch(fetchSettings, *state.store);
|
||||||
auto storePath = nix::fetchToStore(
|
auto storePath = nix::fetchToStore(
|
||||||
state.fetchSettings, *state.store, SourcePath(accessor), FetchMode::Copy, lockedRef.input.getName());
|
state.fetchSettings, *state.store, SourcePath(accessor), FetchMode::Copy, lockedRef.input.getName());
|
||||||
state.allowPath(storePath);
|
state.allowPath(storePath);
|
||||||
|
|
|
||||||
|
|
@ -410,7 +410,7 @@ void completeFlakeRef(AddCompletions & completions, ref<Store> store, std::strin
|
||||||
Args::completeDir(completions, 0, prefix);
|
Args::completeDir(completions, 0, prefix);
|
||||||
|
|
||||||
/* Look for registry entries that match the prefix. */
|
/* Look for registry entries that match the prefix. */
|
||||||
for (auto & registry : fetchers::getRegistries(fetchSettings, store)) {
|
for (auto & registry : fetchers::getRegistries(fetchSettings, *store)) {
|
||||||
for (auto & entry : registry->entries) {
|
for (auto & entry : registry->entries) {
|
||||||
auto from = entry.from.to_string();
|
auto from = entry.from.to_string();
|
||||||
if (!hasPrefix(prefix, "flake:") && hasPrefix(from, "flake:")) {
|
if (!hasPrefix(prefix, "flake:") && hasPrefix(from, "flake:")) {
|
||||||
|
|
|
||||||
|
|
@ -3188,7 +3188,7 @@ std::optional<SourcePath> EvalState::resolveLookupPathPath(const LookupPath::Pat
|
||||||
|
|
||||||
if (EvalSettings::isPseudoUrl(value)) {
|
if (EvalSettings::isPseudoUrl(value)) {
|
||||||
try {
|
try {
|
||||||
auto accessor = fetchers::downloadTarball(store, fetchSettings, EvalSettings::resolvePseudoUrl(value));
|
auto accessor = fetchers::downloadTarball(*store, fetchSettings, EvalSettings::resolvePseudoUrl(value));
|
||||||
auto storePath = fetchToStore(fetchSettings, *store, SourcePath(accessor), FetchMode::Copy);
|
auto storePath = fetchToStore(fetchSettings, *store, SourcePath(accessor), FetchMode::Copy);
|
||||||
return finish(this->storePath(storePath));
|
return finish(this->storePath(storePath));
|
||||||
} catch (Error & e) {
|
} catch (Error & e) {
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ static void prim_fetchMercurial(EvalState & state, const PosIdx pos, Value ** ar
|
||||||
attrs.insert_or_assign("rev", rev->gitRev());
|
attrs.insert_or_assign("rev", rev->gitRev());
|
||||||
auto input = fetchers::Input::fromAttrs(state.fetchSettings, std::move(attrs));
|
auto input = fetchers::Input::fromAttrs(state.fetchSettings, std::move(attrs));
|
||||||
|
|
||||||
auto [storePath, input2] = input.fetchToStore(state.fetchSettings, state.store);
|
auto [storePath, input2] = input.fetchToStore(state.fetchSettings, *state.store);
|
||||||
|
|
||||||
auto attrs2 = state.buildBindings(8);
|
auto attrs2 = state.buildBindings(8);
|
||||||
state.mkStorePathString(storePath, attrs2.alloc(state.s.outPath));
|
state.mkStorePathString(storePath, attrs2.alloc(state.s.outPath));
|
||||||
|
|
|
||||||
|
|
@ -194,7 +194,7 @@ static void fetchTree(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!state.settings.pureEval && !input.isDirect() && experimentalFeatureSettings.isEnabled(Xp::Flakes))
|
if (!state.settings.pureEval && !input.isDirect() && experimentalFeatureSettings.isEnabled(Xp::Flakes))
|
||||||
input = lookupInRegistries(state.fetchSettings, state.store, input, fetchers::UseRegistries::Limited).first;
|
input = lookupInRegistries(state.fetchSettings, *state.store, input, fetchers::UseRegistries::Limited).first;
|
||||||
|
|
||||||
if (state.settings.pureEval && !input.isLocked(state.fetchSettings)) {
|
if (state.settings.pureEval && !input.isLocked(state.fetchSettings)) {
|
||||||
if (input.getNarHash())
|
if (input.getNarHash())
|
||||||
|
|
@ -220,7 +220,7 @@ static void fetchTree(
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cachedInput =
|
auto cachedInput =
|
||||||
state.inputCache->getAccessor(state.fetchSettings, state.store, input, fetchers::UseRegistries::No);
|
state.inputCache->getAccessor(state.fetchSettings, *state.store, input, fetchers::UseRegistries::No);
|
||||||
|
|
||||||
auto storePath = state.mountInput(cachedInput.lockedInput, input, cachedInput.accessor);
|
auto storePath = state.mountInput(cachedInput.lockedInput, input, cachedInput.accessor);
|
||||||
|
|
||||||
|
|
@ -582,10 +582,10 @@ static void fetch(
|
||||||
auto storePath = unpack ? fetchToStore(
|
auto storePath = unpack ? fetchToStore(
|
||||||
state.fetchSettings,
|
state.fetchSettings,
|
||||||
*state.store,
|
*state.store,
|
||||||
fetchers::downloadTarball(state.store, state.fetchSettings, *url),
|
fetchers::downloadTarball(*state.store, state.fetchSettings, *url),
|
||||||
FetchMode::Copy,
|
FetchMode::Copy,
|
||||||
name)
|
name)
|
||||||
: fetchers::downloadFile(state.store, state.fetchSettings, *url, name).storePath;
|
: fetchers::downloadFile(*state.store, state.fetchSettings, *url, name).storePath;
|
||||||
|
|
||||||
if (expectedHash) {
|
if (expectedHash) {
|
||||||
auto hash = unpack ? state.store->queryPathInfo(storePath)->narHash
|
auto hash = unpack ? state.store->queryPathInfo(storePath)->narHash
|
||||||
|
|
|
||||||
|
|
@ -196,7 +196,7 @@ TEST_F(GitTest, submodulePeriodSupport)
|
||||||
{"ref", "main"},
|
{"ref", "main"},
|
||||||
});
|
});
|
||||||
|
|
||||||
auto [accessor, i] = input.getAccessor(settings, store);
|
auto [accessor, i] = input.getAccessor(settings, *store);
|
||||||
|
|
||||||
ASSERT_EQ(accessor->readFile(CanonPath("deps/sub/lib.txt")), "hello from submodule\n");
|
ASSERT_EQ(accessor->readFile(CanonPath("deps/sub/lib.txt")), "hello from submodule\n");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ Input Input::fromAttrs(const Settings & settings, Attrs && attrs)
|
||||||
return std::move(*res);
|
return std::move(*res);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string> Input::getFingerprint(ref<Store> store) const
|
std::optional<std::string> Input::getFingerprint(Store & store) const
|
||||||
{
|
{
|
||||||
if (!scheme)
|
if (!scheme)
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
|
|
@ -199,7 +199,7 @@ bool Input::contains(const Input & other) const
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: remove
|
// FIXME: remove
|
||||||
std::pair<StorePath, Input> Input::fetchToStore(const Settings & settings, ref<Store> store) const
|
std::pair<StorePath, Input> Input::fetchToStore(const Settings & settings, Store & store) const
|
||||||
{
|
{
|
||||||
if (!scheme)
|
if (!scheme)
|
||||||
throw Error("cannot fetch unsupported input '%s'", attrsToJSON(toAttrs()));
|
throw Error("cannot fetch unsupported input '%s'", attrsToJSON(toAttrs()));
|
||||||
|
|
@ -209,9 +209,9 @@ std::pair<StorePath, Input> Input::fetchToStore(const Settings & settings, ref<S
|
||||||
auto [accessor, result] = getAccessorUnchecked(settings, store);
|
auto [accessor, result] = getAccessorUnchecked(settings, store);
|
||||||
|
|
||||||
auto storePath =
|
auto storePath =
|
||||||
nix::fetchToStore(settings, *store, SourcePath(accessor), FetchMode::Copy, result.getName());
|
nix::fetchToStore(settings, store, SourcePath(accessor), FetchMode::Copy, result.getName());
|
||||||
|
|
||||||
auto narHash = store->queryPathInfo(storePath)->narHash;
|
auto narHash = store.queryPathInfo(storePath)->narHash;
|
||||||
result.attrs.insert_or_assign("narHash", narHash.to_string(HashFormat::SRI, true));
|
result.attrs.insert_or_assign("narHash", narHash.to_string(HashFormat::SRI, true));
|
||||||
|
|
||||||
result.attrs.insert_or_assign("__final", Explicit<bool>(true));
|
result.attrs.insert_or_assign("__final", Explicit<bool>(true));
|
||||||
|
|
@ -298,7 +298,7 @@ void Input::checkLocks(Input specified, Input & result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input> Input::getAccessor(const Settings & settings, ref<Store> store) const
|
std::pair<ref<SourceAccessor>, Input> Input::getAccessor(const Settings & settings, Store & store) const
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
auto [accessor, result] = getAccessorUnchecked(settings, store);
|
auto [accessor, result] = getAccessorUnchecked(settings, store);
|
||||||
|
|
@ -314,7 +314,7 @@ std::pair<ref<SourceAccessor>, Input> Input::getAccessor(const Settings & settin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input> Input::getAccessorUnchecked(const Settings & settings, ref<Store> store) const
|
std::pair<ref<SourceAccessor>, Input> Input::getAccessorUnchecked(const Settings & settings, Store & store) const
|
||||||
{
|
{
|
||||||
// FIXME: cache the accessor
|
// FIXME: cache the accessor
|
||||||
|
|
||||||
|
|
@ -334,13 +334,13 @@ std::pair<ref<SourceAccessor>, Input> Input::getAccessorUnchecked(const Settings
|
||||||
*/
|
*/
|
||||||
if (isFinal() && getNarHash()) {
|
if (isFinal() && getNarHash()) {
|
||||||
try {
|
try {
|
||||||
auto storePath = computeStorePath(*store);
|
auto storePath = computeStorePath(store);
|
||||||
|
|
||||||
store->ensurePath(storePath);
|
store.ensurePath(storePath);
|
||||||
|
|
||||||
debug("using substituted/cached input '%s' in '%s'", to_string(), store->printStorePath(storePath));
|
debug("using substituted/cached input '%s' in '%s'", to_string(), store.printStorePath(storePath));
|
||||||
|
|
||||||
auto accessor = store->requireStoreObjectAccessor(storePath);
|
auto accessor = store.requireStoreObjectAccessor(storePath);
|
||||||
|
|
||||||
accessor->fingerprint = getFingerprint(store);
|
accessor->fingerprint = getFingerprint(store);
|
||||||
|
|
||||||
|
|
@ -350,7 +350,7 @@ std::pair<ref<SourceAccessor>, Input> Input::getAccessorUnchecked(const Settings
|
||||||
if (accessor->fingerprint) {
|
if (accessor->fingerprint) {
|
||||||
ContentAddressMethod method = ContentAddressMethod::Raw::NixArchive;
|
ContentAddressMethod method = ContentAddressMethod::Raw::NixArchive;
|
||||||
auto cacheKey = makeFetchToStoreCacheKey(getName(), *accessor->fingerprint, method, "/");
|
auto cacheKey = makeFetchToStoreCacheKey(getName(), *accessor->fingerprint, method, "/");
|
||||||
settings.getCache()->upsert(cacheKey, *store, {}, storePath);
|
settings.getCache()->upsert(cacheKey, store, {}, storePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
accessor->setPathDisplay("«" + to_string() + "»");
|
accessor->setPathDisplay("«" + to_string() + "»");
|
||||||
|
|
@ -378,7 +378,7 @@ Input Input::applyOverrides(std::optional<std::string> ref, std::optional<Hash>
|
||||||
return scheme->applyOverrides(*this, ref, rev);
|
return scheme->applyOverrides(*this, ref, rev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::clone(const Settings & settings, ref<Store> store, const std::filesystem::path & destDir) const
|
void Input::clone(const Settings & settings, Store & store, const std::filesystem::path & destDir) const
|
||||||
{
|
{
|
||||||
assert(scheme);
|
assert(scheme);
|
||||||
scheme->clone(settings, store, *this, destDir);
|
scheme->clone(settings, store, *this, destDir);
|
||||||
|
|
@ -495,7 +495,7 @@ void InputScheme::putFile(
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputScheme::clone(
|
void InputScheme::clone(
|
||||||
const Settings & settings, ref<Store> store, const Input & input, const std::filesystem::path & destDir) const
|
const Settings & settings, Store & store, const Input & input, const std::filesystem::path & destDir) const
|
||||||
{
|
{
|
||||||
if (std::filesystem::exists(destDir))
|
if (std::filesystem::exists(destDir))
|
||||||
throw Error("cannot clone into existing path %s", destDir);
|
throw Error("cannot clone into existing path %s", destDir);
|
||||||
|
|
|
||||||
|
|
@ -278,7 +278,7 @@ struct GitInputScheme : InputScheme
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clone(const Settings & settings, ref<Store> store, const Input & input, const std::filesystem::path & destDir)
|
void clone(const Settings & settings, Store & store, const Input & input, const std::filesystem::path & destDir)
|
||||||
const override
|
const override
|
||||||
{
|
{
|
||||||
auto repoInfo = getRepoInfo(input);
|
auto repoInfo = getRepoInfo(input);
|
||||||
|
|
@ -624,7 +624,7 @@ struct GitInputScheme : InputScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessorFromCommit(const Settings & settings, ref<Store> store, RepoInfo & repoInfo, Input && input) const
|
getAccessorFromCommit(const Settings & settings, Store & store, RepoInfo & repoInfo, Input && input) const
|
||||||
{
|
{
|
||||||
assert(!repoInfo.workdirInfo.isDirty);
|
assert(!repoInfo.workdirInfo.isDirty);
|
||||||
|
|
||||||
|
|
@ -798,7 +798,7 @@ struct GitInputScheme : InputScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessorFromWorkdir(const Settings & settings, ref<Store> store, RepoInfo & repoInfo, Input && input) const
|
getAccessorFromWorkdir(const Settings & settings, Store & store, RepoInfo & repoInfo, Input && input) const
|
||||||
{
|
{
|
||||||
auto repoPath = repoInfo.getPath().value();
|
auto repoPath = repoInfo.getPath().value();
|
||||||
|
|
||||||
|
|
@ -882,7 +882,7 @@ struct GitInputScheme : InputScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & _input) const override
|
getAccessor(const Settings & settings, Store & store, const Input & _input) const override
|
||||||
{
|
{
|
||||||
Input input(_input);
|
Input input(_input);
|
||||||
|
|
||||||
|
|
@ -904,7 +904,7 @@ struct GitInputScheme : InputScheme
|
||||||
return {accessor, std::move(final)};
|
return {accessor, std::move(final)};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string> getFingerprint(ref<Store> store, const Input & input) const override
|
std::optional<std::string> getFingerprint(Store & store, const Input & input) const override
|
||||||
{
|
{
|
||||||
auto makeFingerprint = [&](const Hash & rev) {
|
auto makeFingerprint = [&](const Hash & rev) {
|
||||||
return rev.gitRev() + (getSubmodulesAttr(input) ? ";s" : "") + (getExportIgnoreAttr(input) ? ";e" : "")
|
return rev.gitRev() + (getSubmodulesAttr(input) ? ";s" : "") + (getExportIgnoreAttr(input) ? ";e" : "")
|
||||||
|
|
|
||||||
|
|
@ -233,7 +233,7 @@ struct GitArchiveInputScheme : InputScheme
|
||||||
std::optional<Hash> treeHash;
|
std::optional<Hash> treeHash;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual RefInfo getRevFromRef(const Settings & settings, nix::ref<Store> store, const Input & input) const = 0;
|
virtual RefInfo getRevFromRef(const Settings & settings, nix::Store & store, const Input & input) const = 0;
|
||||||
|
|
||||||
virtual DownloadUrl getDownloadUrl(const Settings & settings, const Input & input) const = 0;
|
virtual DownloadUrl getDownloadUrl(const Settings & settings, const Input & input) const = 0;
|
||||||
|
|
||||||
|
|
@ -243,7 +243,7 @@ struct GitArchiveInputScheme : InputScheme
|
||||||
time_t lastModified;
|
time_t lastModified;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::pair<Input, TarballInfo> downloadArchive(const Settings & settings, ref<Store> store, Input input) const
|
std::pair<Input, TarballInfo> downloadArchive(const Settings & settings, Store & store, Input input) const
|
||||||
{
|
{
|
||||||
if (!maybeGetStrAttr(input.attrs, "ref"))
|
if (!maybeGetStrAttr(input.attrs, "ref"))
|
||||||
input.attrs.insert_or_assign("ref", "HEAD");
|
input.attrs.insert_or_assign("ref", "HEAD");
|
||||||
|
|
@ -316,7 +316,7 @@ struct GitArchiveInputScheme : InputScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & _input) const override
|
getAccessor(const Settings & settings, Store & store, const Input & _input) const override
|
||||||
{
|
{
|
||||||
auto [input, tarballInfo] = downloadArchive(settings, store, _input);
|
auto [input, tarballInfo] = downloadArchive(settings, store, _input);
|
||||||
|
|
||||||
|
|
@ -345,7 +345,7 @@ struct GitArchiveInputScheme : InputScheme
|
||||||
return Xp::Flakes;
|
return Xp::Flakes;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string> getFingerprint(ref<Store> store, const Input & input) const override
|
std::optional<std::string> getFingerprint(Store & store, const Input & input) const override
|
||||||
{
|
{
|
||||||
if (auto rev = input.getRev())
|
if (auto rev = input.getRev())
|
||||||
return rev->gitRev();
|
return rev->gitRev();
|
||||||
|
|
@ -387,7 +387,7 @@ struct GitHubInputScheme : GitArchiveInputScheme
|
||||||
return getStrAttr(input.attrs, "repo");
|
return getStrAttr(input.attrs, "repo");
|
||||||
}
|
}
|
||||||
|
|
||||||
RefInfo getRevFromRef(const Settings & settings, nix::ref<Store> store, const Input & input) const override
|
RefInfo getRevFromRef(const Settings & settings, nix::Store & store, const Input & input) const override
|
||||||
{
|
{
|
||||||
auto host = getHost(input);
|
auto host = getHost(input);
|
||||||
auto url = fmt(
|
auto url = fmt(
|
||||||
|
|
@ -401,7 +401,7 @@ struct GitHubInputScheme : GitArchiveInputScheme
|
||||||
|
|
||||||
auto downloadResult = downloadFile(store, settings, url, "source", headers);
|
auto downloadResult = downloadFile(store, settings, url, "source", headers);
|
||||||
auto json = nlohmann::json::parse(
|
auto json = nlohmann::json::parse(
|
||||||
store->requireStoreObjectAccessor(downloadResult.storePath)->readFile(CanonPath::root));
|
store.requireStoreObjectAccessor(downloadResult.storePath)->readFile(CanonPath::root));
|
||||||
|
|
||||||
return RefInfo{
|
return RefInfo{
|
||||||
.rev = Hash::parseAny(std::string{json["sha"]}, HashAlgorithm::SHA1),
|
.rev = Hash::parseAny(std::string{json["sha"]}, HashAlgorithm::SHA1),
|
||||||
|
|
@ -426,7 +426,7 @@ struct GitHubInputScheme : GitArchiveInputScheme
|
||||||
return DownloadUrl{parseURL(url), headers};
|
return DownloadUrl{parseURL(url), headers};
|
||||||
}
|
}
|
||||||
|
|
||||||
void clone(const Settings & settings, ref<Store> store, const Input & input, const std::filesystem::path & destDir)
|
void clone(const Settings & settings, Store & store, const Input & input, const std::filesystem::path & destDir)
|
||||||
const override
|
const override
|
||||||
{
|
{
|
||||||
auto host = getHost(input);
|
auto host = getHost(input);
|
||||||
|
|
@ -462,7 +462,7 @@ struct GitLabInputScheme : GitArchiveInputScheme
|
||||||
return std::make_pair(token.substr(0, fldsplit), token.substr(fldsplit + 1));
|
return std::make_pair(token.substr(0, fldsplit), token.substr(fldsplit + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
RefInfo getRevFromRef(const Settings & settings, nix::ref<Store> store, const Input & input) const override
|
RefInfo getRevFromRef(const Settings & settings, nix::Store & store, const Input & input) const override
|
||||||
{
|
{
|
||||||
auto host = maybeGetStrAttr(input.attrs, "host").value_or("gitlab.com");
|
auto host = maybeGetStrAttr(input.attrs, "host").value_or("gitlab.com");
|
||||||
// See rate limiting note below
|
// See rate limiting note below
|
||||||
|
|
@ -477,7 +477,7 @@ struct GitLabInputScheme : GitArchiveInputScheme
|
||||||
|
|
||||||
auto downloadResult = downloadFile(store, settings, url, "source", headers);
|
auto downloadResult = downloadFile(store, settings, url, "source", headers);
|
||||||
auto json = nlohmann::json::parse(
|
auto json = nlohmann::json::parse(
|
||||||
store->requireStoreObjectAccessor(downloadResult.storePath)->readFile(CanonPath::root));
|
store.requireStoreObjectAccessor(downloadResult.storePath)->readFile(CanonPath::root));
|
||||||
|
|
||||||
if (json.is_array() && json.size() >= 1 && json[0]["id"] != nullptr) {
|
if (json.is_array() && json.size() >= 1 && json[0]["id"] != nullptr) {
|
||||||
return RefInfo{.rev = Hash::parseAny(std::string(json[0]["id"]), HashAlgorithm::SHA1)};
|
return RefInfo{.rev = Hash::parseAny(std::string(json[0]["id"]), HashAlgorithm::SHA1)};
|
||||||
|
|
@ -508,7 +508,7 @@ struct GitLabInputScheme : GitArchiveInputScheme
|
||||||
return DownloadUrl{parseURL(url), headers};
|
return DownloadUrl{parseURL(url), headers};
|
||||||
}
|
}
|
||||||
|
|
||||||
void clone(const Settings & settings, ref<Store> store, const Input & input, const std::filesystem::path & destDir)
|
void clone(const Settings & settings, Store & store, const Input & input, const std::filesystem::path & destDir)
|
||||||
const override
|
const override
|
||||||
{
|
{
|
||||||
auto host = maybeGetStrAttr(input.attrs, "host").value_or("gitlab.com");
|
auto host = maybeGetStrAttr(input.attrs, "host").value_or("gitlab.com");
|
||||||
|
|
@ -538,7 +538,7 @@ struct SourceHutInputScheme : GitArchiveInputScheme
|
||||||
// Once it is implemented, however, should work as expected.
|
// Once it is implemented, however, should work as expected.
|
||||||
}
|
}
|
||||||
|
|
||||||
RefInfo getRevFromRef(const Settings & settings, nix::ref<Store> store, const Input & input) const override
|
RefInfo getRevFromRef(const Settings & settings, nix::Store & store, const Input & input) const override
|
||||||
{
|
{
|
||||||
// TODO: In the future, when the sourcehut graphql API is implemented for mercurial
|
// TODO: In the future, when the sourcehut graphql API is implemented for mercurial
|
||||||
// and with anonymous access, this method should use it instead.
|
// and with anonymous access, this method should use it instead.
|
||||||
|
|
@ -554,7 +554,7 @@ struct SourceHutInputScheme : GitArchiveInputScheme
|
||||||
std::string refUri;
|
std::string refUri;
|
||||||
if (ref == "HEAD") {
|
if (ref == "HEAD") {
|
||||||
auto downloadFileResult = downloadFile(store, settings, fmt("%s/HEAD", base_url), "source", headers);
|
auto downloadFileResult = downloadFile(store, settings, fmt("%s/HEAD", base_url), "source", headers);
|
||||||
auto contents = store->requireStoreObjectAccessor(downloadFileResult.storePath)->readFile(CanonPath::root);
|
auto contents = store.requireStoreObjectAccessor(downloadFileResult.storePath)->readFile(CanonPath::root);
|
||||||
|
|
||||||
auto remoteLine = git::parseLsRemoteLine(getLine(contents).first);
|
auto remoteLine = git::parseLsRemoteLine(getLine(contents).first);
|
||||||
if (!remoteLine) {
|
if (!remoteLine) {
|
||||||
|
|
@ -567,7 +567,7 @@ struct SourceHutInputScheme : GitArchiveInputScheme
|
||||||
std::regex refRegex(refUri);
|
std::regex refRegex(refUri);
|
||||||
|
|
||||||
auto downloadFileResult = downloadFile(store, settings, fmt("%s/info/refs", base_url), "source", headers);
|
auto downloadFileResult = downloadFile(store, settings, fmt("%s/info/refs", base_url), "source", headers);
|
||||||
auto contents = store->requireStoreObjectAccessor(downloadFileResult.storePath)->readFile(CanonPath::root);
|
auto contents = store.requireStoreObjectAccessor(downloadFileResult.storePath)->readFile(CanonPath::root);
|
||||||
std::istringstream is(contents);
|
std::istringstream is(contents);
|
||||||
|
|
||||||
std::string line;
|
std::string line;
|
||||||
|
|
@ -598,7 +598,7 @@ struct SourceHutInputScheme : GitArchiveInputScheme
|
||||||
return DownloadUrl{parseURL(url), headers};
|
return DownloadUrl{parseURL(url), headers};
|
||||||
}
|
}
|
||||||
|
|
||||||
void clone(const Settings & settings, ref<Store> store, const Input & input, const std::filesystem::path & destDir)
|
void clone(const Settings & settings, Store & store, const Input & input, const std::filesystem::path & destDir)
|
||||||
const override
|
const override
|
||||||
{
|
{
|
||||||
auto host = maybeGetStrAttr(input.attrs, "host").value_or("git.sr.ht");
|
auto host = maybeGetStrAttr(input.attrs, "host").value_or("git.sr.ht");
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ public:
|
||||||
* Fetch the entire input into the Nix store, returning the
|
* Fetch the entire input into the Nix store, returning the
|
||||||
* location in the Nix store and the locked input.
|
* location in the Nix store and the locked input.
|
||||||
*/
|
*/
|
||||||
std::pair<StorePath, Input> fetchToStore(const Settings & settings, ref<Store> store) const;
|
std::pair<StorePath, Input> fetchToStore(const Settings & settings, Store & store) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check the locking attributes in `result` against
|
* Check the locking attributes in `result` against
|
||||||
|
|
@ -133,17 +133,17 @@ public:
|
||||||
* input without copying it to the store. Also return a possibly
|
* input without copying it to the store. Also return a possibly
|
||||||
* unlocked input.
|
* unlocked input.
|
||||||
*/
|
*/
|
||||||
std::pair<ref<SourceAccessor>, Input> getAccessor(const Settings & settings, ref<Store> store) const;
|
std::pair<ref<SourceAccessor>, Input> getAccessor(const Settings & settings, Store & store) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input> getAccessorUnchecked(const Settings & settings, ref<Store> store) const;
|
std::pair<ref<SourceAccessor>, Input> getAccessorUnchecked(const Settings & settings, Store & store) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Input applyOverrides(std::optional<std::string> ref, std::optional<Hash> rev) const;
|
Input applyOverrides(std::optional<std::string> ref, std::optional<Hash> rev) const;
|
||||||
|
|
||||||
void clone(const Settings & settings, ref<Store> store, const std::filesystem::path & destDir) const;
|
void clone(const Settings & settings, Store & store, const std::filesystem::path & destDir) const;
|
||||||
|
|
||||||
std::optional<std::filesystem::path> getSourcePath() const;
|
std::optional<std::filesystem::path> getSourcePath() const;
|
||||||
|
|
||||||
|
|
@ -173,7 +173,7 @@ public:
|
||||||
*
|
*
|
||||||
* This is not a stable identifier between Nix versions, but not guaranteed to change either.
|
* This is not a stable identifier between Nix versions, but not guaranteed to change either.
|
||||||
*/
|
*/
|
||||||
std::optional<std::string> getFingerprint(ref<Store> store) const;
|
std::optional<std::string> getFingerprint(Store & store) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -216,8 +216,8 @@ struct InputScheme
|
||||||
|
|
||||||
virtual Input applyOverrides(const Input & input, std::optional<std::string> ref, std::optional<Hash> rev) const;
|
virtual Input applyOverrides(const Input & input, std::optional<std::string> ref, std::optional<Hash> rev) const;
|
||||||
|
|
||||||
virtual void clone(
|
virtual void
|
||||||
const Settings & settings, ref<Store> store, const Input & input, const std::filesystem::path & destDir) const;
|
clone(const Settings & settings, Store & store, const Input & input, const std::filesystem::path & destDir) const;
|
||||||
|
|
||||||
virtual std::optional<std::filesystem::path> getSourcePath(const Input & input) const;
|
virtual std::optional<std::filesystem::path> getSourcePath(const Input & input) const;
|
||||||
|
|
||||||
|
|
@ -228,7 +228,7 @@ struct InputScheme
|
||||||
std::optional<std::string> commitMsg) const;
|
std::optional<std::string> commitMsg) const;
|
||||||
|
|
||||||
virtual std::pair<ref<SourceAccessor>, Input>
|
virtual std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & input) const = 0;
|
getAccessor(const Settings & settings, Store & store, const Input & input) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is this `InputScheme` part of an experimental feature?
|
* Is this `InputScheme` part of an experimental feature?
|
||||||
|
|
@ -240,7 +240,7 @@ struct InputScheme
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual std::optional<std::string> getFingerprint(ref<Store> store, const Input & input) const
|
virtual std::optional<std::string> getFingerprint(Store & store, const Input & input) const
|
||||||
{
|
{
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ struct InputCache
|
||||||
};
|
};
|
||||||
|
|
||||||
CachedResult
|
CachedResult
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & originalInput, UseRegistries useRegistries);
|
getAccessor(const Settings & settings, Store & store, const Input & originalInput, UseRegistries useRegistries);
|
||||||
|
|
||||||
struct CachedInput
|
struct CachedInput
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ std::shared_ptr<Registry> getCustomRegistry(const Settings & settings, const Pat
|
||||||
|
|
||||||
Path getUserRegistryPath();
|
Path getUserRegistryPath();
|
||||||
|
|
||||||
Registries getRegistries(const Settings & settings, ref<Store> store);
|
Registries getRegistries(const Settings & settings, Store & store);
|
||||||
|
|
||||||
void overrideRegistry(const Settings & settings, const Input & from, const Input & to, const Attrs & extraAttrs);
|
void overrideRegistry(const Settings & settings, const Input & from, const Input & to, const Attrs & extraAttrs);
|
||||||
|
|
||||||
|
|
@ -72,6 +72,6 @@ enum class UseRegistries : int {
|
||||||
* use the registries for which the filter function returns true.
|
* use the registries for which the filter function returns true.
|
||||||
*/
|
*/
|
||||||
std::pair<Input, Attrs>
|
std::pair<Input, Attrs>
|
||||||
lookupInRegistries(const Settings & settings, ref<Store> store, const Input & input, UseRegistries useRegistries);
|
lookupInRegistries(const Settings & settings, Store & store, const Input & input, UseRegistries useRegistries);
|
||||||
|
|
||||||
} // namespace nix::fetchers
|
} // namespace nix::fetchers
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ struct DownloadFileResult
|
||||||
};
|
};
|
||||||
|
|
||||||
DownloadFileResult downloadFile(
|
DownloadFileResult downloadFile(
|
||||||
ref<Store> store,
|
Store & store,
|
||||||
const Settings & settings,
|
const Settings & settings,
|
||||||
const std::string & url,
|
const std::string & url,
|
||||||
const std::string & name,
|
const std::string & name,
|
||||||
|
|
@ -43,6 +43,6 @@ struct DownloadTarballResult
|
||||||
* Download and import a tarball into the Git cache. The result is the
|
* Download and import a tarball into the Git cache. The result is the
|
||||||
* Git tree hash of the root directory.
|
* Git tree hash of the root directory.
|
||||||
*/
|
*/
|
||||||
ref<SourceAccessor> downloadTarball(ref<Store> store, const Settings & settings, const std::string & url);
|
ref<SourceAccessor> downloadTarball(Store & store, const Settings & settings, const std::string & url);
|
||||||
|
|
||||||
} // namespace nix::fetchers
|
} // namespace nix::fetchers
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ struct IndirectInputScheme : InputScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & input) const override
|
getAccessor(const Settings & settings, Store & store, const Input & input) const override
|
||||||
{
|
{
|
||||||
throw Error("indirect input '%s' cannot be fetched directly", input.to_string());
|
throw Error("indirect input '%s' cannot be fetched directly", input.to_string());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
namespace nix::fetchers {
|
namespace nix::fetchers {
|
||||||
|
|
||||||
InputCache::CachedResult InputCache::getAccessor(
|
InputCache::CachedResult InputCache::getAccessor(
|
||||||
const Settings & settings, ref<Store> store, const Input & originalInput, UseRegistries useRegistries)
|
const Settings & settings, Store & store, const Input & originalInput, UseRegistries useRegistries)
|
||||||
{
|
{
|
||||||
auto fetched = lookup(originalInput);
|
auto fetched = lookup(originalInput);
|
||||||
Input resolvedInput = originalInput;
|
Input resolvedInput = originalInput;
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,7 @@ struct MercurialInputScheme : InputScheme
|
||||||
return {isLocal, isLocal ? renderUrlPathEnsureLegal(url.path) : url.to_string()};
|
return {isLocal, isLocal ? renderUrlPathEnsureLegal(url.path) : url.to_string()};
|
||||||
}
|
}
|
||||||
|
|
||||||
StorePath fetchToStore(const Settings & settings, ref<Store> store, Input & input) const
|
StorePath fetchToStore(const Settings & settings, Store & store, Input & input) const
|
||||||
{
|
{
|
||||||
auto origRev = input.getRev();
|
auto origRev = input.getRev();
|
||||||
|
|
||||||
|
|
@ -205,7 +205,7 @@ struct MercurialInputScheme : InputScheme
|
||||||
return files.count(file);
|
return files.count(file);
|
||||||
};
|
};
|
||||||
|
|
||||||
auto storePath = store->addToStore(
|
auto storePath = store.addToStore(
|
||||||
input.getName(),
|
input.getName(),
|
||||||
{getFSSourceAccessor(), CanonPath(actualPath)},
|
{getFSSourceAccessor(), CanonPath(actualPath)},
|
||||||
ContentAddressMethod::Raw::NixArchive,
|
ContentAddressMethod::Raw::NixArchive,
|
||||||
|
|
@ -226,7 +226,7 @@ struct MercurialInputScheme : InputScheme
|
||||||
"Hash '%s' is not supported by Mercurial. Only sha1 is supported.",
|
"Hash '%s' is not supported by Mercurial. Only sha1 is supported.",
|
||||||
rev.to_string(HashFormat::Base16, true));
|
rev.to_string(HashFormat::Base16, true));
|
||||||
|
|
||||||
return Cache::Key{"hgRev", {{"store", store->storeDir}, {"name", name}, {"rev", input.getRev()->gitRev()}}};
|
return Cache::Key{"hgRev", {{"store", store.storeDir}, {"name", name}, {"rev", input.getRev()->gitRev()}}};
|
||||||
};
|
};
|
||||||
|
|
||||||
auto makeResult = [&](const Attrs & infoAttrs, const StorePath & storePath) -> StorePath {
|
auto makeResult = [&](const Attrs & infoAttrs, const StorePath & storePath) -> StorePath {
|
||||||
|
|
@ -246,7 +246,7 @@ struct MercurialInputScheme : InputScheme
|
||||||
|
|
||||||
/* If we have a rev, check if we have a cached store path. */
|
/* If we have a rev, check if we have a cached store path. */
|
||||||
if (auto rev = input.getRev()) {
|
if (auto rev = input.getRev()) {
|
||||||
if (auto res = settings.getCache()->lookupStorePath(revInfoKey(*rev), *store))
|
if (auto res = settings.getCache()->lookupStorePath(revInfoKey(*rev), store))
|
||||||
return makeResult(res->value, res->storePath);
|
return makeResult(res->value, res->storePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -300,7 +300,7 @@ struct MercurialInputScheme : InputScheme
|
||||||
|
|
||||||
/* Now that we have the rev, check the cache again for a
|
/* Now that we have the rev, check the cache again for a
|
||||||
cached store path. */
|
cached store path. */
|
||||||
if (auto res = settings.getCache()->lookupStorePath(revInfoKey(rev), *store))
|
if (auto res = settings.getCache()->lookupStorePath(revInfoKey(rev), store))
|
||||||
return makeResult(res->value, res->storePath);
|
return makeResult(res->value, res->storePath);
|
||||||
|
|
||||||
Path tmpDir = createTempDir();
|
Path tmpDir = createTempDir();
|
||||||
|
|
@ -310,7 +310,7 @@ struct MercurialInputScheme : InputScheme
|
||||||
|
|
||||||
deletePath(tmpDir + "/.hg_archival.txt");
|
deletePath(tmpDir + "/.hg_archival.txt");
|
||||||
|
|
||||||
auto storePath = store->addToStore(name, {getFSSourceAccessor(), CanonPath(tmpDir)});
|
auto storePath = store.addToStore(name, {getFSSourceAccessor(), CanonPath(tmpDir)});
|
||||||
|
|
||||||
Attrs infoAttrs({
|
Attrs infoAttrs({
|
||||||
{"revCount", (uint64_t) revCount},
|
{"revCount", (uint64_t) revCount},
|
||||||
|
|
@ -319,18 +319,18 @@ struct MercurialInputScheme : InputScheme
|
||||||
if (!origRev)
|
if (!origRev)
|
||||||
settings.getCache()->upsert(refToRevKey, {{"rev", rev.gitRev()}});
|
settings.getCache()->upsert(refToRevKey, {{"rev", rev.gitRev()}});
|
||||||
|
|
||||||
settings.getCache()->upsert(revInfoKey(rev), *store, infoAttrs, storePath);
|
settings.getCache()->upsert(revInfoKey(rev), store, infoAttrs, storePath);
|
||||||
|
|
||||||
return makeResult(infoAttrs, std::move(storePath));
|
return makeResult(infoAttrs, std::move(storePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & _input) const override
|
getAccessor(const Settings & settings, Store & store, const Input & _input) const override
|
||||||
{
|
{
|
||||||
Input input(_input);
|
Input input(_input);
|
||||||
|
|
||||||
auto storePath = fetchToStore(settings, store, input);
|
auto storePath = fetchToStore(settings, store, input);
|
||||||
auto accessor = store->requireStoreObjectAccessor(storePath);
|
auto accessor = store.requireStoreObjectAccessor(storePath);
|
||||||
|
|
||||||
accessor->setPathDisplay("«" + input.to_string() + "»");
|
accessor->setPathDisplay("«" + input.to_string() + "»");
|
||||||
|
|
||||||
|
|
@ -342,7 +342,7 @@ struct MercurialInputScheme : InputScheme
|
||||||
return (bool) input.getRev();
|
return (bool) input.getRev();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string> getFingerprint(ref<Store> store, const Input & input) const override
|
std::optional<std::string> getFingerprint(Store & store, const Input & input) const override
|
||||||
{
|
{
|
||||||
if (auto rev = input.getRev())
|
if (auto rev = input.getRev())
|
||||||
return rev->gitRev();
|
return rev->gitRev();
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ struct PathInputScheme : InputScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & _input) const override
|
getAccessor(const Settings & settings, Store & store, const Input & _input) const override
|
||||||
{
|
{
|
||||||
Input input(_input);
|
Input input(_input);
|
||||||
auto path = getStrAttr(input.attrs, "path");
|
auto path = getStrAttr(input.attrs, "path");
|
||||||
|
|
@ -125,31 +125,31 @@ struct PathInputScheme : InputScheme
|
||||||
auto absPath = getAbsPath(input);
|
auto absPath = getAbsPath(input);
|
||||||
|
|
||||||
// FIXME: check whether access to 'path' is allowed.
|
// FIXME: check whether access to 'path' is allowed.
|
||||||
auto storePath = store->maybeParseStorePath(absPath.string());
|
auto storePath = store.maybeParseStorePath(absPath.string());
|
||||||
|
|
||||||
if (storePath)
|
if (storePath)
|
||||||
store->addTempRoot(*storePath);
|
store.addTempRoot(*storePath);
|
||||||
|
|
||||||
time_t mtime = 0;
|
time_t mtime = 0;
|
||||||
if (!storePath || storePath->name() != "source" || !store->isValidPath(*storePath)) {
|
if (!storePath || storePath->name() != "source" || !store.isValidPath(*storePath)) {
|
||||||
Activity act(*logger, lvlTalkative, actUnknown, fmt("copying %s to the store", absPath));
|
Activity act(*logger, lvlTalkative, actUnknown, fmt("copying %s to the store", absPath));
|
||||||
// FIXME: try to substitute storePath.
|
// FIXME: try to substitute storePath.
|
||||||
auto src = sinkToSource(
|
auto src = sinkToSource(
|
||||||
[&](Sink & sink) { mtime = dumpPathAndGetMtime(absPath.string(), sink, defaultPathFilter); });
|
[&](Sink & sink) { mtime = dumpPathAndGetMtime(absPath.string(), sink, defaultPathFilter); });
|
||||||
storePath = store->addToStoreFromDump(*src, "source");
|
storePath = store.addToStoreFromDump(*src, "source");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto accessor = store->requireStoreObjectAccessor(*storePath);
|
auto accessor = store.requireStoreObjectAccessor(*storePath);
|
||||||
|
|
||||||
// To prevent `fetchToStore()` copying the path again to Nix
|
// To prevent `fetchToStore()` copying the path again to Nix
|
||||||
// store, pre-create an entry in the fetcher cache.
|
// store, pre-create an entry in the fetcher cache.
|
||||||
auto info = store->queryPathInfo(*storePath);
|
auto info = store.queryPathInfo(*storePath);
|
||||||
accessor->fingerprint =
|
accessor->fingerprint =
|
||||||
fmt("path:%s", store->queryPathInfo(*storePath)->narHash.to_string(HashFormat::SRI, true));
|
fmt("path:%s", store.queryPathInfo(*storePath)->narHash.to_string(HashFormat::SRI, true));
|
||||||
settings.getCache()->upsert(
|
settings.getCache()->upsert(
|
||||||
makeFetchToStoreCacheKey(
|
makeFetchToStoreCacheKey(
|
||||||
input.getName(), *accessor->fingerprint, ContentAddressMethod::Raw::NixArchive, "/"),
|
input.getName(), *accessor->fingerprint, ContentAddressMethod::Raw::NixArchive, "/"),
|
||||||
*store,
|
store,
|
||||||
{},
|
{},
|
||||||
*storePath);
|
*storePath);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,7 @@ void overrideRegistry(const Settings & settings, const Input & from, const Input
|
||||||
getFlagRegistry(settings)->add(from, to, extraAttrs);
|
getFlagRegistry(settings)->add(from, to, extraAttrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::shared_ptr<Registry> getGlobalRegistry(const Settings & settings, ref<Store> store)
|
static std::shared_ptr<Registry> getGlobalRegistry(const Settings & settings, Store & store)
|
||||||
{
|
{
|
||||||
static auto reg = [&]() {
|
static auto reg = [&]() {
|
||||||
auto path = settings.flakeRegistry.get();
|
auto path = settings.flakeRegistry.get();
|
||||||
|
|
@ -149,9 +149,9 @@ static std::shared_ptr<Registry> getGlobalRegistry(const Settings & settings, re
|
||||||
[&] -> SourcePath {
|
[&] -> SourcePath {
|
||||||
if (!isAbsolute(path)) {
|
if (!isAbsolute(path)) {
|
||||||
auto storePath = downloadFile(store, settings, path, "flake-registry.json").storePath;
|
auto storePath = downloadFile(store, settings, path, "flake-registry.json").storePath;
|
||||||
if (auto store2 = store.dynamic_pointer_cast<LocalFSStore>())
|
if (auto store2 = dynamic_cast<LocalFSStore *>(&store))
|
||||||
store2->addPermRoot(storePath, getCacheDir() + "/flake-registry.json");
|
store2->addPermRoot(storePath, getCacheDir() + "/flake-registry.json");
|
||||||
return {store->requireStoreObjectAccessor(storePath)};
|
return {store.requireStoreObjectAccessor(storePath)};
|
||||||
} else {
|
} else {
|
||||||
return SourcePath{getFSSourceAccessor(), CanonPath{path}}.resolveSymlinks();
|
return SourcePath{getFSSourceAccessor(), CanonPath{path}}.resolveSymlinks();
|
||||||
}
|
}
|
||||||
|
|
@ -162,7 +162,7 @@ static std::shared_ptr<Registry> getGlobalRegistry(const Settings & settings, re
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
Registries getRegistries(const Settings & settings, ref<Store> store)
|
Registries getRegistries(const Settings & settings, Store & store)
|
||||||
{
|
{
|
||||||
Registries registries;
|
Registries registries;
|
||||||
registries.push_back(getFlagRegistry(settings));
|
registries.push_back(getFlagRegistry(settings));
|
||||||
|
|
@ -173,7 +173,7 @@ Registries getRegistries(const Settings & settings, ref<Store> store)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<Input, Attrs>
|
std::pair<Input, Attrs>
|
||||||
lookupInRegistries(const Settings & settings, ref<Store> store, const Input & _input, UseRegistries useRegistries)
|
lookupInRegistries(const Settings & settings, Store & store, const Input & _input, UseRegistries useRegistries)
|
||||||
{
|
{
|
||||||
Attrs extraAttrs;
|
Attrs extraAttrs;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
namespace nix::fetchers {
|
namespace nix::fetchers {
|
||||||
|
|
||||||
DownloadFileResult downloadFile(
|
DownloadFileResult downloadFile(
|
||||||
ref<Store> store,
|
Store & store,
|
||||||
const Settings & settings,
|
const Settings & settings,
|
||||||
const std::string & url,
|
const std::string & url,
|
||||||
const std::string & name,
|
const std::string & name,
|
||||||
|
|
@ -28,7 +28,7 @@ DownloadFileResult downloadFile(
|
||||||
{"name", name},
|
{"name", name},
|
||||||
}}};
|
}}};
|
||||||
|
|
||||||
auto cached = settings.getCache()->lookupStorePath(key, *store);
|
auto cached = settings.getCache()->lookupStorePath(key, store);
|
||||||
|
|
||||||
auto useCached = [&]() -> DownloadFileResult {
|
auto useCached = [&]() -> DownloadFileResult {
|
||||||
return {
|
return {
|
||||||
|
|
@ -74,7 +74,7 @@ DownloadFileResult downloadFile(
|
||||||
dumpString(res.data, sink);
|
dumpString(res.data, sink);
|
||||||
auto hash = hashString(HashAlgorithm::SHA256, res.data);
|
auto hash = hashString(HashAlgorithm::SHA256, res.data);
|
||||||
auto info = ValidPathInfo::makeFromCA(
|
auto info = ValidPathInfo::makeFromCA(
|
||||||
*store,
|
store,
|
||||||
name,
|
name,
|
||||||
FixedOutputInfo{
|
FixedOutputInfo{
|
||||||
.method = FileIngestionMethod::Flat,
|
.method = FileIngestionMethod::Flat,
|
||||||
|
|
@ -84,7 +84,7 @@ DownloadFileResult downloadFile(
|
||||||
hashString(HashAlgorithm::SHA256, sink.s));
|
hashString(HashAlgorithm::SHA256, sink.s));
|
||||||
info.narSize = sink.s.size();
|
info.narSize = sink.s.size();
|
||||||
auto source = StringSource{sink.s};
|
auto source = StringSource{sink.s};
|
||||||
store->addToStore(info, source, NoRepair, NoCheckSigs);
|
store.addToStore(info, source, NoRepair, NoCheckSigs);
|
||||||
storePath = std::move(info.path);
|
storePath = std::move(info.path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,7 +93,7 @@ DownloadFileResult downloadFile(
|
||||||
key.second.insert_or_assign("url", url);
|
key.second.insert_or_assign("url", url);
|
||||||
assert(!res.urls.empty());
|
assert(!res.urls.empty());
|
||||||
infoAttrs.insert_or_assign("url", *res.urls.rbegin());
|
infoAttrs.insert_or_assign("url", *res.urls.rbegin());
|
||||||
settings.getCache()->upsert(key, *store, infoAttrs, *storePath);
|
settings.getCache()->upsert(key, store, infoAttrs, *storePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
@ -214,7 +214,7 @@ static DownloadTarballResult downloadTarball_(
|
||||||
return attrsToResult(infoAttrs);
|
return attrsToResult(infoAttrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
ref<SourceAccessor> downloadTarball(ref<Store> store, const Settings & settings, const std::string & url)
|
ref<SourceAccessor> downloadTarball(Store & store, const Settings & settings, const std::string & url)
|
||||||
{
|
{
|
||||||
/* Go through Input::getAccessor() to ensure that the resulting
|
/* Go through Input::getAccessor() to ensure that the resulting
|
||||||
accessor has a fingerprint. */
|
accessor has a fingerprint. */
|
||||||
|
|
@ -341,7 +341,7 @@ struct FileInputScheme : CurlInputScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & _input) const override
|
getAccessor(const Settings & settings, Store & store, const Input & _input) const override
|
||||||
{
|
{
|
||||||
auto input(_input);
|
auto input(_input);
|
||||||
|
|
||||||
|
|
@ -351,10 +351,10 @@ struct FileInputScheme : CurlInputScheme
|
||||||
tarballs. */
|
tarballs. */
|
||||||
auto file = downloadFile(store, settings, getStrAttr(input.attrs, "url"), input.getName());
|
auto file = downloadFile(store, settings, getStrAttr(input.attrs, "url"), input.getName());
|
||||||
|
|
||||||
auto narHash = store->queryPathInfo(file.storePath)->narHash;
|
auto narHash = store.queryPathInfo(file.storePath)->narHash;
|
||||||
input.attrs.insert_or_assign("narHash", narHash.to_string(HashFormat::SRI, true));
|
input.attrs.insert_or_assign("narHash", narHash.to_string(HashFormat::SRI, true));
|
||||||
|
|
||||||
auto accessor = ref{store->getFSAccessor(file.storePath)};
|
auto accessor = ref{store.getFSAccessor(file.storePath)};
|
||||||
|
|
||||||
accessor->setPathDisplay("«" + input.to_string() + "»");
|
accessor->setPathDisplay("«" + input.to_string() + "»");
|
||||||
|
|
||||||
|
|
@ -379,7 +379,7 @@ struct TarballInputScheme : CurlInputScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, Input>
|
std::pair<ref<SourceAccessor>, Input>
|
||||||
getAccessor(const Settings & settings, ref<Store> store, const Input & _input) const override
|
getAccessor(const Settings & settings, Store & store, const Input & _input) const override
|
||||||
{
|
{
|
||||||
auto input(_input);
|
auto input(_input);
|
||||||
|
|
||||||
|
|
@ -404,7 +404,7 @@ struct TarballInputScheme : CurlInputScheme
|
||||||
return {result.accessor, input};
|
return {result.accessor, input};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string> getFingerprint(ref<Store> store, const Input & input) const override
|
std::optional<std::string> getFingerprint(Store & store, const Input & input) const override
|
||||||
{
|
{
|
||||||
if (auto narHash = input.getNarHash())
|
if (auto narHash = input.getNarHash())
|
||||||
return narHash->to_string(HashFormat::SRI, true);
|
return narHash->to_string(HashFormat::SRI, true);
|
||||||
|
|
|
||||||
|
|
@ -373,7 +373,7 @@ static Flake getFlake(
|
||||||
{
|
{
|
||||||
// Fetch a lazy tree first.
|
// Fetch a lazy tree first.
|
||||||
auto cachedInput =
|
auto cachedInput =
|
||||||
state.inputCache->getAccessor(state.fetchSettings, state.store, originalRef.input, useRegistries);
|
state.inputCache->getAccessor(state.fetchSettings, *state.store, originalRef.input, useRegistries);
|
||||||
|
|
||||||
auto subdir = fetchers::maybeGetStrAttr(cachedInput.extraAttrs, "dir").value_or(originalRef.subdir);
|
auto subdir = fetchers::maybeGetStrAttr(cachedInput.extraAttrs, "dir").value_or(originalRef.subdir);
|
||||||
auto resolvedRef = FlakeRef(std::move(cachedInput.resolvedInput), subdir);
|
auto resolvedRef = FlakeRef(std::move(cachedInput.resolvedInput), subdir);
|
||||||
|
|
@ -390,7 +390,7 @@ static Flake getFlake(
|
||||||
// FIXME: need to remove attrs that are invalidated by the changed input attrs, such as 'narHash'.
|
// FIXME: need to remove attrs that are invalidated by the changed input attrs, such as 'narHash'.
|
||||||
newLockedRef.input.attrs.erase("narHash");
|
newLockedRef.input.attrs.erase("narHash");
|
||||||
auto cachedInput2 = state.inputCache->getAccessor(
|
auto cachedInput2 = state.inputCache->getAccessor(
|
||||||
state.fetchSettings, state.store, newLockedRef.input, fetchers::UseRegistries::No);
|
state.fetchSettings, *state.store, newLockedRef.input, fetchers::UseRegistries::No);
|
||||||
cachedInput.accessor = cachedInput2.accessor;
|
cachedInput.accessor = cachedInput2.accessor;
|
||||||
lockedRef = FlakeRef(std::move(cachedInput2.lockedInput), newLockedRef.subdir);
|
lockedRef = FlakeRef(std::move(cachedInput2.lockedInput), newLockedRef.subdir);
|
||||||
}
|
}
|
||||||
|
|
@ -756,7 +756,7 @@ lockFlake(const Settings & settings, EvalState & state, const FlakeRef & topRef,
|
||||||
return {*resolvedPath, *input.ref};
|
return {*resolvedPath, *input.ref};
|
||||||
} else {
|
} else {
|
||||||
auto cachedInput = state.inputCache->getAccessor(
|
auto cachedInput = state.inputCache->getAccessor(
|
||||||
state.fetchSettings, state.store, input.ref->input, useRegistriesInputs);
|
state.fetchSettings, *state.store, input.ref->input, useRegistriesInputs);
|
||||||
|
|
||||||
auto lockedRef = FlakeRef(std::move(cachedInput.lockedInput), input.ref->subdir);
|
auto lockedRef = FlakeRef(std::move(cachedInput.lockedInput), input.ref->subdir);
|
||||||
|
|
||||||
|
|
@ -975,7 +975,7 @@ void callFlake(EvalState & state, const LockedFlake & lockedFlake, Value & vRes)
|
||||||
state.callFunction(*vCallFlake, args, vRes, noPos);
|
state.callFunction(*vCallFlake, args, vRes, noPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<Fingerprint> LockedFlake::getFingerprint(ref<Store> store, const fetchers::Settings & fetchSettings) const
|
std::optional<Fingerprint> LockedFlake::getFingerprint(Store & store, const fetchers::Settings & fetchSettings) const
|
||||||
{
|
{
|
||||||
if (lockFile.isUnlocked(fetchSettings))
|
if (lockFile.isUnlocked(fetchSettings))
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
|
|
@ -1005,7 +1005,7 @@ Flake::~Flake() {}
|
||||||
ref<eval_cache::EvalCache> openEvalCache(EvalState & state, ref<const LockedFlake> lockedFlake)
|
ref<eval_cache::EvalCache> openEvalCache(EvalState & state, ref<const LockedFlake> lockedFlake)
|
||||||
{
|
{
|
||||||
auto fingerprint = state.settings.useEvalCache && state.settings.pureEval
|
auto fingerprint = state.settings.useEvalCache && state.settings.pureEval
|
||||||
? lockedFlake->getFingerprint(state.store, state.fetchSettings)
|
? lockedFlake->getFingerprint(*state.store, state.fetchSettings)
|
||||||
: std::nullopt;
|
: std::nullopt;
|
||||||
auto rootLoader = [&state, lockedFlake]() {
|
auto rootLoader = [&state, lockedFlake]() {
|
||||||
/* For testing whether the evaluation cache is
|
/* For testing whether the evaluation cache is
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,8 @@ std::ostream & operator<<(std::ostream & str, const FlakeRef & flakeRef)
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
FlakeRef FlakeRef::resolve(
|
FlakeRef
|
||||||
const fetchers::Settings & fetchSettings, ref<Store> store, fetchers::UseRegistries useRegistries) const
|
FlakeRef::resolve(const fetchers::Settings & fetchSettings, Store & store, fetchers::UseRegistries useRegistries) const
|
||||||
{
|
{
|
||||||
auto [input2, extraAttrs] = lookupInRegistries(fetchSettings, store, input, useRegistries);
|
auto [input2, extraAttrs] = lookupInRegistries(fetchSettings, store, input, useRegistries);
|
||||||
return FlakeRef(std::move(input2), fetchers::maybeGetStrAttr(extraAttrs, "dir").value_or(subdir));
|
return FlakeRef(std::move(input2), fetchers::maybeGetStrAttr(extraAttrs, "dir").value_or(subdir));
|
||||||
|
|
@ -289,7 +289,7 @@ FlakeRef FlakeRef::fromAttrs(const fetchers::Settings & fetchSettings, const fet
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, FlakeRef>
|
std::pair<ref<SourceAccessor>, FlakeRef>
|
||||||
FlakeRef::lazyFetch(const fetchers::Settings & fetchSettings, ref<Store> store) const
|
FlakeRef::lazyFetch(const fetchers::Settings & fetchSettings, Store & store) const
|
||||||
{
|
{
|
||||||
auto [accessor, lockedInput] = input.getAccessor(fetchSettings, store);
|
auto [accessor, lockedInput] = input.getAccessor(fetchSettings, store);
|
||||||
return {accessor, FlakeRef(std::move(lockedInput), subdir)};
|
return {accessor, FlakeRef(std::move(lockedInput), subdir)};
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@ struct LockedFlake
|
||||||
*/
|
*/
|
||||||
std::map<ref<Node>, SourcePath> nodePaths;
|
std::map<ref<Node>, SourcePath> nodePaths;
|
||||||
|
|
||||||
std::optional<Fingerprint> getFingerprint(ref<Store> store, const fetchers::Settings & fetchSettings) const;
|
std::optional<Fingerprint> getFingerprint(Store & store, const fetchers::Settings & fetchSettings) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct LockFlags
|
struct LockFlags
|
||||||
|
|
|
||||||
|
|
@ -73,13 +73,12 @@ struct FlakeRef
|
||||||
|
|
||||||
FlakeRef resolve(
|
FlakeRef resolve(
|
||||||
const fetchers::Settings & fetchSettings,
|
const fetchers::Settings & fetchSettings,
|
||||||
ref<Store> store,
|
Store & store,
|
||||||
fetchers::UseRegistries useRegistries = fetchers::UseRegistries::All) const;
|
fetchers::UseRegistries useRegistries = fetchers::UseRegistries::All) const;
|
||||||
|
|
||||||
static FlakeRef fromAttrs(const fetchers::Settings & fetchSettings, const fetchers::Attrs & attrs);
|
static FlakeRef fromAttrs(const fetchers::Settings & fetchSettings, const fetchers::Attrs & attrs);
|
||||||
|
|
||||||
std::pair<ref<SourceAccessor>, FlakeRef>
|
std::pair<ref<SourceAccessor>, FlakeRef> lazyFetch(const fetchers::Settings & fetchSettings, Store & store) const;
|
||||||
lazyFetch(const fetchers::Settings & fetchSettings, ref<Store> store) const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Canonicalize a flakeref for the purpose of comparing "old" and
|
* Canonicalize a flakeref for the purpose of comparing "old" and
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ struct CmdFlakePrefetchInputs : FlakeCommand
|
||||||
if (auto lockedNode = dynamic_cast<const LockedNode *>(&node)) {
|
if (auto lockedNode = dynamic_cast<const LockedNode *>(&node)) {
|
||||||
try {
|
try {
|
||||||
Activity act(*logger, lvlInfo, actUnknown, fmt("fetching '%s'", lockedNode->lockedRef));
|
Activity act(*logger, lvlInfo, actUnknown, fmt("fetching '%s'", lockedNode->lockedRef));
|
||||||
auto accessor = lockedNode->lockedRef.input.getAccessor(fetchSettings, store).first;
|
auto accessor = lockedNode->lockedRef.input.getAccessor(fetchSettings, *store).first;
|
||||||
fetchToStore(
|
fetchToStore(
|
||||||
fetchSettings, *store, accessor, FetchMode::Copy, lockedNode->lockedRef.input.getName());
|
fetchSettings, *store, accessor, FetchMode::Copy, lockedNode->lockedRef.input.getName());
|
||||||
} catch (Error & e) {
|
} catch (Error & e) {
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ struct CmdFlakeMetadata : FlakeCommand, MixJSON
|
||||||
j["lastModified"] = *lastModified;
|
j["lastModified"] = *lastModified;
|
||||||
j["path"] = storePath;
|
j["path"] = storePath;
|
||||||
j["locks"] = lockedFlake.lockFile.toJSON().first;
|
j["locks"] = lockedFlake.lockFile.toJSON().first;
|
||||||
if (auto fingerprint = lockedFlake.getFingerprint(store, fetchSettings))
|
if (auto fingerprint = lockedFlake.getFingerprint(*store, fetchSettings))
|
||||||
j["fingerprint"] = fingerprint->to_string(HashFormat::Base16, false);
|
j["fingerprint"] = fingerprint->to_string(HashFormat::Base16, false);
|
||||||
printJSON(j);
|
printJSON(j);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -260,7 +260,7 @@ struct CmdFlakeMetadata : FlakeCommand, MixJSON
|
||||||
logger->cout(
|
logger->cout(
|
||||||
ANSI_BOLD "Last modified:" ANSI_NORMAL " %s",
|
ANSI_BOLD "Last modified:" ANSI_NORMAL " %s",
|
||||||
std::put_time(std::localtime(&*lastModified), "%F %T"));
|
std::put_time(std::localtime(&*lastModified), "%F %T"));
|
||||||
if (auto fingerprint = lockedFlake.getFingerprint(store, fetchSettings))
|
if (auto fingerprint = lockedFlake.getFingerprint(*store, fetchSettings))
|
||||||
logger->cout(
|
logger->cout(
|
||||||
ANSI_BOLD "Fingerprint:" ANSI_NORMAL " %s", fingerprint->to_string(HashFormat::Base16, false));
|
ANSI_BOLD "Fingerprint:" ANSI_NORMAL " %s", fingerprint->to_string(HashFormat::Base16, false));
|
||||||
|
|
||||||
|
|
@ -1049,7 +1049,7 @@ struct CmdFlakeClone : FlakeCommand
|
||||||
if (destDir.empty())
|
if (destDir.empty())
|
||||||
throw Error("missing flag '--dest'");
|
throw Error("missing flag '--dest'");
|
||||||
|
|
||||||
getFlakeRef().resolve(fetchSettings, store).input.clone(fetchSettings, store, destDir);
|
getFlakeRef().resolve(fetchSettings, *store).input.clone(fetchSettings, *store, destDir);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1100,7 +1100,7 @@ struct CmdFlakeArchive : FlakeCommand, MixJSON, MixDryRun, MixNoCheckSigs
|
||||||
std::optional<StorePath> storePath;
|
std::optional<StorePath> storePath;
|
||||||
if (!(*inputNode)->lockedRef.input.isRelative()) {
|
if (!(*inputNode)->lockedRef.input.isRelative()) {
|
||||||
storePath = dryRun ? (*inputNode)->lockedRef.input.computeStorePath(*store)
|
storePath = dryRun ? (*inputNode)->lockedRef.input.computeStorePath(*store)
|
||||||
: (*inputNode)->lockedRef.input.fetchToStore(fetchSettings, store).first;
|
: (*inputNode)->lockedRef.input.fetchToStore(fetchSettings, *store).first;
|
||||||
sources.insert(*storePath);
|
sources.insert(*storePath);
|
||||||
}
|
}
|
||||||
if (json) {
|
if (json) {
|
||||||
|
|
@ -1498,8 +1498,8 @@ struct CmdFlakePrefetch : FlakeCommand, MixJSON
|
||||||
void run(ref<Store> store) override
|
void run(ref<Store> store) override
|
||||||
{
|
{
|
||||||
auto originalRef = getFlakeRef();
|
auto originalRef = getFlakeRef();
|
||||||
auto resolvedRef = originalRef.resolve(fetchSettings, store);
|
auto resolvedRef = originalRef.resolve(fetchSettings, *store);
|
||||||
auto [accessor, lockedRef] = resolvedRef.lazyFetch(getEvalState()->fetchSettings, store);
|
auto [accessor, lockedRef] = resolvedRef.lazyFetch(getEvalState()->fetchSettings, *store);
|
||||||
auto storePath =
|
auto storePath =
|
||||||
fetchToStore(getEvalState()->fetchSettings, *store, accessor, FetchMode::Copy, lockedRef.input.getName());
|
fetchToStore(getEvalState()->fetchSettings, *store, accessor, FetchMode::Copy, lockedRef.input.getName());
|
||||||
auto hash = store->queryPathInfo(storePath)->narHash;
|
auto hash = store->queryPathInfo(storePath)->narHash;
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ static void update(const StringSet & channelNames)
|
||||||
// We want to download the url to a file to see if it's a tarball while also checking if we
|
// We want to download the url to a file to see if it's a tarball while also checking if we
|
||||||
// got redirected in the process, so that we can grab the various parts of a nix channel
|
// got redirected in the process, so that we can grab the various parts of a nix channel
|
||||||
// definition from a consistent location if the redirect changes mid-download.
|
// definition from a consistent location if the redirect changes mid-download.
|
||||||
auto result = fetchers::downloadFile(store, fetchSettings, url, std::string(baseNameOf(url)));
|
auto result = fetchers::downloadFile(*store, fetchSettings, url, std::string(baseNameOf(url)));
|
||||||
url = result.effectiveUrl;
|
url = result.effectiveUrl;
|
||||||
|
|
||||||
bool unpacked = false;
|
bool unpacked = false;
|
||||||
|
|
@ -139,10 +139,10 @@ static void update(const StringSet & channelNames)
|
||||||
if (!unpacked) {
|
if (!unpacked) {
|
||||||
// Download the channel tarball.
|
// Download the channel tarball.
|
||||||
try {
|
try {
|
||||||
result = fetchers::downloadFile(store, fetchSettings, url + "/nixexprs.tar.xz", "nixexprs.tar.xz");
|
result = fetchers::downloadFile(*store, fetchSettings, url + "/nixexprs.tar.xz", "nixexprs.tar.xz");
|
||||||
} catch (FileTransferError & e) {
|
} catch (FileTransferError & e) {
|
||||||
result =
|
result =
|
||||||
fetchers::downloadFile(store, fetchSettings, url + "/nixexprs.tar.bz2", "nixexprs.tar.bz2");
|
fetchers::downloadFile(*store, fetchSettings, url + "/nixexprs.tar.bz2", "nixexprs.tar.bz2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Regardless of where it came from, add the expression representing this channel to accumulated expression
|
// Regardless of where it came from, add the expression representing this channel to accumulated expression
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ struct CmdRegistryList : StoreCommand
|
||||||
{
|
{
|
||||||
using namespace fetchers;
|
using namespace fetchers;
|
||||||
|
|
||||||
auto registries = getRegistries(fetchSettings, store);
|
auto registries = getRegistries(fetchSettings, *store);
|
||||||
|
|
||||||
for (auto & registry : registries) {
|
for (auto & registry : registries) {
|
||||||
for (auto & entry : registry->entries) {
|
for (auto & entry : registry->entries) {
|
||||||
|
|
@ -189,8 +189,8 @@ struct CmdRegistryPin : RegistryCommand, EvalCommand
|
||||||
auto registry = getRegistry();
|
auto registry = getRegistry();
|
||||||
auto ref = parseFlakeRef(fetchSettings, url);
|
auto ref = parseFlakeRef(fetchSettings, url);
|
||||||
auto lockedRef = parseFlakeRef(fetchSettings, locked);
|
auto lockedRef = parseFlakeRef(fetchSettings, locked);
|
||||||
auto resolvedInput = lockedRef.resolve(fetchSettings, store).input;
|
auto resolvedInput = lockedRef.resolve(fetchSettings, *store).input;
|
||||||
auto resolved = resolvedInput.getAccessor(fetchSettings, store).second;
|
auto resolved = resolvedInput.getAccessor(fetchSettings, *store).second;
|
||||||
if (!resolved.isLocked(fetchSettings))
|
if (!resolved.isLocked(fetchSettings))
|
||||||
warn("flake '%s' is not locked", resolved.to_string());
|
warn("flake '%s' is not locked", resolved.to_string());
|
||||||
fetchers::Attrs extraAttrs;
|
fetchers::Attrs extraAttrs;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue