aboutsummaryrefslogtreecommitdiff
path: root/src/nix/upgrade-nix.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2018-08-30 21:18:56 +0200
committerEelco Dolstra <edolstra@gmail.com>2018-08-30 21:18:56 +0200
commit39f1722f364d7ce95717161cc283e96250c14643 (patch)
tree15babbbf62f23a7253787ea1b984f61017b69009 /src/nix/upgrade-nix.cc
parentf08b14c9d0e0a1d24b0a5d231ba7d448ef000106 (diff)
nix upgrade-nix: Handle .nix-profile being a link to .../profiles/per-user/...
Also some cosmetic improvements.
Diffstat (limited to 'src/nix/upgrade-nix.cc')
-rw-r--r--src/nix/upgrade-nix.cc34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/nix/upgrade-nix.cc b/src/nix/upgrade-nix.cc
index 2db60922a..35c44a70c 100644
--- a/src/nix/upgrade-nix.cc
+++ b/src/nix/upgrade-nix.cc
@@ -4,6 +4,8 @@
#include "download.hh"
#include "eval.hh"
#include "attr-path.hh"
+#include "names.hh"
+#include "progress-bar.hh"
using namespace nix;
@@ -67,28 +69,36 @@ struct CmdUpgradeNix : MixDryRun, StoreCommand
storePath = getLatestNix(store);
}
+ auto version = DrvName(storePathToName(storePath)).version;
+
+ if (dryRun) {
+ stopProgressBar();
+ printError("would upgrade to version %s", version);
+ return;
+ }
+
{
Activity act(*logger, lvlInfo, actUnknown, fmt("downloading '%s'...", storePath));
- if (!dryRun)
- store->ensurePath(storePath);
+ store->ensurePath(storePath);
}
{
Activity act(*logger, lvlInfo, actUnknown, fmt("verifying that '%s' works...", storePath));
- if (!dryRun) {
- auto program = storePath + "/bin/nix-env";
- auto s = runProgram(program, false, {"--version"});
- if (s.find("Nix") == std::string::npos)
- throw Error("could not verify that '%s' works", program);
- }
+ auto program = storePath + "/bin/nix-env";
+ auto s = runProgram(program, false, {"--version"});
+ if (s.find("Nix") == std::string::npos)
+ throw Error("could not verify that '%s' works", program);
}
+ stopProgressBar();
+
{
Activity act(*logger, lvlInfo, actUnknown, fmt("installing '%s' into profile '%s'...", storePath, profileDir));
- if (!dryRun)
- runProgram(settings.nixBinDir + "/nix-env", false,
- {"--profile", profileDir, "-i", storePath, "--no-sandbox"});
+ runProgram(settings.nixBinDir + "/nix-env", false,
+ {"--profile", profileDir, "-i", storePath, "--no-sandbox"});
}
+
+ printError(ANSI_GREEN "upgrade to version %s done" ANSI_NORMAL, version);
}
/* Return the profile in which Nix is installed. */
@@ -113,7 +123,7 @@ struct CmdUpgradeNix : MixDryRun, StoreCommand
Path profileDir = dirOf(where);
// Resolve profile to /nix/var/nix/profiles/<name> link.
- while (baseNameOf(dirOf(canonPath(profileDir))) != "profiles" && isLink(profileDir))
+ while (canonPath(profileDir).find("/profiles/") == std::string::npos && isLink(profileDir))
profileDir = readLink(profileDir);
printInfo("found profile '%s'", profileDir);