mirror of
https://github.com/NixOS/nix
synced 2025-06-29 06:21:14 +02:00
Make roots a map of store paths to pinning links
This new structure makes more sense as there may be many sources rooting the same store path. Many profiles can reference the same path but this is even more true with /proc/<pid>/maps where distinct pids can and often do map the same store path. This implementation is also more efficient as the `Roots` map contains only one entry per rooted store path.
This commit is contained in:
parent
a17f86ce3a
commit
ebc86550f9
5 changed files with 39 additions and 35 deletions
|
@ -477,14 +477,19 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
|||
logger->startWork();
|
||||
Roots roots = store->findRoots();
|
||||
logger->stopWork();
|
||||
to << roots.size();
|
||||
size_t total_length = 0;
|
||||
for (auto & root : roots)
|
||||
total_length += root.second.size();
|
||||
to << total_length;
|
||||
int n = 0;
|
||||
for (auto & i : roots) {
|
||||
// Obfuscate 'memory' roots as they exposes information about other users,
|
||||
if (i.first.rfind("{memory:", 0) == 0) {
|
||||
to << fmt("{memory:%d}", n++) << i.second;
|
||||
} else {
|
||||
to << i.first << i.second;
|
||||
for (auto & [target, links] : roots) {
|
||||
for (auto & link : links) {
|
||||
// Obfuscate 'memory' roots as they expose information about other users,
|
||||
if (link.rfind("{memory:", 0) == 0) {
|
||||
to << fmt("{memory:%d}", n++) << target;
|
||||
} else {
|
||||
to << link << target;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue