diff options
author | Sidharth Kshatriya <sid.kshatriya@gmail.com> | 2023-02-23 11:33:30 +0530 |
---|---|---|
committer | Sidharth Kshatriya <sid.kshatriya@gmail.com> | 2023-03-03 21:46:35 +0530 |
commit | 427555861b871aba02753bdb88a45b3b710a213b (patch) | |
tree | d7188b3262a53da3116ce684efd0229d5f1a1ace | |
parent | 4a921ba43b8ea9a37763cd4bd4bc491928cc55c2 (diff) |
Print the store paths to be fetched sorted by StorePath name() and not baseName
Presently when nix says something like:
```
these 486 paths will be fetched (511.54 MiB download, 6458.64 MiB unpacked):
...path1
...path2
...path3
...
...
...path486
```
It sorts path1, path2, path3, ..., path486 in lexicographic order of the
store path.
After this commit, nix will show path1, path2, path3, ..., path486 sorted by
StorePath name() (basically everything after the hash) rather than the store path.
This makes it easier to review what exactly is being downloaded at a glance,
especially when many paths need to be fetched.
-rw-r--r-- | src/libmain/shared.cc | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc index d4871a8e2..19715ccfa 100644 --- a/src/libmain/shared.cc +++ b/src/libmain/shared.cc @@ -84,8 +84,18 @@ void printMissing(ref<Store> store, const StorePathSet & willBuild, downloadSizeMiB, narSizeMiB); } - for (auto & i : willSubstitute) - printMsg(lvl, " %s", store->printStorePath(i)); + std::vector<const StorePath *> willSubstituteSorted = {}; + std::for_each(willSubstitute.begin(), willSubstitute.end(), + [&](const StorePath &p) { willSubstituteSorted.push_back(&p); }); + std::sort(willSubstituteSorted.begin(), willSubstituteSorted.end(), + [](const StorePath *lhs, const StorePath *rhs) { + if (lhs->name() == rhs->name()) + return lhs->to_string() < rhs->to_string(); + else + return lhs->name() < rhs->name(); + }); + for (auto p : willSubstituteSorted) + printMsg(lvl, " %s", store->printStorePath(*p)); } if (!unknown.empty()) { |