aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2005-04-07 14:35:01 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2005-04-07 14:35:01 +0000
commit10c429c757625c4c36319751f6d87b8990677c1f (patch)
treee72e2460f91040891a9937623b9bf81428bd57fe /src/libexpr
parentf9848d4f3122b8a43b69d53277b606806bdba9dd (diff)
* If store paths are specified as sources in Nix expressions, don't
copy them, but use them directly.
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/primops.cc26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 03d36638d..4f0a9f1bd 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -125,14 +125,24 @@ static void processBinding(EvalState & state, Expr e, Derivation & drv,
else if (matchPath(e, s)) {
Path srcPath(canonPath(aterm2String(s)));
- if (isDerivation(srcPath))
- throw Error(format("file names are not allowed to end in `%1%'")
- % drvExtension);
- Path dstPath(addToStore(srcPath));
- printMsg(lvlChatty, format("copied source `%1%' -> `%2%'")
- % srcPath % dstPath);
- drv.inputSrcs.insert(dstPath);
- ss.push_back(dstPath);
+
+ if (isStorePath(srcPath)) {
+ printMsg(lvlChatty, format("using store path `%1%' as source")
+ % srcPath);
+ drv.inputSrcs.insert(srcPath);
+ ss.push_back(srcPath);
+ }
+
+ else {
+ if (isDerivation(srcPath))
+ throw Error(format("file names are not allowed to end in `%1%'")
+ % drvExtension);
+ Path dstPath(addToStore(srcPath));
+ printMsg(lvlChatty, format("copied source `%1%' -> `%2%'")
+ % srcPath % dstPath);
+ drv.inputSrcs.insert(dstPath);
+ ss.push_back(dstPath);
+ }
}
else if (matchList(e, es)) {