about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--scripts/nix-install-package.in2
-rw-r--r--src/nix-env/main.cc12
2 files changed, 12 insertions, 2 deletions
diff --git a/scripts/nix-install-package.in b/scripts/nix-install-package.in
index 35f6d6824838..dc46c8cb22cb 100644
--- a/scripts/nix-install-package.in
+++ b/scripts/nix-install-package.in
@@ -129,7 +129,7 @@ system("@bindir@/nix-pull", $manifestURL) == 0
 
 
 print "\nInstalling package...\n";
-system("@bindir@/nix-env", "--install", $outPath, @extraNixEnvArgs) == 0
+system("@bindir@/nix-env", "--install", $outPath, "--force-name", $drvName, @extraNixEnvArgs) == 0
     or barf "nix-env failed: $?";
 
 
diff --git a/src/nix-env/main.cc b/src/nix-env/main.cc
index 416f89bcc16d..6a4038715019 100644
--- a/src/nix-env/main.cc
+++ b/src/nix-env/main.cc
@@ -59,6 +59,7 @@ struct Globals
     bool dryRun;
     bool preserveInstalled;
     bool keepDerivations;
+    string forceName;
 };
 
 
@@ -448,8 +449,15 @@ static void installDerivations(Globals & globals,
     queryInstSources(globals.state, globals.instSource, args, newElems, true);
 
     StringSet newNames;
-    for (DrvInfos::iterator i = newElems.begin(); i != newElems.end(); ++i)
+    for (DrvInfos::iterator i = newElems.begin(); i != newElems.end(); ++i) {
+        /* `forceName' is a hack to get package names right in some
+           one-click installs, namely those where the name used in the
+           path is not the one we want (e.g., `java-front' versus
+           `java-front-0.9pre15899'). */
+        if (globals.forceName != "")
+            i->name = globals.forceName;
         newNames.insert(DrvName(i->name).name);
+    }
 
     /* Add in the already installed derivations, unless they have the
        same name as a to-be-installed element. */
@@ -1139,6 +1147,8 @@ void run(Strings args)
             Expr value = parseExprFromString(globals.state, *i, absPath("."));
             globals.instSource.autoArgs.set(toATerm(name), value);
         }
+        else if (arg == "--force-name") // undocumented flag for nix-install-package
+            globals.forceName = needArg(i, args, arg);
         else if (arg == "--uninstall" || arg == "-e")
             op = opUninstall;
         else if (arg == "--upgrade" || arg == "-u")