forked from lix-project/lix
Unify DirEntries types
This commit is contained in:
parent
cdb27c1519
commit
5381123879
|
@ -231,14 +231,14 @@ ref<const ValidPathInfo> BinaryCacheStore::addToStoreCommon(
|
|||
std::regex regex1("^[0-9a-f]{2}$");
|
||||
std::regex regex2("^[0-9a-f]{38}\\.debug$");
|
||||
|
||||
for (auto & s1 : narAccessor->readDirectory(buildIdDir)) {
|
||||
for (auto & [s1, _type] : narAccessor->readDirectory(buildIdDir)) {
|
||||
auto dir = buildIdDir + "/" + s1;
|
||||
|
||||
if (auto st = narAccessor->stat(dir); !st || st->type != SourceAccessor::tDirectory
|
||||
|| !std::regex_match(s1, regex1))
|
||||
continue;
|
||||
|
||||
for (auto & s2 : narAccessor->readDirectory(dir)) {
|
||||
for (auto & [s2, _type] : narAccessor->readDirectory(dir)) {
|
||||
auto debugPath = dir + "/" + s2;
|
||||
|
||||
if (auto st = narAccessor->stat(debugPath); !st || st->type != SourceAccessor::tRegular
|
||||
|
|
|
@ -39,7 +39,9 @@ public:
|
|||
|
||||
virtual std::optional<Stat> stat(const Path & path) = 0;
|
||||
|
||||
virtual StringSet readDirectory(const Path & path) = 0;
|
||||
using DirEntries = SourceAccessor::DirEntries;
|
||||
|
||||
virtual DirEntries readDirectory(const Path & path) = 0;
|
||||
|
||||
/**
|
||||
* Read a file inside the store.
|
||||
|
|
|
@ -48,15 +48,15 @@ struct LocalStoreAccessor : public FSAccessor
|
|||
S_ISREG(st.st_mode) && st.st_mode & S_IXUSR}};
|
||||
}
|
||||
|
||||
StringSet readDirectory(const Path & path) override
|
||||
DirEntries readDirectory(const Path & path) override
|
||||
{
|
||||
auto realPath = toRealPath(path);
|
||||
|
||||
auto entries = nix::readDirectory(realPath);
|
||||
|
||||
StringSet res;
|
||||
DirEntries res;
|
||||
for (auto & entry : entries)
|
||||
res.insert(entry.name);
|
||||
res.insert_or_assign(entry.name, std::nullopt);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -190,16 +190,16 @@ struct NarAccessor : public FSAccessor
|
|||
return i->stat;
|
||||
}
|
||||
|
||||
StringSet readDirectory(const Path & path) override
|
||||
DirEntries readDirectory(const Path & path) override
|
||||
{
|
||||
auto i = get(path);
|
||||
|
||||
if (i.stat.type != Type::tDirectory)
|
||||
throw Error("path '%1%' inside NAR file is not a directory", path);
|
||||
|
||||
StringSet res;
|
||||
DirEntries res;
|
||||
for (auto & child : i.children)
|
||||
res.insert(child.first);
|
||||
res.insert_or_assign(child.first, std::nullopt);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -264,7 +264,7 @@ json listNar(ref<FSAccessor> accessor, const Path & path, bool recurse)
|
|||
{
|
||||
obj["entries"] = json::object();
|
||||
json &res2 = obj["entries"];
|
||||
for (auto & name : accessor->readDirectory(path)) {
|
||||
for (auto & [name, type] : accessor->readDirectory(path)) {
|
||||
if (recurse) {
|
||||
res2[name] = listNar(accessor, path + "/" + name, true);
|
||||
} else
|
||||
|
|
|
@ -107,7 +107,7 @@ std::optional<FSAccessor::Stat> RemoteFSAccessor::stat(const Path & path)
|
|||
return res.first->stat(res.second);
|
||||
}
|
||||
|
||||
StringSet RemoteFSAccessor::readDirectory(const Path & path)
|
||||
SourceAccessor::DirEntries RemoteFSAccessor::readDirectory(const Path & path)
|
||||
{
|
||||
auto res = fetch(path);
|
||||
return res.first->readDirectory(res.second);
|
||||
|
|
|
@ -30,7 +30,7 @@ public:
|
|||
|
||||
std::optional<Stat> stat(const Path & path) override;
|
||||
|
||||
StringSet readDirectory(const Path & path) override;
|
||||
DirEntries readDirectory(const Path & path) override;
|
||||
|
||||
std::string readFile(const Path & path, bool requireValidPath = true) override;
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@ struct MixLs : virtual Args, MixJSON
|
|||
{
|
||||
if (st.type == FSAccessor::Type::tDirectory && !showDirectory) {
|
||||
auto names = accessor->readDirectory(curPath);
|
||||
for (auto & name : names)
|
||||
for (auto & [name, type] : names)
|
||||
showFile(curPath + "/" + name, relPath + "/" + name);
|
||||
} else
|
||||
showFile(curPath, relPath);
|
||||
|
|
|
@ -224,7 +224,7 @@ struct CmdWhyDepends : SourceExprCommand, MixOperateOnOptions
|
|||
|
||||
if (st->type == FSAccessor::Type::tDirectory) {
|
||||
auto names = accessor->readDirectory(p);
|
||||
for (auto & name : names)
|
||||
for (auto & [name, type] : names)
|
||||
visitPath(p + "/" + name);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue