mirror of
https://github.com/NixOS/nix.git
synced 2025-12-01 14:41:00 +01:00
* It is tough to contribute to a project that doesn't use a formatter, * It is extra hard to contribute to a project which has configured the formatter, but ignores it for some files * Code formatting makes it harder to hide obscure / weird bugs by accident or on purpose, Let's rip the bandaid off? Note that PRs currently in flight should be able to be merged relatively easily by applying `clang-format` to their tip prior to merge.
59 lines
1.5 KiB
C++
59 lines
1.5 KiB
C++
#include "nix/util/source-accessor.hh"
|
|
|
|
namespace nix {
|
|
|
|
struct SubdirSourceAccessor : SourceAccessor
|
|
{
|
|
ref<SourceAccessor> parent;
|
|
|
|
CanonPath subdirectory;
|
|
|
|
SubdirSourceAccessor(ref<SourceAccessor> && parent, CanonPath && subdirectory)
|
|
: parent(std::move(parent))
|
|
, subdirectory(std::move(subdirectory))
|
|
{
|
|
displayPrefix.clear();
|
|
}
|
|
|
|
std::string readFile(const CanonPath & path) override
|
|
{
|
|
return parent->readFile(subdirectory / path);
|
|
}
|
|
|
|
void readFile(const CanonPath & path, Sink & sink, std::function<void(uint64_t)> sizeCallback) override
|
|
{
|
|
return parent->readFile(subdirectory / path, sink, sizeCallback);
|
|
}
|
|
|
|
bool pathExists(const CanonPath & path) override
|
|
{
|
|
return parent->pathExists(subdirectory / path);
|
|
}
|
|
|
|
std::optional<Stat> maybeLstat(const CanonPath & path) override
|
|
{
|
|
return parent->maybeLstat(subdirectory / path);
|
|
}
|
|
|
|
DirEntries readDirectory(const CanonPath & path) override
|
|
{
|
|
return parent->readDirectory(subdirectory / path);
|
|
}
|
|
|
|
std::string readLink(const CanonPath & path) override
|
|
{
|
|
return parent->readLink(subdirectory / path);
|
|
}
|
|
|
|
std::string showPath(const CanonPath & path) override
|
|
{
|
|
return displayPrefix + parent->showPath(subdirectory / path) + displaySuffix;
|
|
}
|
|
};
|
|
|
|
ref<SourceAccessor> projectSubdirSourceAccessor(ref<SourceAccessor> parent, CanonPath subdirectory)
|
|
{
|
|
return make_ref<SubdirSourceAccessor>(std::move(parent), std::move(subdirectory));
|
|
}
|
|
|
|
} // namespace nix
|