aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-08-04 09:32:42 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-08-04 09:32:42 +0000
commit315d8fbd7570532e008b03d50226f53fa9e460db (patch)
tree744a688b5fdc29828ac9260b91217308940c4260
parent6d6200f37afe10e8da3b08582a926245538af5d6 (diff)
* Set the default system filter to "*". This ensures that (for
instance) "nix-env -i wine" works on x86_64-linux, even though Wine is built on i686-linux. In the event that there are multiple matching derivations, prefer those built for the current system.
-rw-r--r--src/nix-env/nix-env.cc20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc
index 12a256a09..92ce41067 100644
--- a/src/nix-env/nix-env.cc
+++ b/src/nix-env/nix-env.cc
@@ -247,11 +247,12 @@ static DrvInfos filterBySelector(EvalState & state, const DrvInfos & allElems,
}
/* If `newestOnly', if a selector matches multiple derivations
- with the same name, pick the one with the highest priority.
- If there are multiple derivations with the same priority,
- pick the one with the highest version. If there are
- multiple derivations with the same priority and name and
- version, then pick the first one. */
+ with the same name, pick the one matching the current
+ system. If there are still multiple derivations, pick the
+ one with the highest priority. If there are still multiple
+ derivations, pick the one with the highest version.
+ Finally, if there are still multiple derivations,
+ arbitrarily pick the first one. */
if (newestOnly) {
/* Map from package names to derivations. */
@@ -266,7 +267,12 @@ static DrvInfos filterBySelector(EvalState & state, const DrvInfos & allElems,
Newest::iterator k = newest.find(drvName.name);
if (k != newest.end()) {
- d = comparePriorities(state, j->first, k->second.first);
+ d = j->first.system == k->second.first.system ? 0 :
+ j->first.system == thisSystem ? 1 :
+ k->second.first.system == thisSystem ? -1 : 0;
+ printMsg(lvlError, format("%1% %2% %3% %4%") % j->first.system % k->second.first.system % thisSystem % d);
+ if (d == 0)
+ d = comparePriorities(state, j->first, k->second.first);
if (d == 0)
d = compareVersions(drvName.version, DrvName(k->second.first.name).version);
}
@@ -1230,7 +1236,7 @@ void run(Strings args)
globals.instSource.type = srcUnknown;
globals.instSource.nixExprPath = getDefNixExprPath();
- globals.instSource.systemFilter = thisSystem;
+ globals.instSource.systemFilter = "*";
globals.dryRun = false;
globals.preserveInstalled = false;