* An awful backwards compatibility hack.
This commit is contained in:
parent
3059df0f1e
commit
58ff6939f4
1 changed files with 24 additions and 0 deletions
|
@ -557,6 +557,30 @@ Expr evalExpr2(EvalState & state, Expr e)
|
||||||
if (matchOpPlus(e, e1, e2) || matchConcatStrings(e, es)) {
|
if (matchOpPlus(e, e1, e2) || matchConcatStrings(e, es)) {
|
||||||
ATermVector args;
|
ATermVector args;
|
||||||
if (matchOpPlus(e, e1, e2)) {
|
if (matchOpPlus(e, e1, e2)) {
|
||||||
|
|
||||||
|
/* !!! Awful compatibility hack for `drv + /path'.
|
||||||
|
According to regular concatenation, /path should be
|
||||||
|
copied to the store and its store path should be
|
||||||
|
appended to the string. However, in Nix <= 0.10, /path
|
||||||
|
was concatenated. So handle that case separately, but
|
||||||
|
do print out a warning. This code can go in Nix 0.12,
|
||||||
|
maybe. */
|
||||||
|
e1 = evalExpr(state, e1);
|
||||||
|
e2 = evalExpr(state, e2);
|
||||||
|
|
||||||
|
ATermList as;
|
||||||
|
ATerm p;
|
||||||
|
if (matchAttrs(e1, as) && matchPath(e2, p)) {
|
||||||
|
static bool haveWarned = false;
|
||||||
|
warnOnce(haveWarned,
|
||||||
|
"concatenation of a derivation and a path is deprecated, "
|
||||||
|
"you should write `drv + \"/path\"' instead of `drv + /path'");
|
||||||
|
PathSet context;
|
||||||
|
return makeStr(
|
||||||
|
coerceToString(state, makeSelect(e1, toATerm("outPath")), context)
|
||||||
|
+ aterm2String(p), context);
|
||||||
|
}
|
||||||
|
|
||||||
args.push_back(e1);
|
args.push_back(e1);
|
||||||
args.push_back(e2);
|
args.push_back(e2);
|
||||||
} else
|
} else
|
||||||
|
|
Loading…
Reference in a new issue