mirror of
https://github.com/NixOS/nix.git
synced 2025-11-08 19:46:02 +01:00
diff-closures: print sizes with dynamic unit
This commit is contained in:
parent
bef3c37cb2
commit
9d4d10954a
5 changed files with 9 additions and 8 deletions
|
|
@ -158,6 +158,7 @@ TEST(renderSize, misc)
|
||||||
ASSERT_EQ(renderSize(972, true), " 0.9 KiB");
|
ASSERT_EQ(renderSize(972, true), " 0.9 KiB");
|
||||||
ASSERT_EQ(renderSize(973, true), " 1.0 KiB"); // FIXME: should round down
|
ASSERT_EQ(renderSize(973, true), " 1.0 KiB"); // FIXME: should round down
|
||||||
ASSERT_EQ(renderSize(1024, true), " 1.0 KiB");
|
ASSERT_EQ(renderSize(1024, true), " 1.0 KiB");
|
||||||
|
ASSERT_EQ(renderSize(-1024, true), " -1.0 KiB");
|
||||||
ASSERT_EQ(renderSize(1024 * 1024, true), "1024.0 KiB");
|
ASSERT_EQ(renderSize(1024 * 1024, true), "1024.0 KiB");
|
||||||
ASSERT_EQ(renderSize(1100 * 1024, true), " 1.1 MiB");
|
ASSERT_EQ(renderSize(1100 * 1024, true), " 1.1 MiB");
|
||||||
ASSERT_EQ(renderSize(2ULL * 1024 * 1024 * 1024, true), " 2.0 GiB");
|
ASSERT_EQ(renderSize(2ULL * 1024 * 1024 * 1024, true), " 2.0 GiB");
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ N string2IntWithUnitPrefix(std::string_view s)
|
||||||
* GiB`. If `align` is set, the number will be right-justified by
|
* GiB`. If `align` is set, the number will be right-justified by
|
||||||
* padding with spaces on the left.
|
* padding with spaces on the left.
|
||||||
*/
|
*/
|
||||||
std::string renderSize(uint64_t value, bool align = false);
|
std::string renderSize(int64_t value, bool align = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a string into a float.
|
* Parse a string into a float.
|
||||||
|
|
|
||||||
|
|
@ -132,15 +132,16 @@ std::optional<N> string2Float(const std::string_view s)
|
||||||
template std::optional<double> string2Float<double>(const std::string_view s);
|
template std::optional<double> string2Float<double>(const std::string_view s);
|
||||||
template std::optional<float> string2Float<float>(const std::string_view s);
|
template std::optional<float> string2Float<float>(const std::string_view s);
|
||||||
|
|
||||||
std::string renderSize(uint64_t value, bool align)
|
std::string renderSize(int64_t value, bool align)
|
||||||
{
|
{
|
||||||
static const std::array<char, 9> prefixes{{'K', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'}};
|
static const std::array<char, 9> prefixes{{'K', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'}};
|
||||||
size_t power = 0;
|
size_t power = 0;
|
||||||
double res = value;
|
double abs_value = std::abs(value);
|
||||||
while (res > 1024 && power < prefixes.size()) {
|
while (abs_value > 1024 && power < prefixes.size()) {
|
||||||
++power;
|
++power;
|
||||||
res /= 1024;
|
abs_value /= 1024;
|
||||||
}
|
}
|
||||||
|
double res = (double) value / std::pow(1024.0, power);
|
||||||
return fmt(align ? "%6.1f %ciB" : "%.1f %ciB", power == 0 ? res / 1024 : res, prefixes.at(power));
|
return fmt(align ? "%6.1f %ciB" : "%.1f %ciB", power == 0 ? res / 1024 : res, prefixes.at(power));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,8 +107,7 @@ void printClosureDiff(
|
||||||
if (!removed.empty() || !added.empty())
|
if (!removed.empty() || !added.empty())
|
||||||
items.push_back(fmt("%s → %s", showVersions(removed), showVersions(added)));
|
items.push_back(fmt("%s → %s", showVersions(removed), showVersions(added)));
|
||||||
if (showDelta)
|
if (showDelta)
|
||||||
items.push_back(
|
items.push_back(fmt("%s%s" ANSI_NORMAL, sizeDelta > 0 ? ANSI_RED : ANSI_GREEN, renderSize(sizeDelta)));
|
||||||
fmt("%s%+.1f KiB" ANSI_NORMAL, sizeDelta > 0 ? ANSI_RED : ANSI_GREEN, sizeDelta / 1024.0));
|
|
||||||
logger->cout("%s%s: %s", indent, name, concatStringsSep(", ", items));
|
logger->cout("%s%s: %s", indent, name, concatStringsSep(", ", items));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ struct CmdPathInfo : StorePathsCommand, MixJSON
|
||||||
void printSize(std::ostream & str, uint64_t value)
|
void printSize(std::ostream & str, uint64_t value)
|
||||||
{
|
{
|
||||||
if (humanReadable)
|
if (humanReadable)
|
||||||
str << fmt("\t%s", renderSize(value, true));
|
str << fmt("\t%s", renderSize((int64_t) value, true));
|
||||||
else
|
else
|
||||||
str << fmt("\t%11d", value);
|
str << fmt("\t%11d", value);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue