aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2023-07-31 11:13:38 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-07-31 12:44:18 -0400
commit2a5f5fbb1776f5086646407e5296c372321863b9 (patch)
tree7893acea7b61c012e1e724cbf4f8889faf0d59d1 /src/libstore
parentdcdd5fed74445c526a361202a9e6c8459a38726b (diff)
`LocalStore::verifyPath`: Use `StorePathSet` for `store` local var
We don't care about non-store-paths in there (things like `.links`, are, in fact, allowed). So let's just skip them up front and be more strongly typed.
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/local-store.cc12
-rw-r--r--src/libstore/local-store.hh2
2 files changed, 9 insertions, 5 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index f78bd44ca..9049f33aa 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -1499,8 +1499,12 @@ bool LocalStore::verifyStore(bool checkContents, RepairFlag repair)
auto fdGCLock = openGCLock();
FdLock gcLock(fdGCLock.get(), ltRead, true, "waiting for the big garbage collector lock...");
- StringSet store;
- for (auto & i : readDirectory(realStoreDir)) store.insert(i.name);
+ StorePathSet store;
+ for (auto & i : readDirectory(realStoreDir)) {
+ try {
+ store.insert({i.name});
+ } catch (BadStorePath &) { }
+ }
/* Check whether all valid paths actually exist. */
printInfo("checking path existence...");
@@ -1595,14 +1599,14 @@ bool LocalStore::verifyStore(bool checkContents, RepairFlag repair)
}
-void LocalStore::verifyPath(const StorePath & path, const StringSet & store,
+void LocalStore::verifyPath(const StorePath & path, const StorePathSet & store,
StorePathSet & done, StorePathSet & validPaths, RepairFlag repair, bool & errors)
{
checkInterrupt();
if (!done.insert(path).second) return;
- if (!store.count(std::string(path.to_string()))) {
+ if (!store.count(path)) {
/* Check any referrers first. If we can invalidate them
first, then we can invalidate this path as well. */
bool canInvalidate = true;
diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh
index c9b570eaa..e97195f5b 100644
--- a/src/libstore/local-store.hh
+++ b/src/libstore/local-store.hh
@@ -314,7 +314,7 @@ private:
*/
void invalidatePathChecked(const StorePath & path);
- void verifyPath(const StorePath & path, const StringSet & store,
+ void verifyPath(const StorePath & path, const StorePathSet & store,
StorePathSet & done, StorePathSet & validPaths, RepairFlag repair, bool & errors);
std::shared_ptr<const ValidPathInfo> queryPathInfoInternal(State & state, const StorePath & path);