Merge pull request #10654 from edolstra/rename-input-accessor

Rename remaining instances of "InputAccessor" to "SourceAccessor"
This commit is contained in:
John Ericson 2024-05-06 11:56:00 -04:00 committed by GitHub
commit 79f03b794c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 72 additions and 72 deletions

View file

@ -113,15 +113,15 @@
''^src/libfetchers/fetch-to-store\.cc$'' ''^src/libfetchers/fetch-to-store\.cc$''
''^src/libfetchers/fetchers\.cc$'' ''^src/libfetchers/fetchers\.cc$''
''^src/libfetchers/fetchers\.hh$'' ''^src/libfetchers/fetchers\.hh$''
''^src/libfetchers/filtering-input-accessor\.cc$'' ''^src/libfetchers/filtering-source-accessor\.cc$''
''^src/libfetchers/filtering-input-accessor\.hh$'' ''^src/libfetchers/filtering-source-accessor\.hh$''
''^src/libfetchers/fs-input-accessor\.cc$'' ''^src/libfetchers/fs-source-accessor\.cc$''
''^src/libfetchers/fs-input-accessor\.hh$'' ''^src/libfetchers/fs-source-accessor\.hh$''
''^src/libfetchers/git-utils\.cc$'' ''^src/libfetchers/git-utils\.cc$''
''^src/libfetchers/git-utils\.hh$'' ''^src/libfetchers/git-utils\.hh$''
''^src/libfetchers/github\.cc$'' ''^src/libfetchers/github\.cc$''
''^src/libfetchers/indirect\.cc$'' ''^src/libfetchers/indirect\.cc$''
''^src/libfetchers/memory-input-accessor\.cc$'' ''^src/libfetchers/memory-source-accessor\.cc$''
''^src/libfetchers/path\.cc$'' ''^src/libfetchers/path\.cc$''
''^src/libfetchers/registry\.cc$'' ''^src/libfetchers/registry\.cc$''
''^src/libfetchers/registry\.hh$'' ''^src/libfetchers/registry\.hh$''
@ -302,7 +302,7 @@
''^src/libutil/hash\.hh$'' ''^src/libutil/hash\.hh$''
''^src/libutil/hilite\.cc$'' ''^src/libutil/hilite\.cc$''
''^src/libutil/hilite\.hh$'' ''^src/libutil/hilite\.hh$''
''^src/libutil/input-accessor\.hh$'' ''^src/libutil/source-accessor\.hh$''
''^src/libutil/json-impls\.hh$'' ''^src/libutil/json-impls\.hh$''
''^src/libutil/json-utils\.cc$'' ''^src/libutil/json-utils\.cc$''
''^src/libutil/json-utils\.hh$'' ''^src/libutil/json-utils\.hh$''

View file

