guix gc: Adjust size suffix based on the amount of data.

* guix/ui.scm (number->size): New procedure.
* guix/scripts/gc.scm (guix-gc)[actions]: Display the amount of
collected-garbage using more specific units.
[ensure-free-space]: Display the size using an appropriate size unit.
* nix/libstore/gc.cc (deletePathRecursive, removeUnusedLinks): Same.
* nix/libstore/optimise-store.cc (showBytes): Move function ...
* nix/libstore/misc.cc: ... to here.  Expand to adjust the output based
on the amount of bytes received.

Change-Id: Idceb1a13f8e45f959d327f53d1a8accb29d2678b
This commit is contained in:
Efraim Flashner 2025-06-29 10:21:12 +03:00
parent cf6868187a
commit cc588d8eb6
No known key found for this signature in database
GPG key ID: 41AAE7DCCA3D8351
6 changed files with 61 additions and 14 deletions

View file

@ -1,4 +1,5 @@
#include "misc.hh"
#include <math.h>
#include "store-api.hh"
#include "local-store.hh"
#include "globals.hh"
@ -94,5 +95,25 @@ Paths topoSortPaths(StoreAPI & store, const PathSet & paths)
return sorted;
}
/* Max of LLONG_MAX is 8 EiB */
string showBytes(long long bytes)
{
if (llabs(bytes > exp2l(60))) {
return (format("%7.2f EiB") % (bytes / exp2l(60))).str();
} else if (llabs(bytes > exp2l(50))) {
return (format("%7.2f PiB") % (bytes / exp2l(50))).str();
} else if (llabs(bytes > exp2l(40))) {
return (format("%7.2f TiB") % (bytes / exp2l(40))).str();
} else if (llabs(bytes > exp2l(30))) {
return (format("%7.2f GiB") % (bytes / exp2l(30))).str();
} else if (llabs(bytes > exp2l(20))) {
return (format("%7.2f MiB") % (bytes / exp2l(20))).str();
} else if (llabs(bytes > exp2l(10))) {
return (format("%7.2f KiB") % (bytes / exp2l(10))).str();
} else {
return (format("%4f bytes") % bytes).str();
}
}
}