snix/third_party/nix/src/libexpr/common-eval-args.cc
Vincent Ambo 838f86b0fd style(3p/nix): Remove 'using std::*' from types.hh
It is considered bad form to use things from includes in headers, as
these directives propagate to everywhere else and can make it
confusing.

types.hh (which is includes almost literally everywhere) had some of
these directives, which this commit removes.
2020-05-24 22:29:21 +01:00

64 lines
1.7 KiB
C++

#include "common-eval-args.hh"
#include "download.hh"
#include "eval.hh"
#include "shared.hh"
#include "util.hh"
namespace nix {
MixEvalArgs::MixEvalArgs() {
mkFlag()
.longName("arg")
.description("argument to be passed to Nix functions")
.labels({"name", "expr"})
.handler(
[&](std::vector<std::string> ss) { autoArgs[ss[0]] = 'E' + ss[1]; });
mkFlag()
.longName("argstr")
.description("string-valued argument to be passed to Nix functions")
.labels({"name", "string"})
.handler(
[&](std::vector<std::string> ss) { autoArgs[ss[0]] = 'S' + ss[1]; });
mkFlag()
.shortName('I')
.longName("include")
.description(
"add a path to the list of locations used to look up <...> file "
"names")
.label("path")
.handler([&](const std::string& s) { searchPath.push_back(s); });
}
Bindings* MixEvalArgs::getAutoArgs(EvalState& state) {
Bindings* res = Bindings::NewGC();
for (auto& i : autoArgs) {
Value* v = state.allocValue();
if (i.second[0] == 'E') {
state.mkThunk_(*v, state.parseExprFromString(std::string(i.second, 1),
absPath(".")));
} else {
mkString(*v, std::string(i.second, 1));
}
res->push_back(Attr(state.symbols.Create(i.first), v));
}
return res;
}
Path lookupFileArg(EvalState& state, std::string s) {
if (isUri(s)) {
CachedDownloadRequest request(s);
request.unpack = true;
return getDownloader()->downloadCached(state.store, request).path;
}
if (s.size() > 2 && s.at(0) == '<' && s.at(s.size() - 1) == '>') {
Path p = s.substr(1, s.size() - 2);
return state.findFile(p);
} else {
return absPath(s);
}
}
} // namespace nix