aboutsummaryrefslogtreecommitdiff
path: root/src/nix/upgrade-nix.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2018-08-30 17:10:59 +0200
committerEelco Dolstra <edolstra@gmail.com>2018-08-30 17:10:59 +0200
commitddeda0b62e1c6cf0594e97dbd25ee3185f408947 (patch)
tree0624e6291d861b985068d0322db6dc7eafc265eb /src/nix/upgrade-nix.cc
parent264e66f69699919f1040be2986b91fd6b188e9af (diff)
parentd85bb4814f4fa2ed6046bba6e8c6394adf9e5666 (diff)
Merge branch 'nix-upgrade-profile' of https://github.com/LnL7/nix
Diffstat (limited to 'src/nix/upgrade-nix.cc')
-rw-r--r--src/nix/upgrade-nix.cc34
1 files changed, 23 insertions, 11 deletions
diff --git a/src/nix/upgrade-nix.cc b/src/nix/upgrade-nix.cc
index 4f4d0ebc0..666ac68b0 100644
--- a/src/nix/upgrade-nix.cc
+++ b/src/nix/upgrade-nix.cc
@@ -1,4 +1,5 @@
#include "command.hh"
+#include "common-args.hh"
#include "store-api.hh"
#include "download.hh"
#include "eval.hh"
@@ -6,7 +7,7 @@
using namespace nix;
-struct CmdUpgradeNix : StoreCommand
+struct CmdUpgradeNix : MixDryRun, StoreCommand
{
Path profileDir;
std::string storePathsUrl = "https://github.com/NixOS/nixpkgs/raw/master/nixos/modules/installer/tools/nix-fallback-paths.nix";
@@ -68,21 +69,25 @@ struct CmdUpgradeNix : StoreCommand
{
Activity act(*logger, lvlInfo, actUnknown, fmt("downloading '%s'...", storePath));
- store->ensurePath(storePath);
+ if (!dryRun)
+ store->ensurePath(storePath);
}
{
Activity act(*logger, lvlInfo, actUnknown, fmt("verifying that '%s' works...", storePath));
- 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);
+ 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);
+ }
}
{
Activity act(*logger, lvlInfo, actUnknown, fmt("installing '%s' into profile '%s'...", storePath, profileDir));
- runProgram(settings.nixBinDir + "/nix-env", false,
- {"--profile", profileDir, "-i", storePath, "--no-sandbox"});
+ if (!dryRun)
+ runProgram(settings.nixBinDir + "/nix-env", false,
+ {"--profile", profileDir, "-i", storePath, "--no-sandbox"});
}
}
@@ -105,11 +110,18 @@ struct CmdUpgradeNix : StoreCommand
if (hasPrefix(where, "/run/current-system"))
throw Error("Nix on NixOS must be upgraded via 'nixos-rebuild'");
- Path profileDir;
- Path userEnv;
+ Path profileDir = dirOf(where);
+
+ // Resolve profile to /nix/var/nix/profiles/<name> link.
+ while (baseNameOf(dirOf(canonPath(profileDir))) != "profiles")
+ profileDir = readLink(profileDir);
+
+ printInfo("found profile '%s'", profileDir);
+
+ Path userEnv = canonPath(profileDir, true);
if (baseNameOf(where) != "bin" ||
- !hasSuffix(userEnv = canonPath(profileDir = dirOf(where), true), "user-environment"))
+ !hasSuffix(userEnv, "user-environment"))
throw Error("directory '%s' does not appear to be part of a Nix profile", where);
if (!store->isValidPath(userEnv))