1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-06 17:31:47 +02:00

SourceAccessor: Change the main interface from lstat() to maybeLstat()

This commit is contained in:
Eelco Dolstra 2023-11-01 15:26:07 +01:00
parent 8ffd1695ce
commit cdb27c1519
9 changed files with 22 additions and 20 deletions

View file

@ -44,9 +44,13 @@ bool PosixSourceAccessor::pathExists(const CanonPath & path)
return nix::pathExists(path.abs());
}
SourceAccessor::Stat PosixSourceAccessor::lstat(const CanonPath & path)
std::optional<SourceAccessor::Stat> PosixSourceAccessor::maybeLstat(const CanonPath & path)
{
auto st = nix::lstat(path.abs());
struct stat st;
if (::lstat(path.c_str(), &st)) {
if (errno == ENOENT) return std::nullopt;
throw SysError("getting status of '%s'", showPath(path));
}
mtime = std::max(mtime, st.st_mtime);
return Stat {
.type =

View file

@ -22,7 +22,7 @@ struct PosixSourceAccessor : SourceAccessor
bool pathExists(const CanonPath & path) override;
Stat lstat(const CanonPath & path) override;
std::optional<Stat> maybeLstat(const CanonPath & path) override;
DirEntries readDirectory(const CanonPath & path) override;

View file

@ -42,12 +42,12 @@ Hash SourceAccessor::hashPath(
return sink.finish().first;
}
std::optional<SourceAccessor::Stat> SourceAccessor::maybeLstat(const CanonPath & path)
SourceAccessor::Stat SourceAccessor::lstat(const CanonPath & path)
{
// FIXME: merge these into one operation.
if (!pathExists(path))
return {};
return lstat(path);
if (auto st = maybeLstat(path))
return *st;
else
throw Error("path '%s' does not exist", showPath(path));
}
std::string SourceAccessor::showPath(const CanonPath & path)

View file

@ -61,9 +61,9 @@ struct SourceAccessor
bool isExecutable = false; // regular files only
};
virtual Stat lstat(const CanonPath & path) = 0;
Stat lstat(const CanonPath & path);
std::optional<Stat> maybeLstat(const CanonPath & path);
virtual std::optional<Stat> maybeLstat(const CanonPath & path) = 0;
typedef std::optional<Type> DirEntry;