@ -15,7 +15,7 @@
#include "function-trace.hh" #include "function-trace.hh"
#include "profiles.hh" #include "profiles.hh"
#include "print.hh" #include "print.hh"
#include "filtering-input-accessor.hh" #include "filtering-source-accessor.hh"
#include "memory-source-accessor.hh" #include "memory-source-accessor.hh"
#include "signals.hh" #include "signals.hh"
#include "gc-small-vector.hh" #include "gc-small-vector.hh"
@ -399,7 +399,7 @@ EvalState::EvalState(
, emptyBindings(0) , emptyBindings(0)
, rootFS( , rootFS(
evalSettings.restrictEval || evalSettings.pureEval evalSettings.restrictEval || evalSettings.pureEval
? ref<SourceAccessor>(AllowListInputAccessor::create(makeFSSourceAccessor(), {}, ? ref<SourceAccessor>(AllowListSourceAccessor::create(makeFSSourceAccessor(), {},
[](const CanonPath & path) -> RestrictedPathError { [](const CanonPath & path) -> RestrictedPathError {
auto modeInformation = evalSettings.pureEval auto modeInformation = evalSettings.pureEval
? "in pure evaluation mode (use '--impure' to override)" ? "in pure evaluation mode (use '--impure' to override)"
@ -460,7 +460,7 @@ EvalState::EvalState(
} }
/* Allow access to all paths in the search path. */ /* Allow access to all paths in the search path. */
if (rootFS.dynamic_pointer_cast<AllowListInputAccessor>()) if (rootFS.dynamic_pointer_cast<AllowListSourceAccessor>())
for (auto & i : lookupPath.elements) for (auto & i : lookupPath.elements)
resolveLookupPathPath(i.path, true); resolveLookupPathPath(i.path, true);
@ -480,13 +480,13 @@ EvalState::~EvalState()
void EvalState::allowPath(const Path & path) void EvalState::allowPath(const Path & path)
{ {
if (auto rootFS2 = rootFS.dynamic_pointer_cast<AllowListInputAccessor>()) if (auto rootFS2 = rootFS.dynamic_pointer_cast<AllowListSourceAccessor>())
rootFS2->allowPrefix(CanonPath(path)); rootFS2->allowPrefix(CanonPath(path));
} }
void EvalState::allowPath(const StorePath & storePath) void EvalState::allowPath(const StorePath & storePath)
{ {
if (auto rootFS2 = rootFS.dynamic_pointer_cast<AllowListInputAccessor>()) if (auto rootFS2 = rootFS.dynamic_pointer_cast<AllowListSourceAccessor>())
rootFS2->allowPrefix(CanonPath(store->toRealPath(storePath))); rootFS2->allowPrefix(CanonPath(store->toRealPath(storePath)));
} }
@ -540,13 +540,13 @@ void EvalState::checkURI(const std::string & uri)
/* If the URI is a path, then check it against allowedPaths as /* If the URI is a path, then check it against allowedPaths as
well. */ well. */
if (hasPrefix(uri, "/")) { if (hasPrefix(uri, "/")) {
if (auto rootFS2 = rootFS.dynamic_pointer_cast<AllowListInputAccessor>()) if (auto rootFS2 = rootFS.dynamic_pointer_cast<AllowListSourceAccessor>())
rootFS2->checkAccess(CanonPath(uri)); rootFS2->checkAccess(CanonPath(uri));
return; return;
} }
if (hasPrefix(uri, "file://")) { if (hasPrefix(uri, "file://")) {
if (auto rootFS2 = rootFS.dynamic_pointer_cast<AllowListInputAccessor>()) if (auto rootFS2 = rootFS.dynamic_pointer_cast<AllowListSourceAccessor>())
rootFS2->checkAccess(CanonPath(uri.substr(7))); rootFS2->checkAccess(CanonPath(uri.substr(7)));
return; return;
} }

View file

@ -4,7 +4,7 @@
lockFileStr: lockFileStr:
# A mapping of lock file node IDs to { sourceInfo, subdir } attrsets, # A mapping of lock file node IDs to { sourceInfo, subdir } attrsets,
# with sourceInfo.outPath providing an InputAccessor to a previously # with sourceInfo.outPath providing an SourceAccessor to a previously
# fetched tree. This is necessary for possibly unlocked inputs, in # fetched tree. This is necessary for possibly unlocked inputs, in
# particular the root input, but also --override-inputs pointing to # particular the root input, but also --override-inputs pointing to
# unlocked trees. # unlocked trees.

View file

@ -1,25 +1,25 @@
#include "filtering-input-accessor.hh" #include "filtering-source-accessor.hh"
namespace nix { namespace nix {
std::string FilteringInputAccessor::readFile(const CanonPath & path) std::string FilteringSourceAccessor::readFile(const CanonPath & path)
{ {
checkAccess(path); checkAccess(path);
return next->readFile(prefix / path); return next->readFile(prefix / path);
} }
bool FilteringInputAccessor::pathExists(const CanonPath & path) bool FilteringSourceAccessor::pathExists(const CanonPath & path)
{ {
return isAllowed(path) && next->pathExists(prefix / path); return isAllowed(path) && next->pathExists(prefix / path);
} }
std::optional<SourceAccessor::Stat> FilteringInputAccessor::maybeLstat(const CanonPath & path) std::optional<SourceAccessor::Stat> FilteringSourceAccessor::maybeLstat(const CanonPath & path)
{ {
checkAccess(path); checkAccess(path);
return next->maybeLstat(prefix / path); return next->maybeLstat(prefix / path);
} }
SourceAccessor::DirEntries FilteringInputAccessor::readDirectory(const CanonPath & path) SourceAccessor::DirEntries FilteringSourceAccessor::readDirectory(const CanonPath & path)
{ {
checkAccess(path); checkAccess(path);
DirEntries entries; DirEntries entries;
@ -30,18 +30,18 @@ SourceAccessor::DirEntries FilteringInputAccessor::readDirectory(const CanonPath
return entries; return entries;
} }
std::string FilteringInputAccessor::readLink(const CanonPath & path) std::string FilteringSourceAccessor::readLink(const CanonPath & path)
{ {
checkAccess(path); checkAccess(path);
return next->readLink(prefix / path); return next->readLink(prefix / path);
} }
std::string FilteringInputAccessor::showPath(const CanonPath & path) std::string FilteringSourceAccessor::showPath(const CanonPath & path)
{ {
return displayPrefix + next->showPath(prefix / path) + displaySuffix; return displayPrefix + next->showPath(prefix / path) + displaySuffix;
} }
void FilteringInputAccessor::checkAccess(const CanonPath & path) void FilteringSourceAccessor::checkAccess(const CanonPath & path)
{ {
if (!isAllowed(path)) if (!isAllowed(path))
throw makeNotAllowedError throw makeNotAllowedError
@ -49,15 +49,15 @@ void FilteringInputAccessor::checkAccess(const CanonPath & path)
: RestrictedPathError("access to path '%s' is forbidden", showPath(path)); : RestrictedPathError("access to path '%s' is forbidden", showPath(path));
} }
struct AllowListInputAccessorImpl : AllowListInputAccessor struct AllowListSourceAccessorImpl : AllowListSourceAccessor
{ {
std::set<CanonPath> allowedPrefixes; std::set<CanonPath> allowedPrefixes;
AllowListInputAccessorImpl( AllowListSourceAccessorImpl(
ref<SourceAccessor> next, ref<SourceAccessor> next,
std::set<CanonPath> && allowedPrefixes, std::set<CanonPath> && allowedPrefixes,
MakeNotAllowedError && makeNotAllowedError) MakeNotAllowedError && makeNotAllowedError)
: AllowListInputAccessor(SourcePath(next), std::move(makeNotAllowedError)) : AllowListSourceAccessor(SourcePath(next), std::move(makeNotAllowedError))
, allowedPrefixes(std::move(allowedPrefixes)) , allowedPrefixes(std::move(allowedPrefixes))
{ } { }
@ -72,15 +72,15 @@ struct AllowListInputAccessorImpl : AllowListInputAccessor
} }
}; };
ref<AllowListInputAccessor> AllowListInputAccessor::create( ref<AllowListSourceAccessor> AllowListSourceAccessor::create(
ref<SourceAccessor> next, ref<SourceAccessor> next,
std::set<CanonPath> && allowedPrefixes, std::set<CanonPath> && allowedPrefixes,
MakeNotAllowedError && makeNotAllowedError) MakeNotAllowedError && makeNotAllowedError)
{ {
return make_ref<AllowListInputAccessorImpl>(next, std::move(allowedPrefixes), std::move(makeNotAllowedError)); return make_ref<AllowListSourceAccessorImpl>(next, std::move(allowedPrefixes), std::move(makeNotAllowedError));
} }
bool CachingFilteringInputAccessor::isAllowed(const CanonPath & path) bool CachingFilteringSourceAccessor::isAllowed(const CanonPath & path)
{ {
auto i = cache.find(path); auto i = cache.find(path);
if (i != cache.end()) return i->second; if (i != cache.end()) return i->second;

View file

@ -12,17 +12,17 @@ namespace nix {
typedef std::function<RestrictedPathError(const CanonPath & path)> MakeNotAllowedError; typedef std::function<RestrictedPathError(const CanonPath & path)> MakeNotAllowedError;
/** /**
* An abstract wrapping `InputAccessor` that performs access * An abstract wrapping `SourceAccessor` that performs access
* control. Subclasses should override `isAllowed()` to implement an * control. Subclasses should override `isAllowed()` to implement an
* access control policy. The error message is customized at construction. * access control policy. The error message is customized at construction.
*/ */
struct FilteringInputAccessor : SourceAccessor struct FilteringSourceAccessor : SourceAccessor
{ {
ref<SourceAccessor> next; ref<SourceAccessor> next;
CanonPath prefix; CanonPath prefix;
MakeNotAllowedError makeNotAllowedError; MakeNotAllowedError makeNotAllowedError;
FilteringInputAccessor(const SourcePath & src, MakeNotAllowedError && makeNotAllowedError) FilteringSourceAccessor(const SourcePath & src, MakeNotAllowedError && makeNotAllowedError)
: next(src.accessor) : next(src.accessor)
, prefix(src.path) , prefix(src.path)
, makeNotAllowedError(std::move(makeNotAllowedError)) , makeNotAllowedError(std::move(makeNotAllowedError))
@ -55,32 +55,32 @@ struct FilteringInputAccessor : SourceAccessor
}; };
/** /**
* A wrapping `InputAccessor` that checks paths against a set of * A wrapping `SourceAccessor` that checks paths against a set of
* allowed prefixes. * allowed prefixes.
*/ */
struct AllowListInputAccessor : public FilteringInputAccessor struct AllowListSourceAccessor : public FilteringSourceAccessor
{ {
/** /**
* Grant access to the specified prefix. * Grant access to the specified prefix.
*/ */
virtual void allowPrefix(CanonPath prefix) = 0; virtual void allowPrefix(CanonPath prefix) = 0;
static ref<AllowListInputAccessor> create( static ref<AllowListSourceAccessor> create(
ref<SourceAccessor> next, ref<SourceAccessor> next,
std::set<CanonPath> && allowedPrefixes, std::set<CanonPath> && allowedPrefixes,
MakeNotAllowedError && makeNotAllowedError); MakeNotAllowedError && makeNotAllowedError);
using FilteringInputAccessor::FilteringInputAccessor; using FilteringSourceAccessor::FilteringSourceAccessor;
}; };
/** /**
* A wrapping `InputAccessor` mix-in where `isAllowed()` caches the result of virtual `isAllowedUncached()`. * A wrapping `SourceAccessor` mix-in where `isAllowed()` caches the result of virtual `isAllowedUncached()`.
*/ */
struct CachingFilteringInputAccessor : FilteringInputAccessor struct CachingFilteringSourceAccessor : FilteringSourceAccessor
{ {
std::map<CanonPath, bool> cache; std::map<CanonPath, bool> cache;
using FilteringInputAccessor::FilteringInputAccessor; using FilteringSourceAccessor::FilteringSourceAccessor;
bool isAllowed(const CanonPath & path) override; bool isAllowed(const CanonPath & path) override;

View file

@ -53,7 +53,7 @@ bool operator == (const git_oid & oid1, const git_oid & oid2)
namespace nix { namespace nix {
struct GitInputAccessor; struct GitSourceAccessor;
// Some wrapper types that ensure that the git_*_free functions get called. // Some wrapper types that ensure that the git_*_free functions get called.
template<auto del> template<auto del>
@ -330,9 +330,9 @@ struct GitRepoImpl : GitRepo, std::enable_shared_from_this<GitRepoImpl>
} }
/** /**
* A 'GitInputAccessor' with no regard for export-ignore or any other transformations. * A 'GitSourceAccessor' with no regard for export-ignore or any other transformations.
*/ */
ref<GitInputAccessor> getRawAccessor(const Hash & rev); ref<GitSourceAccessor> getRawAccessor(const Hash & rev);
ref<SourceAccessor> getAccessor(const Hash & rev, bool exportIgnore) override; ref<SourceAccessor> getAccessor(const Hash & rev, bool exportIgnore) override;
@ -473,12 +473,12 @@ ref<GitRepo> GitRepo::openRepo(const std::filesystem::path & path, bool create,
/** /**
* Raw git tree input accessor. * Raw git tree input accessor.
*/ */
struct GitInputAccessor : SourceAccessor struct GitSourceAccessor : SourceAccessor
{ {
ref<GitRepoImpl> repo; ref<GitRepoImpl> repo;
Tree root; Tree root;
GitInputAccessor(ref<GitRepoImpl> repo_, const Hash & rev) GitSourceAccessor(ref<GitRepoImpl> repo_, const Hash & rev)
: repo(repo_) : repo(repo_)
, root(peelObject<Tree>(*repo, lookupObject(*repo, hashToOID(rev)).get(), GIT_OBJECT_TREE)) , root(peelObject<Tree>(*repo, lookupObject(*repo, hashToOID(rev)).get(), GIT_OBJECT_TREE))
{ {
@ -702,12 +702,12 @@ struct GitInputAccessor : SourceAccessor
} }
}; };
struct GitExportIgnoreInputAccessor : CachingFilteringInputAccessor { struct GitExportIgnoreSourceAccessor : CachingFilteringSourceAccessor {
ref<GitRepoImpl> repo; ref<GitRepoImpl> repo;
std::optional<Hash> rev; std::optional<Hash> rev;
GitExportIgnoreInputAccessor(ref<GitRepoImpl> repo, ref<SourceAccessor> next, std::optional<Hash> rev) GitExportIgnoreSourceAccessor(ref<GitRepoImpl> repo, ref<SourceAccessor> next, std::optional<Hash> rev)
: CachingFilteringInputAccessor(next, [&](const CanonPath & path) { : CachingFilteringSourceAccessor(next, [&](const CanonPath & path) {
return RestrictedPathError(fmt("'%s' does not exist because it was fetched with exportIgnore enabled", path)); return RestrictedPathError(fmt("'%s' does not exist because it was fetched with exportIgnore enabled", path));
}) })
, repo(repo) , repo(repo)
@ -918,18 +918,18 @@ struct GitFileSystemObjectSinkImpl : GitFileSystemObjectSink
} }
}; };
ref<GitInputAccessor> GitRepoImpl::getRawAccessor(const Hash & rev) ref<GitSourceAccessor> GitRepoImpl::getRawAccessor(const Hash & rev)
{ {
auto self = ref<GitRepoImpl>(shared_from_this()); auto self = ref<GitRepoImpl>(shared_from_this());
return make_ref<GitInputAccessor>(self, rev); return make_ref<GitSourceAccessor>(self, rev);
} }
ref<SourceAccessor> GitRepoImpl::getAccessor(const Hash & rev, bool exportIgnore) ref<SourceAccessor> GitRepoImpl::getAccessor(const Hash & rev, bool exportIgnore)
{ {
auto self = ref<GitRepoImpl>(shared_from_this()); auto self = ref<GitRepoImpl>(shared_from_this());
ref<GitInputAccessor> rawGitAccessor = getRawAccessor(rev); ref<GitSourceAccessor> rawGitAccessor = getRawAccessor(rev);
if (exportIgnore) { if (exportIgnore) {
return make_ref<GitExportIgnoreInputAccessor>(self, rawGitAccessor, rev); return make_ref<GitExportIgnoreSourceAccessor>(self, rawGitAccessor, rev);
} }
else { else {
return rawGitAccessor; return rawGitAccessor;
@ -940,18 +940,18 @@ ref<SourceAccessor> GitRepoImpl::getAccessor(const WorkdirInfo & wd, bool export
{ {
auto self = ref<GitRepoImpl>(shared_from_this()); auto self = ref<GitRepoImpl>(shared_from_this());
/* In case of an empty workdir, return an empty in-memory tree. We /* In case of an empty workdir, return an empty in-memory tree. We
cannot use AllowListInputAccessor because it would return an cannot use AllowListSourceAccessor because it would return an
error for the root (and we can't add the root to the allow-list error for the root (and we can't add the root to the allow-list
since that would allow access to all its children). */ since that would allow access to all its children). */
ref<SourceAccessor> fileAccessor = ref<SourceAccessor> fileAccessor =
wd.files.empty() wd.files.empty()
? makeEmptySourceAccessor() ? makeEmptySourceAccessor()
: AllowListInputAccessor::create( : AllowListSourceAccessor::create(
makeFSSourceAccessor(path), makeFSSourceAccessor(path),
std::set<CanonPath> { wd.files }, std::set<CanonPath> { wd.files },
std::move(makeNotAllowedError)).cast<SourceAccessor>(); std::move(makeNotAllowedError)).cast<SourceAccessor>();
if (exportIgnore) if (exportIgnore)
return make_ref<GitExportIgnoreInputAccessor>(self, fileAccessor, std::nullopt); return make_ref<GitExportIgnoreSourceAccessor>(self, fileAccessor, std::nullopt);
else else
return fileAccessor; return fileAccessor;
} }

View file

@ -1,6 +1,6 @@
#pragma once #pragma once
#include "filtering-input-accessor.hh" #include "filtering-source-accessor.hh"
#include "fs-sink.hh" #include "fs-sink.hh"
namespace nix { namespace nix {

View file

@ -1,9 +0,0 @@
#pragma once
#include "source-accessor.hh"
namespace nix {
ref<SourceAccessor> makeMountedInputAccessor(std::map<CanonPath, ref<SourceAccessor>> mounts);
}

View file

@ -1,12 +1,12 @@
#include "mounted-input-accessor.hh" #include "mounted-source-accessor.hh"
namespace nix { namespace nix {
struct MountedInputAccessor : SourceAccessor struct MountedSourceAccessor : SourceAccessor
{ {
std::map<CanonPath, ref<SourceAccessor>> mounts; std::map<CanonPath, ref<SourceAccessor>> mounts;
MountedInputAccessor(std::map<CanonPath, ref<SourceAccessor>> _mounts) MountedSourceAccessor(std::map<CanonPath, ref<SourceAccessor>> _mounts)
: mounts(std::move(_mounts)) : mounts(std::move(_mounts))
{ {
displayPrefix.clear(); displayPrefix.clear();
@ -71,9 +71,9 @@ struct MountedInputAccessor : SourceAccessor
} }
}; };
ref<SourceAccessor> makeMountedInputAccessor(std::map<CanonPath, ref<SourceAccessor>> mounts) ref<SourceAccessor> makeMountedSourceAccessor(std::map<CanonPath, ref<SourceAccessor>> mounts)
{ {
return make_ref<MountedInputAccessor>(std::move(mounts)); return make_ref<MountedSourceAccessor>(std::move(mounts));
} }
} }

View file

@ -0,0 +1,9 @@
#pragma once
#include "source-accessor.hh"
namespace nix {
ref<SourceAccessor> makeMountedSourceAccessor(std::map<CanonPath, ref<SourceAccessor>> mounts);
}

View file

@ -9,7 +9,7 @@
#include "pathlocks.hh" #include "pathlocks.hh"
#include "processes.hh" #include "processes.hh"
#include "git.hh" #include "git.hh"
#include "mounted-input-accessor.hh" #include "mounted-source-accessor.hh"
#include "git-utils.hh" #include "git-utils.hh"
#include "logging.hh" #include "logging.hh"
#include "finally.hh" #include "finally.hh"
@ -652,7 +652,7 @@ struct GitInputScheme : InputScheme
if (!mounts.empty()) { if (!mounts.empty()) {
mounts.insert_or_assign(CanonPath::root, accessor); mounts.insert_or_assign(CanonPath::root, accessor);
accessor = makeMountedInputAccessor(std::move(mounts)); accessor = makeMountedSourceAccessor(std::move(mounts));
} }
} }
@ -715,7 +715,7 @@ struct GitInputScheme : InputScheme
} }
mounts.insert_or_assign(CanonPath::root, accessor); mounts.insert_or_assign(CanonPath::root, accessor);
accessor = makeMountedInputAccessor(std::move(mounts)); accessor = makeMountedSourceAccessor(std::move(mounts));
} }
if (!repoInfo.workdirInfo.isDirty) { if (!repoInfo.workdirInfo.isDirty) {

View file

@ -190,7 +190,7 @@ ref<SourceAccessor> makeEmptySourceAccessor();
/** /**
* Exception thrown when accessing a filtered path (see * Exception thrown when accessing a filtered path (see
* `FilteringInputAccessor`). * `FilteringSourceAccessor`).
*/ */
MakeError(RestrictedPathError, Error); MakeError(RestrictedPathError, Error);