17enum class SymlinkResolution {
33MakeError(FileNotFound, Error);
41struct SourceAccessor : std::enable_shared_from_this<SourceAccessor>
45 std::string displayPrefix, displaySuffix;
49 virtual ~SourceAccessor()
78 std::function<
void(uint64_t)> sizeCallback = [](uint64_t size){});
83 tRegular, tSymlink, tDirectory,
117 bool isNotNARSerialisable();
118 std::string typeString();
125 typedef std::optional<Type> DirEntry;
127 typedef std::map<std::string, DirEntry> DirEntries;
136 virtual void dumpPath(
144 HashAlgorithm ha = HashAlgorithm::SHA256);
152 {
return std::nullopt; }
159 auto operator <=> (
const SourceAccessor &
x)
const
161 return number <=>
x.number;
164 void setPathDisplay(std::string displayPrefix, std::string displaySuffix =
"");
166 virtual std::string showPath(
const CanonPath & path);
177 SymlinkResolution mode = SymlinkResolution::Full);
190 {
return std::nullopt; }
196ref<SourceAccessor> makeEmptySourceAccessor();
202MakeError(RestrictedPathError, Error);
207ref<SourceAccessor> getFSSourceAccessor();
215ref<SourceAccessor> makeFSSourceAccessor(std::filesystem::path root);
Definition canon-path.hh:41
std::function< bool(const Path &path)> PathFilter
Definition file-system.hh:365
const size_t number
Definition lexer.l:4439
std::optional< SourceAccessor::Stat > maybeLstat() const
T x
Definition lexer.l:2648
CanonPath(std::string_view raw)
SourceAccessor::Stat lstat() const
std::string readFile() const
std::string readLink() const
Definition serialise.hh:20
Definition source-accessor.hh:96
std::optional< uint64_t > fileSize
Definition source-accessor.hh:104
bool isExecutable
Definition source-accessor.hh:109
std::optional< uint64_t > narOffset
Definition source-accessor.hh:115
Definition source-accessor.hh:42
virtual std::optional< time_t > getLastModified()
Definition source-accessor.hh:189
virtual DirEntries readDirectory(const CanonPath &path)=0
std::optional< std::string > fingerprint
Definition source-accessor.hh:183
Type
Definition source-accessor.hh:82
@ tChar
Definition source-accessor.hh:91
virtual std::optional< std::filesystem::path > getPhysicalPath(const CanonPath &path)
Definition source-accessor.hh:151
CanonPath resolveSymlinks(const CanonPath &path, SymlinkResolution mode=SymlinkResolution::Full)
Definition source-accessor.cc:90