aboutsummaryrefslogtreecommitdiff
path: root/src/nix
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix')
-rw-r--r--src/nix/main.cc1
-rw-r--r--src/nix/path-info.cc30
-rw-r--r--src/nix/repl.cc7
-rw-r--r--src/nix/upgrade-nix.cc9
4 files changed, 41 insertions, 6 deletions
diff --git a/src/nix/main.cc b/src/nix/main.cc
index 9cd5d21c8..69791e223 100644
--- a/src/nix/main.cc
+++ b/src/nix/main.cc
@@ -24,7 +24,6 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
{
mkFlag()
.longName("help")
- .shortName('h')
.description("show usage information")
.handler([&]() { showHelpAndExit(); });
diff --git a/src/nix/path-info.cc b/src/nix/path-info.cc
index 47caa401d..916ed360e 100644
--- a/src/nix/path-info.cc
+++ b/src/nix/path-info.cc
@@ -4,7 +4,6 @@
#include "json.hh"
#include "common-args.hh"
-#include <iomanip>
#include <algorithm>
using namespace nix;
@@ -13,12 +12,14 @@ struct CmdPathInfo : StorePathsCommand, MixJSON
{
bool showSize = false;
bool showClosureSize = false;
+ bool humanReadable = false;
bool showSigs = false;
CmdPathInfo()
{
mkFlag('s', "size", "print size of the NAR dump of each path", &showSize);
mkFlag('S', "closure-size", "print sum size of the NAR dumps of the closure of each path", &showClosureSize);
+ mkFlag('h', "human-readable", "with -s and -S, print sizes like 1K 234M 5.67G etc.", &humanReadable);
mkFlag(0, "sigs", "show signatures", &showSigs);
}
@@ -40,6 +41,10 @@ struct CmdPathInfo : StorePathsCommand, MixJSON
"nix path-info -rS /run/current-system | sort -nk2"
},
Example{
+ "To show a package's closure size and all its dependencies with human readable sizes:",
+ "nix path-info -rsSh nixpkgs.rust"
+ },
+ Example{
"To check the existence of a path in a binary cache:",
"nix path-info -r /nix/store/7qvk5c91...-geeqie-1.1 --store https://cache.nixos.org/"
},
@@ -58,6 +63,25 @@ struct CmdPathInfo : StorePathsCommand, MixJSON
};
}
+ void printSize(unsigned long long value)
+ {
+ if (!humanReadable) {
+ std::cout << fmt("\t%11d", value);
+ return;
+ }
+
+ static constexpr std::array<char, 9> idents = {
+ ' ', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'
+ };
+ size_t power = 0;
+ double res = value;
+ while (res > 1024 && power < idents.size()) {
+ ++power;
+ res /= 1024;
+ }
+ std::cout << fmt("\t%6.1f%c", res, idents.at(power));
+ }
+
void run(ref<Store> store, Paths storePaths) override
{
size_t pathLen = 0;
@@ -81,10 +105,10 @@ struct CmdPathInfo : StorePathsCommand, MixJSON
std::cout << storePath << std::string(std::max(0, (int) pathLen - (int) storePath.size()), ' ');
if (showSize)
- std::cout << '\t' << std::setw(11) << info->narSize;
+ printSize(info->narSize);
if (showClosureSize)
- std::cout << '\t' << std::setw(11) << store->getClosureSize(storePath).first;
+ printSize(store->getClosureSize(storePath).first);
if (showSigs) {
std::cout << '\t';
diff --git a/src/nix/repl.cc b/src/nix/repl.cc
index 1eb716006..b71e6f905 100644
--- a/src/nix/repl.cc
+++ b/src/nix/repl.cc
@@ -173,9 +173,14 @@ void NixRepl::mainLoop(const std::vector<std::string> & files)
printMsg(lvlError, format(error + "%1%%2%") % (settings.showTrace ? e.prefix() : "") % e.msg());
}
+ if (input.size() > 0) {
+ // Remove trailing newline before adding to history
+ input.erase(input.size() - 1);
+ linenoiseHistoryAdd(input.c_str());
+ }
+
// We handled the current input fully, so we should clear it
// and read brand new input.
- linenoiseHistoryAdd(input.c_str());
input.clear();
std::cout << std::endl;
}
diff --git a/src/nix/upgrade-nix.cc b/src/nix/upgrade-nix.cc
index 72b298283..666ac68b0 100644
--- a/src/nix/upgrade-nix.cc
+++ b/src/nix/upgrade-nix.cc
@@ -10,6 +10,7 @@ using namespace nix;
struct CmdUpgradeNix : MixDryRun, StoreCommand
{
Path profileDir;
+ std::string storePathsUrl = "https://github.com/NixOS/nixpkgs/raw/master/nixos/modules/installer/tools/nix-fallback-paths.nix";
CmdUpgradeNix()
{
@@ -19,6 +20,12 @@ struct CmdUpgradeNix : MixDryRun, StoreCommand
.labels({"profile-dir"})
.description("the Nix profile to upgrade")
.dest(&profileDir);
+
+ mkFlag()
+ .longName("nix-store-paths-url")
+ .labels({"url"})
+ .description("URL of the file that contains the store paths of the latest Nix release")
+ .dest(&storePathsUrl);
}
std::string name() override
@@ -127,7 +134,7 @@ struct CmdUpgradeNix : MixDryRun, StoreCommand
Path getLatestNix(ref<Store> store)
{
// FIXME: use nixos.org?
- auto req = DownloadRequest("https://github.com/NixOS/nixpkgs/raw/master/nixos/modules/installer/tools/nix-fallback-paths.nix");
+ auto req = DownloadRequest(storePathsUrl);
auto res = getDownloader()->download(req);
auto state = std::make_unique<EvalState>(Strings(), store);