aboutsummaryrefslogtreecommitdiff
path: root/src/nix-store
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-03-26 11:44:14 +0100
committerEelco Dolstra <edolstra@gmail.com>2019-03-26 11:44:14 +0100
commitb5565a70812ce3c4dbf40a1e1bfe98ffd0ef45ed (patch)
tree740bfb232d55de7f9853f6bb126ac01139ef50a6 /src/nix-store
parentd342de02b9f7ee07f22e1986af8d5c8eb325d8ba (diff)
parent6e9e34ea1faac175b787734151f44a662ed57241 (diff)
Merge remote-tracking branch 'origin/master' into flakes
Diffstat (limited to 'src/nix-store')
-rw-r--r--src/nix-store/nix-store.cc35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index a9ad14762..f324056bb 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -427,10 +427,11 @@ static void opQuery(Strings opFlags, Strings opArgs)
maybeUseOutputs(store->followLinksToStorePath(i), useOutput, forceRealise),
referrers, true, settings.gcKeepOutputs, settings.gcKeepDerivations);
}
- Roots roots = store->findRoots();
- for (auto & i : roots)
- if (referrers.find(i.second) != referrers.end())
- cout << format("%1%\n") % i.first;
+ Roots roots = store->findRoots(false);
+ for (auto & [target, links] : roots)
+ if (referrers.find(target) != referrers.end())
+ for (auto & link : links)
+ cout << format("%1% -> %2%\n") % link % target;
break;
}
@@ -485,11 +486,16 @@ static void opReadLog(Strings opFlags, Strings opArgs)
static void opDumpDB(Strings opFlags, Strings opArgs)
{
if (!opFlags.empty()) throw UsageError("unknown flag");
- if (!opArgs.empty())
- throw UsageError("no arguments expected");
- PathSet validPaths = store->queryAllValidPaths();
- for (auto & i : validPaths)
- cout << store->makeValidityRegistration({i}, true, true);
+ if (!opArgs.empty()) {
+ for (auto & i : opArgs)
+ i = store->followLinksToStorePath(i);
+ for (auto & i : opArgs)
+ cout << store->makeValidityRegistration({i}, true, true);
+ } else {
+ PathSet validPaths = store->queryAllValidPaths();
+ for (auto & i : validPaths)
+ cout << store->makeValidityRegistration({i}, true, true);
+ }
}
@@ -585,9 +591,14 @@ static void opGC(Strings opFlags, Strings opArgs)
if (!opArgs.empty()) throw UsageError("no arguments expected");
if (printRoots) {
- Roots roots = store->findRoots();
- for (auto & i : roots)
- cout << i.first << " -> " << i.second << std::endl;
+ Roots roots = store->findRoots(false);
+ std::set<std::pair<Path, Path>> roots2;
+ // Transpose and sort the roots.
+ for (auto & [target, links] : roots)
+ for (auto & link : links)
+ roots2.emplace(link, target);
+ for (auto & [link, target] : roots2)
+ std::cout << link << " -> " << target << "\n";
}
else {