* Allow the top-level expression to be a derivation.

* Hack: `nix-env -i *' installs all available derivations.
This commit is contained in:
Eelco Dolstra 2003-11-24 11:01:19 +00:00
parent 496934a99c
commit b857267893

View file

@ -53,15 +53,17 @@ bool parseDerivations(EvalState & state, Expr e, DrvInfos & drvs)
{ {
ATMatcher m; ATMatcher m;
ATermList es; ATermList es;
DrvInfo drv;
e = evalExpr(state, e); e = evalExpr(state, e);
if (atMatch(m, e) >> "Attrs") { if (parseDerivation(state, e, drv))
drvs[drv.drvPath] = drv;
else if (atMatch(m, e) >> "Attrs") {
ATermMap drvMap; ATermMap drvMap;
queryAllAttrs(e, drvMap); queryAllAttrs(e, drvMap);
for (ATermIterator i(drvMap.keys()); i; ++i) { for (ATermIterator i(drvMap.keys()); i; ++i) {
DrvInfo drv;
debug(format("evaluating attribute `%1%'") % *i); debug(format("evaluating attribute `%1%'") % *i);
if (parseDerivation(state, drvMap.get(*i), drv)) if (parseDerivation(state, drvMap.get(*i), drv))
drvs[drv.drvPath] = drv; drvs[drv.drvPath] = drv;
@ -70,7 +72,6 @@ bool parseDerivations(EvalState & state, Expr e, DrvInfos & drvs)
else if (atMatch(m, e) >> "List" >> es) { else if (atMatch(m, e) >> "List" >> es) {
for (ATermIterator i(es); i; ++i) { for (ATermIterator i(es); i; ++i) {
DrvInfo drv;
debug(format("evaluating list element")); debug(format("evaluating list element"));
if (parseDerivation(state, *i, drv)) if (parseDerivation(state, *i, drv))
drvs[drv.drvPath] = drv; drvs[drv.drvPath] = drv;
@ -243,14 +244,18 @@ void installDerivations(EvalState & state,
/* Filter out the ones we're not interested in. */ /* Filter out the ones we're not interested in. */
DrvInfos selectedDrvs; DrvInfos selectedDrvs;
for (Strings::iterator i = drvNames.begin(); if (drvNames.size() > 0 && drvNames.front() == "*") { /* !!! hack */
i != drvNames.end(); ++i) selectedDrvs = availDrvs;
{ } else {
NameMap::iterator j = nameMap.find(*i); for (Strings::iterator i = drvNames.begin();
if (j == nameMap.end()) i != drvNames.end(); ++i)
throw Error(format("unknown derivation `%1%'") % *i); {
else NameMap::iterator j = nameMap.find(*i);
selectedDrvs[j->second] = availDrvs[j->second]; if (j == nameMap.end())
throw Error(format("unknown derivation `%1%'") % *i);
else
selectedDrvs[j->second] = availDrvs[j->second];
}
} }
/* Add in the already installed derivations. */ /* Add in the already installed derivations. */