style(3p/nix): Add braces around single-line conditionals
These were not caught by the previous clang-tidy invocation, but were
instead sorted out using amber[0] as such:
ambr --regex 'if (\(.+\))\s([a-z].*;)' 'if $1 { $2 }'
[0]: https://github.com/dalance/amber
This commit is contained in:
parent
c6a31838cd
commit
867055133d
97 changed files with 2223 additions and 753 deletions
12
third_party/nix/src/libexpr/attr-path.cc
vendored
12
third_party/nix/src/libexpr/attr-path.cc
vendored
|
|
@ -19,14 +19,18 @@ static Strings parseAttrPath(const string& s) {
|
|||
if (i == s.end())
|
||||
throw Error(format("missing closing quote in selection path '%1%'") %
|
||||
s);
|
||||
if (*i == '"') break;
|
||||
if (*i == '"') {
|
||||
break;
|
||||
}
|
||||
cur.push_back(*i++);
|
||||
}
|
||||
} else
|
||||
cur.push_back(*i);
|
||||
++i;
|
||||
}
|
||||
if (!cur.empty()) res.push_back(cur);
|
||||
if (!cur.empty()) {
|
||||
res.push_back(cur);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +48,9 @@ Value* findAlongAttrPath(EvalState& state, const string& attrPath,
|
|||
/* Is i an index (integer) or a normal attribute name? */
|
||||
enum { apAttr, apIndex } apType = apAttr;
|
||||
unsigned int attrIndex;
|
||||
if (string2Int(attr, attrIndex)) apType = apIndex;
|
||||
if (string2Int(attr, attrIndex)) {
|
||||
apType = apIndex;
|
||||
}
|
||||
|
||||
/* Evaluate the expression. */
|
||||
Value* vNew = state.allocValue();
|
||||
|
|
|
|||
4
third_party/nix/src/libexpr/attr-set.hh
vendored
4
third_party/nix/src/libexpr/attr-set.hh
vendored
|
|
@ -51,7 +51,9 @@ class Bindings {
|
|||
iterator find(const Symbol& name) {
|
||||
Attr key(name, 0);
|
||||
iterator i = std::lower_bound(begin(), end(), key);
|
||||
if (i != end() && i->name == name) return i;
|
||||
if (i != end() && i->name == name) {
|
||||
return i;
|
||||
}
|
||||
return end();
|
||||
}
|
||||
|
||||
|
|
|
|||
4
third_party/nix/src/libexpr/eval-inline.hh
vendored
4
third_party/nix/src/libexpr/eval-inline.hh
vendored
|
|
@ -81,7 +81,9 @@ inline void* allocBytes(size_t n) {
|
|||
#else
|
||||
p = calloc(n, 1);
|
||||
#endif
|
||||
if (!p) throw std::bad_alloc();
|
||||
if (!p) {
|
||||
throw std::bad_alloc();
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
|
|
|
|||
132
third_party/nix/src/libexpr/eval.cc
vendored
132
third_party/nix/src/libexpr/eval.cc
vendored
|
|
@ -37,7 +37,9 @@ static char* dupString(const char* s) {
|
|||
#else
|
||||
t = strdup(s);
|
||||
#endif
|
||||
if (!t) throw std::bad_alloc();
|
||||
if (!t) {
|
||||
throw std::bad_alloc();
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
|
|
@ -201,7 +203,9 @@ static Symbol getName(const AttrName& name, EvalState& state, Env& env) {
|
|||
static bool gcInitialised = false;
|
||||
|
||||
void initGC() {
|
||||
if (gcInitialised) return;
|
||||
if (gcInitialised) {
|
||||
return;
|
||||
}
|
||||
|
||||
#if HAVE_BOEHMGC
|
||||
/* Initialise the Boehm garbage collector. */
|
||||
|
|
@ -233,8 +237,12 @@ void initGC() {
|
|||
size_t maxSize = 384 * 1024 * 1024;
|
||||
long pageSize = sysconf(_SC_PAGESIZE);
|
||||
long pages = sysconf(_SC_PHYS_PAGES);
|
||||
if (pageSize != -1) size = (pageSize * pages) / 4; // 25% of RAM
|
||||
if (size > maxSize) size = maxSize;
|
||||
if (pageSize != -1) {
|
||||
size = (pageSize * pages) / 4;
|
||||
} // 25% of RAM
|
||||
if (size > maxSize) {
|
||||
size = maxSize;
|
||||
}
|
||||
#endif
|
||||
DLOG(INFO) << "setting initial heap size to " << size << " bytes";
|
||||
GC_expand_hp(size);
|
||||
|
|
@ -257,12 +265,16 @@ static Strings parseNixPath(const string& s) {
|
|||
auto start2 = p;
|
||||
|
||||
while (p != s.end() && *p != ':') {
|
||||
if (*p == '=') start2 = p + 1;
|
||||
if (*p == '=') {
|
||||
start2 = p + 1;
|
||||
}
|
||||
++p;
|
||||
}
|
||||
|
||||
if (p == s.end()) {
|
||||
if (p != start) res.push_back(std::string(start, p));
|
||||
if (p != start) {
|
||||
res.push_back(std::string(start, p));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -272,7 +284,9 @@ static Strings parseNixPath(const string& s) {
|
|||
while (p != s.end() && *p != ':') ++p;
|
||||
}
|
||||
res.push_back(std::string(start, p));
|
||||
if (p == s.end()) break;
|
||||
if (p == s.end()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
++p;
|
||||
|
|
@ -331,7 +345,9 @@ EvalState::EvalState(const Strings& _searchPath, ref<Store> store)
|
|||
|
||||
for (auto& i : searchPath) {
|
||||
auto r = resolveSearchPathElem(i);
|
||||
if (!r.first) continue;
|
||||
if (!r.first) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto path = r.second;
|
||||
|
||||
|
|
@ -354,10 +370,14 @@ EvalState::EvalState(const Strings& _searchPath, ref<Store> store)
|
|||
EvalState::~EvalState() {}
|
||||
|
||||
Path EvalState::checkSourcePath(const Path& path_) {
|
||||
if (!allowedPaths) return path_;
|
||||
if (!allowedPaths) {
|
||||
return path_;
|
||||
}
|
||||
|
||||
auto i = resolvedPaths.find(path_);
|
||||
if (i != resolvedPaths.end()) return i->second;
|
||||
if (i != resolvedPaths.end()) {
|
||||
return i->second;
|
||||
}
|
||||
|
||||
bool found = false;
|
||||
|
||||
|
|
@ -394,7 +414,9 @@ Path EvalState::checkSourcePath(const Path& path_) {
|
|||
}
|
||||
|
||||
void EvalState::checkURI(const std::string& uri) {
|
||||
if (!evalSettings.restrictEval) return;
|
||||
if (!evalSettings.restrictEval) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* 'uri' should be equal to a prefix, or in a subdirectory of a
|
||||
prefix. Thus, the prefix https://github.co does not permit
|
||||
|
|
@ -565,7 +587,9 @@ inline Value* EvalState::lookupVar(Env* env, const ExprVar& var, bool noEval) {
|
|||
}
|
||||
Bindings::iterator j = env->values[0]->attrs->find(var.name);
|
||||
if (j != env->values[0]->attrs->end()) {
|
||||
if (countCalls && j->pos) attrSelects[*j->pos]++;
|
||||
if (countCalls && j->pos) {
|
||||
attrSelects[*j->pos]++;
|
||||
}
|
||||
return j->value;
|
||||
}
|
||||
if (!env->prevWith)
|
||||
|
|
@ -703,7 +727,9 @@ void EvalState::evalFile(const Path& path_, Value& v) {
|
|||
Expr* e = nullptr;
|
||||
|
||||
auto j = fileParseCache.find(path2);
|
||||
if (j != fileParseCache.end()) e = j->second;
|
||||
if (j != fileParseCache.end()) {
|
||||
e = j->second;
|
||||
}
|
||||
|
||||
if (!e) {
|
||||
e = parseExprFromFile(checkSourcePath(path2));
|
||||
|
|
@ -719,7 +745,9 @@ void EvalState::evalFile(const Path& path_, Value& v) {
|
|||
}
|
||||
|
||||
fileEvalCache[path2] = v;
|
||||
if (path != path2) fileEvalCache[path] = v;
|
||||
if (path != path2) {
|
||||
fileEvalCache[path] = v;
|
||||
}
|
||||
}
|
||||
|
||||
void EvalState::resetFileCache() {
|
||||
|
|
@ -831,7 +859,9 @@ void ExprAttrs::eval(EvalState& state, Env& env, Value& v) {
|
|||
Value nameVal;
|
||||
i.nameExpr->eval(state, *dynamicEnv, nameVal);
|
||||
state.forceValue(nameVal, i.pos);
|
||||
if (nameVal.type == tNull) continue;
|
||||
if (nameVal.type == tNull) {
|
||||
continue;
|
||||
}
|
||||
state.forceStringNoCtx(nameVal);
|
||||
Symbol nameSym = state.symbols.create(nameVal.string.s);
|
||||
Bindings::iterator j = v.attrs->find(nameSym);
|
||||
|
|
@ -923,7 +953,9 @@ void ExprSelect::eval(EvalState& state, Env& env, Value& v) {
|
|||
}
|
||||
vAttrs = j->value;
|
||||
pos2 = j->pos;
|
||||
if (state.countCalls && pos2) state.attrSelects[*pos2]++;
|
||||
if (state.countCalls && pos2) {
|
||||
state.attrSelects[*pos2]++;
|
||||
}
|
||||
}
|
||||
|
||||
state.forceValue(*vAttrs, (pos2 != NULL ? *pos2 : this->pos));
|
||||
|
|
@ -999,7 +1031,9 @@ void EvalState::callPrimOp(Value& fun, Value& arg, Value& v, const Pos& pos) {
|
|||
|
||||
/* And call the primop. */
|
||||
nrPrimOpCalls++;
|
||||
if (countCalls) primOpCalls[primOp->primOp->name]++;
|
||||
if (countCalls) {
|
||||
primOpCalls[primOp->primOp->name]++;
|
||||
}
|
||||
primOp->primOp->fun(*this, pos, vArgs, v);
|
||||
} else {
|
||||
Value* fun2 = allocValue();
|
||||
|
|
@ -1059,7 +1093,9 @@ void EvalState::callFunction(Value& fun, Value& arg, Value& v, const Pos& pos) {
|
|||
} else {
|
||||
forceAttrs(arg, pos);
|
||||
|
||||
if (!lambda.arg.empty()) env2.values[displ++] = &arg;
|
||||
if (!lambda.arg.empty()) {
|
||||
env2.values[displ++] = &arg;
|
||||
}
|
||||
|
||||
/* For each formal argument, get the actual argument. If
|
||||
there is no matching actual argument but the formal
|
||||
|
|
@ -1283,7 +1319,9 @@ void EvalState::concatLists(Value& v, size_t nrLists, Value** lists,
|
|||
auto out = v.listElems();
|
||||
for (size_t n = 0, pos = 0; n < nrLists; ++n) {
|
||||
auto l = lists[n]->listSize();
|
||||
if (l) memcpy(out + pos, lists[n]->listElems(), l * sizeof(Value*));
|
||||
if (l) {
|
||||
memcpy(out + pos, lists[n]->listElems(), l * sizeof(Value*));
|
||||
}
|
||||
pos += l;
|
||||
}
|
||||
}
|
||||
|
|
@ -1361,7 +1399,9 @@ void EvalState::forceValueDeep(Value& v) {
|
|||
std::function<void(Value & v)> recurse;
|
||||
|
||||
recurse = [&](Value& v) {
|
||||
if (seen.find(&v) != seen.end()) return;
|
||||
if (seen.find(&v) != seen.end()) {
|
||||
return;
|
||||
}
|
||||
seen.insert(&v);
|
||||
|
||||
forceValue(v);
|
||||
|
|
@ -1526,11 +1566,21 @@ string EvalState::coerceToString(const Pos& pos, Value& v, PathSet& context,
|
|||
if (coerceMore) {
|
||||
/* Note that `false' is represented as an empty string for
|
||||
shell scripting convenience, just like `null'. */
|
||||
if (v.type == tBool && v.boolean) return "1";
|
||||
if (v.type == tBool && !v.boolean) return "";
|
||||
if (v.type == tInt) return std::to_string(v.integer);
|
||||
if (v.type == tFloat) return std::to_string(v.fpoint);
|
||||
if (v.type == tNull) return "";
|
||||
if (v.type == tBool && v.boolean) {
|
||||
return "1";
|
||||
}
|
||||
if (v.type == tBool && !v.boolean) {
|
||||
return "";
|
||||
}
|
||||
if (v.type == tInt) {
|
||||
return std::to_string(v.integer);
|
||||
}
|
||||
if (v.type == tFloat) {
|
||||
return std::to_string(v.fpoint);
|
||||
}
|
||||
if (v.type == tNull) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (v.isList()) {
|
||||
string result;
|
||||
|
|
@ -1654,7 +1704,9 @@ bool EvalState::eqValues(Value& v1, Value& v2) {
|
|||
Bindings::iterator i, j;
|
||||
for (i = v1.attrs->begin(), j = v2.attrs->begin(); i != v1.attrs->end();
|
||||
++i, ++j) {
|
||||
if (i->name != j->name || !eqValues(*i->value, *j->value)) return false;
|
||||
if (i->name != j->name || !eqValues(*i->value, *j->value)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -1697,7 +1749,9 @@ void EvalState::printStats() {
|
|||
if (showStats) {
|
||||
auto outPath = getEnv("NIX_SHOW_STATS_PATH", "-");
|
||||
std::fstream fs;
|
||||
if (outPath != "-") fs.open(outPath, std::fstream::out);
|
||||
if (outPath != "-") {
|
||||
fs.open(outPath, std::fstream::out);
|
||||
}
|
||||
JSONObject topObj(outPath == "-" ? std::cerr : fs, true);
|
||||
topObj.attr("cpuTime", cpuTime);
|
||||
{
|
||||
|
|
@ -1796,7 +1850,9 @@ size_t valueSize(Value& v) {
|
|||
std::set<const void*> seen;
|
||||
|
||||
auto doString = [&](const char* s) -> size_t {
|
||||
if (seen.find(s) != seen.end()) return 0;
|
||||
if (seen.find(s) != seen.end()) {
|
||||
return 0;
|
||||
}
|
||||
seen.insert(s);
|
||||
return strlen(s) + 1;
|
||||
};
|
||||
|
|
@ -1805,7 +1861,9 @@ size_t valueSize(Value& v) {
|
|||
std::function<size_t(Env & v)> doEnv;
|
||||
|
||||
doValue = [&](Value& v) -> size_t {
|
||||
if (seen.find(&v) != seen.end()) return 0;
|
||||
if (seen.find(&v) != seen.end()) {
|
||||
return 0;
|
||||
}
|
||||
seen.insert(&v);
|
||||
|
||||
size_t sz = sizeof(Value);
|
||||
|
|
@ -1851,7 +1909,9 @@ size_t valueSize(Value& v) {
|
|||
sz += doValue(*v.primOpApp.right);
|
||||
break;
|
||||
case tExternal:
|
||||
if (seen.find(v.external) != seen.end()) break;
|
||||
if (seen.find(v.external) != seen.end()) {
|
||||
break;
|
||||
}
|
||||
seen.insert(v.external);
|
||||
sz += v.external->valueSize(seen);
|
||||
break;
|
||||
|
|
@ -1862,16 +1922,22 @@ size_t valueSize(Value& v) {
|
|||
};
|
||||
|
||||
doEnv = [&](Env& env) -> size_t {
|
||||
if (seen.find(&env) != seen.end()) return 0;
|
||||
if (seen.find(&env) != seen.end()) {
|
||||
return 0;
|
||||
}
|
||||
seen.insert(&env);
|
||||
|
||||
size_t sz = sizeof(Env) + sizeof(Value*) * env.size;
|
||||
|
||||
if (env.type != Env::HasWithExpr)
|
||||
for (size_t i = 0; i < env.size; ++i)
|
||||
if (env.values[i]) sz += doValue(*env.values[i]);
|
||||
if (env.values[i]) {
|
||||
sz += doValue(*env.values[i]);
|
||||
}
|
||||
|
||||
if (env.up) sz += doEnv(*env.up);
|
||||
if (env.up) {
|
||||
sz += doEnv(*env.up);
|
||||
}
|
||||
|
||||
return sz;
|
||||
};
|
||||
|
|
|
|||
52
third_party/nix/src/libexpr/get-drvs.cc
vendored
52
third_party/nix/src/libexpr/get-drvs.cc
vendored
|
|
@ -44,7 +44,9 @@ DrvInfo::DrvInfo(EvalState& state, ref<Store> store,
|
|||
string DrvInfo::queryName() const {
|
||||
if (name == "" && attrs) {
|
||||
auto i = attrs->find(state->sName);
|
||||
if (i == attrs->end()) throw TypeError("derivation name missing");
|
||||
if (i == attrs->end()) {
|
||||
throw TypeError("derivation name missing");
|
||||
}
|
||||
name = state->forceStringNoCtx(*i->value);
|
||||
}
|
||||
return name;
|
||||
|
|
@ -122,13 +124,19 @@ DrvInfo::Outputs DrvInfo::queryOutputs(bool onlyOutputsToInstall) {
|
|||
}
|
||||
const auto errMsg = Error("this derivation has bad 'meta.outputsToInstall'");
|
||||
/* ^ this shows during `nix-env -i` right under the bad derivation */
|
||||
if (!outTI->isList()) throw errMsg;
|
||||
if (!outTI->isList()) {
|
||||
throw errMsg;
|
||||
}
|
||||
Outputs result;
|
||||
for (auto i = outTI->listElems(); i != outTI->listElems() + outTI->listSize();
|
||||
++i) {
|
||||
if ((*i)->type != tString) throw errMsg;
|
||||
if ((*i)->type != tString) {
|
||||
throw errMsg;
|
||||
}
|
||||
auto out = outputs.find((*i)->string.s);
|
||||
if (out == outputs.end()) throw errMsg;
|
||||
if (out == outputs.end()) {
|
||||
throw errMsg;
|
||||
}
|
||||
result.insert(*out);
|
||||
}
|
||||
return result;
|
||||
|
|
@ -206,7 +214,9 @@ Value* DrvInfo::queryMeta(const string& name) {
|
|||
|
||||
string DrvInfo::queryMetaString(const string& name) {
|
||||
Value* v = queryMeta(name);
|
||||
if (!v || v->type != tString) return "";
|
||||
if (!v || v->type != tString) {
|
||||
return "";
|
||||
}
|
||||
return v->string.s;
|
||||
}
|
||||
|
||||
|
|
@ -222,7 +232,9 @@ NixInt DrvInfo::queryMetaInt(const string& name, NixInt def) {
|
|||
/* Backwards compatibility with before we had support for
|
||||
integer meta fields. */
|
||||
NixInt n;
|
||||
if (string2Int(v->string.s, n)) return n;
|
||||
if (string2Int(v->string.s, n)) {
|
||||
return n;
|
||||
}
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
|
@ -239,7 +251,9 @@ NixFloat DrvInfo::queryMetaFloat(const string& name, NixFloat def) {
|
|||
/* Backwards compatibility with before we had support for
|
||||
float meta fields. */
|
||||
NixFloat n;
|
||||
if (string2Float(v->string.s, n)) return n;
|
||||
if (string2Float(v->string.s, n)) {
|
||||
return n;
|
||||
}
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
|
@ -255,8 +269,12 @@ bool DrvInfo::queryMetaBool(const string& name, bool def) {
|
|||
if (v->type == tString) {
|
||||
/* Backwards compatibility with before we had support for
|
||||
Boolean meta fields. */
|
||||
if (strcmp(v->string.s, "true") == 0) return true;
|
||||
if (strcmp(v->string.s, "false") == 0) return false;
|
||||
if (strcmp(v->string.s, "true") == 0) {
|
||||
return true;
|
||||
}
|
||||
if (strcmp(v->string.s, "false") == 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
|
@ -268,7 +286,9 @@ void DrvInfo::setMeta(const string& name, Value* v) {
|
|||
Symbol sym = state->symbols.create(name);
|
||||
if (old) {
|
||||
for (auto i : *old) {
|
||||
if (i.name != sym) meta->push_back(i);
|
||||
if (i.name != sym) {
|
||||
meta->push_back(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (v) {
|
||||
|
|
@ -295,7 +315,9 @@ static bool getDerivation(EvalState& state, Value& v, const string& attrPath,
|
|||
|
||||
/* Remove spurious duplicates (e.g., a set like `rec { x =
|
||||
derivation {...}; y = x;}'. */
|
||||
if (done.find(v.attrs) != done.end()) return false;
|
||||
if (done.find(v.attrs) != done.end()) {
|
||||
return false;
|
||||
}
|
||||
done.insert(v.attrs);
|
||||
|
||||
DrvInfo drv(state, attrPath, v.attrs);
|
||||
|
|
@ -319,7 +341,9 @@ std::optional<DrvInfo> getDerivation(EvalState& state, Value& v,
|
|||
Done done;
|
||||
DrvInfos drvs;
|
||||
getDerivation(state, v, "", drvs, done, ignoreAssertionFailures);
|
||||
if (drvs.size() != 1) return {};
|
||||
if (drvs.size() != 1) {
|
||||
return {};
|
||||
}
|
||||
return std::move(drvs.front());
|
||||
}
|
||||
|
||||
|
|
@ -354,7 +378,9 @@ static void getDerivations(EvalState& state, Value& vIn,
|
|||
precedence). */
|
||||
for (auto& i : v.attrs->lexicographicOrder()) {
|
||||
DLOG(INFO) << "evaluating attribute '" << i->name << "'";
|
||||
if (!std::regex_match(std::string(i->name), attrRegex)) continue;
|
||||
if (!std::regex_match(std::string(i->name), attrRegex)) {
|
||||
continue;
|
||||
}
|
||||
string pathPrefix2 = addToPath(pathPrefix, i->name);
|
||||
if (combineChannels)
|
||||
getDerivations(state, *i->value, pathPrefix2, autoArgs, drvs, done,
|
||||
|
|
|
|||
28
third_party/nix/src/libexpr/json-to-value.cc
vendored
28
third_party/nix/src/libexpr/json-to-value.cc
vendored
|
|
@ -12,9 +12,13 @@ static void skipWhitespace(const char*& s) {
|
|||
|
||||
static string parseJSONString(const char*& s) {
|
||||
string res;
|
||||
if (*s++ != '"') throw JSONParseError("expected JSON string");
|
||||
if (*s++ != '"') {
|
||||
throw JSONParseError("expected JSON string");
|
||||
}
|
||||
while (*s != '"') {
|
||||
if (!*s) throw JSONParseError("got end-of-string in JSON string");
|
||||
if (!*s) {
|
||||
throw JSONParseError("got end-of-string in JSON string");
|
||||
}
|
||||
if (*s == '\\') {
|
||||
s++;
|
||||
if (*s == '"')
|
||||
|
|
@ -52,7 +56,9 @@ static string parseJSONString(const char*& s) {
|
|||
static void parseJSON(EvalState& state, const char*& s, Value& v) {
|
||||
skipWhitespace(s);
|
||||
|
||||
if (!*s) throw JSONParseError("expected JSON value");
|
||||
if (!*s) {
|
||||
throw JSONParseError("expected JSON value");
|
||||
}
|
||||
|
||||
if (*s == '[') {
|
||||
s++;
|
||||
|
|
@ -60,7 +66,9 @@ static void parseJSON(EvalState& state, const char*& s, Value& v) {
|
|||
values.reserve(128);
|
||||
skipWhitespace(s);
|
||||
while (1) {
|
||||
if (values.empty() && *s == ']') break;
|
||||
if (values.empty() && *s == ']') {
|
||||
break;
|
||||
}
|
||||
Value* v2 = state.allocValue();
|
||||
parseJSON(state, s, *v2);
|
||||
values.push_back(v2);
|
||||
|
|
@ -82,10 +90,14 @@ static void parseJSON(EvalState& state, const char*& s, Value& v) {
|
|||
ValueMap attrs;
|
||||
while (1) {
|
||||
skipWhitespace(s);
|
||||
if (attrs.empty() && *s == '}') break;
|
||||
if (attrs.empty() && *s == '}') {
|
||||
break;
|
||||
}
|
||||
string name = parseJSONString(s);
|
||||
skipWhitespace(s);
|
||||
if (*s != ':') throw JSONParseError("expected ':' in JSON object");
|
||||
if (*s != ':') {
|
||||
throw JSONParseError("expected ':' in JSON object");
|
||||
}
|
||||
s++;
|
||||
Value* v2 = state.allocValue();
|
||||
parseJSON(state, s, *v2);
|
||||
|
|
@ -114,7 +126,9 @@ static void parseJSON(EvalState& state, const char*& s, Value& v) {
|
|||
ValueType number_type = tInt;
|
||||
|
||||
while (isdigit(*s) || *s == '-' || *s == '.' || *s == 'e' || *s == 'E') {
|
||||
if (*s == '.' || *s == 'e' || *s == 'E') number_type = tFloat;
|
||||
if (*s == '.' || *s == 'e' || *s == 'E') {
|
||||
number_type = tFloat;
|
||||
}
|
||||
tmp_number += *s++;
|
||||
}
|
||||
|
||||
|
|
|
|||
8
third_party/nix/src/libexpr/lexer.l
vendored
8
third_party/nix/src/libexpr/lexer.l
vendored
|
|
@ -60,15 +60,15 @@ static Expr * unescapeStr(SymbolTable & symbols, const char * s, size_t length)
|
|||
if (c == '\\') {
|
||||
assert(*s);
|
||||
c = *s++;
|
||||
if (c == 'n') t += '\n';
|
||||
else if (c == 'r') t += '\r';
|
||||
else if (c == 't') t += '\t';
|
||||
if (c == 'n') { t += '\n'; }
|
||||
else if (c == 'r') { t += '\r'; }
|
||||
else if (c == 't') { t += '\t'; }
|
||||
else t += c;
|
||||
}
|
||||
else if (c == '\r') {
|
||||
/* Normalise CR and CR/LF into LF. */
|
||||
t += '\n';
|
||||
if (*s == '\n') s++; /* cr/lf */
|
||||
if (*s == '\n') { s++; } /* cr/lf */
|
||||
}
|
||||
else t += c;
|
||||
}
|
||||
|
|
|
|||
12
third_party/nix/src/libexpr/names.cc
vendored
12
third_party/nix/src/libexpr/names.cc
vendored
|
|
@ -28,9 +28,13 @@ bool DrvName::matches(DrvName& n) {
|
|||
if (!regex)
|
||||
regex = std::unique_ptr<std::regex>(
|
||||
new std::regex(name, std::regex::extended));
|
||||
if (!std::regex_match(n.name, *regex)) return false;
|
||||
if (!std::regex_match(n.name, *regex)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (version != "" && version != n.version) {
|
||||
return false;
|
||||
}
|
||||
if (version != "" && version != n.version) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -39,7 +43,9 @@ string nextComponent(string::const_iterator& p,
|
|||
/* Skip any dots and dashes (component separators). */
|
||||
while (p != end && (*p == '.' || *p == '-')) ++p;
|
||||
|
||||
if (p == end) return "";
|
||||
if (p == end) {
|
||||
return "";
|
||||
}
|
||||
|
||||
/* If the first character is a digit, consume the longest sequence
|
||||
of digits. Otherwise, consume the longest sequence of
|
||||
|
|
|
|||
36
third_party/nix/src/libexpr/nixexpr.cc
vendored
36
third_party/nix/src/libexpr/nixexpr.cc
vendored
|
|
@ -70,7 +70,9 @@ void ExprVar::show(std::ostream& str) const { str << name; }
|
|||
|
||||
void ExprSelect::show(std::ostream& str) const {
|
||||
str << "(" << *e << ")." << showAttrPath(attrPath);
|
||||
if (def) str << " or (" << *def << ")";
|
||||
if (def) {
|
||||
str << " or (" << *def << ")";
|
||||
}
|
||||
}
|
||||
|
||||
void ExprOpHasAttr::show(std::ostream& str) const {
|
||||
|
|
@ -78,7 +80,9 @@ void ExprOpHasAttr::show(std::ostream& str) const {
|
|||
}
|
||||
|
||||
void ExprAttrs::show(std::ostream& str) const {
|
||||
if (recursive) str << "rec ";
|
||||
if (recursive) {
|
||||
str << "rec ";
|
||||
}
|
||||
str << "{ ";
|
||||
for (auto& i : attrs)
|
||||
if (i.second.inherited)
|
||||
|
|
@ -108,16 +112,24 @@ void ExprLambda::show(std::ostream& str) const {
|
|||
else
|
||||
str << ", ";
|
||||
str << i.name;
|
||||
if (i.def) str << " ? " << *i.def;
|
||||
if (i.def) {
|
||||
str << " ? " << *i.def;
|
||||
}
|
||||
}
|
||||
if (formals->ellipsis) {
|
||||
if (!first) str << ", ";
|
||||
if (!first) {
|
||||
str << ", ";
|
||||
}
|
||||
str << "...";
|
||||
}
|
||||
str << " }";
|
||||
if (!arg.empty()) str << " @ ";
|
||||
if (!arg.empty()) {
|
||||
str << " @ ";
|
||||
}
|
||||
}
|
||||
if (!arg.empty()) {
|
||||
str << arg;
|
||||
}
|
||||
if (!arg.empty()) str << arg;
|
||||
str << ": " << *body << ")";
|
||||
}
|
||||
|
||||
|
|
@ -239,13 +251,17 @@ void ExprSelect::bindVars(const StaticEnv& env) {
|
|||
def->bindVars(env);
|
||||
}
|
||||
for (auto& i : attrPath)
|
||||
if (!i.symbol.set()) i.expr->bindVars(env);
|
||||
if (!i.symbol.set()) {
|
||||
i.expr->bindVars(env);
|
||||
}
|
||||
}
|
||||
|
||||
void ExprOpHasAttr::bindVars(const StaticEnv& env) {
|
||||
e->bindVars(env);
|
||||
for (auto& i : attrPath)
|
||||
if (!i.symbol.set()) i.expr->bindVars(env);
|
||||
if (!i.symbol.set()) {
|
||||
i.expr->bindVars(env);
|
||||
}
|
||||
}
|
||||
|
||||
void ExprAttrs::bindVars(const StaticEnv& env) {
|
||||
|
|
@ -296,7 +312,9 @@ void ExprLambda::bindVars(const StaticEnv& env) {
|
|||
}
|
||||
|
||||
for (auto& i : formals->formals)
|
||||
if (i.def) i.def->bindVars(newEnv);
|
||||
if (i.def) {
|
||||
i.def->bindVars(newEnv);
|
||||
}
|
||||
}
|
||||
|
||||
body->bindVars(newEnv);
|
||||
|
|
|
|||
20
third_party/nix/src/libexpr/parser.y
vendored
20
third_party/nix/src/libexpr/parser.y
vendored
|
|
@ -89,7 +89,7 @@ static void addAttr(ExprAttrs * attrs, AttrPath & attrPath,
|
|||
if (j != attrs->attrs.end()) {
|
||||
if (!j->second.inherited) {
|
||||
ExprAttrs * attrs2 = dynamic_cast<ExprAttrs *>(j->second.e);
|
||||
if (!attrs2) dupAttr(attrPath, pos, j->second.pos);
|
||||
if (!attrs2) { dupAttr(attrPath, pos, j->second.pos); }
|
||||
attrs = attrs2;
|
||||
} else
|
||||
dupAttr(attrPath, pos, j->second.pos);
|
||||
|
|
@ -148,7 +148,7 @@ static void addFormal(const Pos & pos, Formals * formals, const Formal & formal)
|
|||
|
||||
static Expr * stripIndentation(const Pos & pos, SymbolTable & symbols, vector<Expr *> & es)
|
||||
{
|
||||
if (es.empty()) return new ExprString(symbols.create(""));
|
||||
if (es.empty()) { return new ExprString(symbols.create("")); }
|
||||
|
||||
/* Figure out the minimum indentation. Note that by design
|
||||
whitespace-only final lines are not taken into account. (So
|
||||
|
|
@ -162,7 +162,7 @@ static Expr * stripIndentation(const Pos & pos, SymbolTable & symbols, vector<Ex
|
|||
/* Anti-quotations end the current start-of-line whitespace. */
|
||||
if (atStartOfLine) {
|
||||
atStartOfLine = false;
|
||||
if (curIndent < minIndent) minIndent = curIndent;
|
||||
if (curIndent < minIndent) { minIndent = curIndent; }
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
|
@ -176,7 +176,7 @@ static Expr * stripIndentation(const Pos & pos, SymbolTable & symbols, vector<Ex
|
|||
curIndent = 0;
|
||||
} else {
|
||||
atStartOfLine = false;
|
||||
if (curIndent < minIndent) minIndent = curIndent;
|
||||
if (curIndent < minIndent) { minIndent = curIndent; }
|
||||
}
|
||||
} else if (e->s[j] == '\n') {
|
||||
atStartOfLine = true;
|
||||
|
|
@ -216,7 +216,7 @@ static Expr * stripIndentation(const Pos & pos, SymbolTable & symbols, vector<Ex
|
|||
}
|
||||
} else {
|
||||
s2 += e->s[j];
|
||||
if (e->s[j] == '\n') atStartOfLine = true;
|
||||
if (e->s[j] == '\n') { atStartOfLine = true; }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -559,7 +559,7 @@ Expr * EvalState::parse(const char * text,
|
|||
int res = yyparse(scanner, &data);
|
||||
yylex_destroy(scanner);
|
||||
|
||||
if (res) throw ParseError(data.error);
|
||||
if (res) { throw ParseError(data.error); }
|
||||
|
||||
data.result->bindVars(staticEnv);
|
||||
|
||||
|
|
@ -577,7 +577,7 @@ Path resolveExprPath(Path path)
|
|||
while (true) {
|
||||
if (lstat(path.c_str(), &st))
|
||||
throw SysError(format("getting status of '%1%'") % path);
|
||||
if (!S_ISLNK(st.st_mode)) break;
|
||||
if (!S_ISLNK(st.st_mode)) { break; }
|
||||
path = absPath(readLink(path), dirOf(path));
|
||||
}
|
||||
|
||||
|
|
@ -656,9 +656,9 @@ Path EvalState::findFile(SearchPath & searchPath, const string & path, const Pos
|
|||
suffix = path.size() == s ? "" : "/" + string(path, s);
|
||||
}
|
||||
auto r = resolveSearchPathElem(i);
|
||||
if (!r.first) continue;
|
||||
if (!r.first) { continue; }
|
||||
Path res = r.second + suffix;
|
||||
if (pathExists(res)) return canonPath(res);
|
||||
if (pathExists(res)) { return canonPath(res); }
|
||||
}
|
||||
format f = format(
|
||||
"file '%1%' was not found in the Nix search path (add it using $NIX_PATH or -I)"
|
||||
|
|
@ -671,7 +671,7 @@ Path EvalState::findFile(SearchPath & searchPath, const string & path, const Pos
|
|||
std::pair<bool, std::string> EvalState::resolveSearchPathElem(const SearchPathElem & elem)
|
||||
{
|
||||
auto i = searchPathResolved.find(elem.second);
|
||||
if (i != searchPathResolved.end()) return i->second;
|
||||
if (i != searchPathResolved.end()) { return i->second; }
|
||||
|
||||
std::pair<bool, std::string> res;
|
||||
|
||||
|
|
|
|||
104
third_party/nix/src/libexpr/primops.cc
vendored
104
third_party/nix/src/libexpr/primops.cc
vendored
|
|
@ -51,7 +51,9 @@ void EvalState::realiseContext(const PathSet& context) {
|
|||
std::pair<string, string> decoded = decodeContext(i);
|
||||
Path ctx = decoded.first;
|
||||
assert(store->isStorePath(ctx));
|
||||
if (!store->isValidPath(ctx)) throw InvalidPathError(ctx);
|
||||
if (!store->isValidPath(ctx)) {
|
||||
throw InvalidPathError(ctx);
|
||||
}
|
||||
if (!decoded.second.empty() && nix::isDerivation(ctx)) {
|
||||
drvs.insert(decoded.first + "!" + decoded.second);
|
||||
|
||||
|
|
@ -68,7 +70,9 @@ void EvalState::realiseContext(const PathSet& context) {
|
|||
}
|
||||
}
|
||||
|
||||
if (drvs.empty()) return;
|
||||
if (drvs.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!evalSettings.enableImportFromDerivation)
|
||||
throw EvalError(format("attempted to realize '%1%' during evaluation but "
|
||||
|
|
@ -417,7 +421,9 @@ static void prim_genericClosure(EvalState& state, const Pos& pos, Value** args,
|
|||
throw EvalError(format("attribute 'key' required, at %1%") % pos);
|
||||
state.forceValue(*key->value);
|
||||
|
||||
if (doneKeys.find(key->value) != doneKeys.end()) continue;
|
||||
if (doneKeys.find(key->value) != doneKeys.end()) {
|
||||
continue;
|
||||
}
|
||||
doneKeys.insert(key->value);
|
||||
res.push_back(e);
|
||||
|
||||
|
|
@ -583,7 +589,9 @@ static void prim_derivationStrict(EvalState& state, const Pos& pos,
|
|||
outputs.insert("out");
|
||||
|
||||
for (auto& i : args[0]->attrs->lexicographicOrder()) {
|
||||
if (i->name == state.sIgnoreNulls) continue;
|
||||
if (i->name == state.sIgnoreNulls) {
|
||||
continue;
|
||||
}
|
||||
const string& key = i->name;
|
||||
|
||||
auto handleHashMode = [&](const std::string& s) {
|
||||
|
|
@ -623,7 +631,9 @@ static void prim_derivationStrict(EvalState& state, const Pos& pos,
|
|||
try {
|
||||
if (ignoreNulls) {
|
||||
state.forceValue(*i->value);
|
||||
if (i->value->type == tNull) continue;
|
||||
if (i->value->type == tNull) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* The `args' attribute is special: it supplies the
|
||||
|
|
@ -641,7 +651,9 @@ static void prim_derivationStrict(EvalState& state, const Pos& pos,
|
|||
the environment. */
|
||||
else {
|
||||
if (jsonObject) {
|
||||
if (i->name == state.sStructuredAttrs) continue;
|
||||
if (i->name == state.sStructuredAttrs) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto placeholder(jsonObject->placeholder(key));
|
||||
printValueAsJSON(state, true, *i->value, placeholder, context);
|
||||
|
|
@ -758,7 +770,9 @@ static void prim_derivationStrict(EvalState& state, const Pos& pos,
|
|||
|
||||
Path outPath =
|
||||
state.store->makeFixedOutputPath(outputHashRecursive, h, drvName);
|
||||
if (!jsonObject) drv.env["out"] = outPath;
|
||||
if (!jsonObject) {
|
||||
drv.env["out"] = outPath;
|
||||
}
|
||||
drv.outputs["out"] = DerivationOutput(
|
||||
outPath, (outputHashRecursive ? "r:" : "") + printHashType(h.type),
|
||||
h.to_string(Base16, false));
|
||||
|
|
@ -771,7 +785,9 @@ static void prim_derivationStrict(EvalState& state, const Pos& pos,
|
|||
an empty value. This ensures that changes in the set of
|
||||
output names do get reflected in the hash. */
|
||||
for (auto& i : outputs) {
|
||||
if (!jsonObject) drv.env[i] = "";
|
||||
if (!jsonObject) {
|
||||
drv.env[i] = "";
|
||||
}
|
||||
drv.outputs[i] = DerivationOutput("", "", "");
|
||||
}
|
||||
|
||||
|
|
@ -782,7 +798,9 @@ static void prim_derivationStrict(EvalState& state, const Pos& pos,
|
|||
for (auto& i : drv.outputs)
|
||||
if (i.second.path == "") {
|
||||
Path outPath = state.store->makeOutputPath(i.first, h, drvName);
|
||||
if (!jsonObject) drv.env[i.first] = outPath;
|
||||
if (!jsonObject) {
|
||||
drv.env[i.first] = outPath;
|
||||
}
|
||||
i.second.path = outPath;
|
||||
}
|
||||
}
|
||||
|
|
@ -845,12 +863,16 @@ static void prim_storePath(EvalState& state, const Pos& pos, Value** args,
|
|||
/* Resolve symlinks in ‘path’, unless ‘path’ itself is a symlink
|
||||
directly in the store. The latter condition is necessary so
|
||||
e.g. nix-push does the right thing. */
|
||||
if (!state.store->isStorePath(path)) path = canonPath(path, true);
|
||||
if (!state.store->isStorePath(path)) {
|
||||
path = canonPath(path, true);
|
||||
}
|
||||
if (!state.store->isInStore(path))
|
||||
throw EvalError(format("path '%1%' is not in the Nix store, at %2%") %
|
||||
path % pos);
|
||||
Path path2 = state.store->toStorePath(path);
|
||||
if (!settings.readOnlyMode) state.store->ensurePath(path2);
|
||||
if (!settings.readOnlyMode) {
|
||||
state.store->ensurePath(path2);
|
||||
}
|
||||
context.insert(path2);
|
||||
mkString(v, path, context);
|
||||
}
|
||||
|
|
@ -936,7 +958,9 @@ static void prim_findFile(EvalState& state, const Pos& pos, Value** args,
|
|||
|
||||
string prefix;
|
||||
Bindings::iterator i = v2.attrs->find(state.symbols.create("prefix"));
|
||||
if (i != v2.attrs->end()) prefix = state.forceStringNoCtx(*i->value, pos);
|
||||
if (i != v2.attrs->end()) {
|
||||
prefix = state.forceStringNoCtx(*i->value, pos);
|
||||
}
|
||||
|
||||
i = v2.attrs->find(state.symbols.create("path"));
|
||||
if (i == v2.attrs->end())
|
||||
|
|
@ -995,7 +1019,9 @@ static void prim_readDir(EvalState& state, const Pos& pos, Value** args,
|
|||
|
||||
for (auto& ent : entries) {
|
||||
Value* ent_val = state.allocAttr(v, state.symbols.create(ent.name));
|
||||
if (ent.type == DT_UNKNOWN) ent.type = getFileType(path + "/" + ent.name);
|
||||
if (ent.type == DT_UNKNOWN) {
|
||||
ent.type = getFileType(path + "/" + ent.name);
|
||||
}
|
||||
mkStringNoCopy(*ent_val,
|
||||
ent.type == DT_REG
|
||||
? "regular"
|
||||
|
|
@ -1178,8 +1204,12 @@ static void prim_path(EvalState& state, const Pos& pos, Value** args,
|
|||
format("unsupported argument '%1%' to 'addPath', at %2%") %
|
||||
attr.name % *attr.pos);
|
||||
}
|
||||
if (path.empty()) throw EvalError(format("'path' required, at %1%") % pos);
|
||||
if (name.empty()) name = baseNameOf(path);
|
||||
if (path.empty()) {
|
||||
throw EvalError(format("'path' required, at %1%") % pos);
|
||||
}
|
||||
if (name.empty()) {
|
||||
name = baseNameOf(path);
|
||||
}
|
||||
|
||||
addPath(state, pos, name, path, filterFun, recursive, expectedHash, v);
|
||||
}
|
||||
|
|
@ -1236,7 +1266,9 @@ void prim_getAttr(EvalState& state, const Pos& pos, Value** args, Value& v) {
|
|||
if (i == args[1]->attrs->end())
|
||||
throw EvalError(format("attribute '%1%' missing, at %2%") % attr % pos);
|
||||
// !!! add to stack trace?
|
||||
if (state.countCalls && i->pos) state.attrSelects[*i->pos]++;
|
||||
if (state.countCalls && i->pos) {
|
||||
state.attrSelects[*i->pos]++;
|
||||
}
|
||||
state.forceValue(*i->value);
|
||||
v = *i->value;
|
||||
}
|
||||
|
|
@ -1287,7 +1319,9 @@ static void prim_removeAttrs(EvalState& state, const Pos& pos, Value** args,
|
|||
vector. */
|
||||
state.mkAttrs(v, args[0]->attrs->size());
|
||||
for (auto& i : *args[0]->attrs) {
|
||||
if (names.find(i.name) == names.end()) v.attrs->push_back(i);
|
||||
if (names.find(i.name) == names.end()) {
|
||||
v.attrs->push_back(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1673,12 +1707,16 @@ static void prim_partition(EvalState& state, const Pos& pos, Value** args,
|
|||
Value* vRight = state.allocAttr(v, state.sRight);
|
||||
auto rsize = right.size();
|
||||
state.mkList(*vRight, rsize);
|
||||
if (rsize) memcpy(vRight->listElems(), right.data(), sizeof(Value*) * rsize);
|
||||
if (rsize) {
|
||||
memcpy(vRight->listElems(), right.data(), sizeof(Value*) * rsize);
|
||||
}
|
||||
|
||||
Value* vWrong = state.allocAttr(v, state.sWrong);
|
||||
auto wsize = wrong.size();
|
||||
state.mkList(*vWrong, wsize);
|
||||
if (wsize) memcpy(vWrong->listElems(), wrong.data(), sizeof(Value*) * wsize);
|
||||
if (wsize) {
|
||||
memcpy(vWrong->listElems(), wrong.data(), sizeof(Value*) * wsize);
|
||||
}
|
||||
|
||||
v.attrs->sort();
|
||||
}
|
||||
|
|
@ -1705,7 +1743,9 @@ static void prim_concatMap(EvalState& state, const Pos& pos, Value** args,
|
|||
auto out = v.listElems();
|
||||
for (unsigned int n = 0, pos = 0; n < nrLists; ++n) {
|
||||
auto l = lists[n].listSize();
|
||||
if (l) memcpy(out + pos, lists[n].listElems(), l * sizeof(Value*));
|
||||
if (l) {
|
||||
memcpy(out + pos, lists[n].listElems(), l * sizeof(Value*));
|
||||
}
|
||||
pos += l;
|
||||
}
|
||||
}
|
||||
|
|
@ -1752,7 +1792,9 @@ static void prim_div(EvalState& state, const Pos& pos, Value** args, Value& v) {
|
|||
state.forceValue(*args[1], pos);
|
||||
|
||||
NixFloat f2 = state.forceFloat(*args[1], pos);
|
||||
if (f2 == 0) throw EvalError(format("division by zero, at %1%") % pos);
|
||||
if (f2 == 0) {
|
||||
throw EvalError(format("division by zero, at %1%") % pos);
|
||||
}
|
||||
|
||||
if (args[0]->type == tFloat || args[1]->type == tFloat) {
|
||||
mkFloat(v,
|
||||
|
|
@ -2012,7 +2054,9 @@ static void prim_replaceStrings(EvalState& state, const Pos& pos, Value** args,
|
|||
found = true;
|
||||
res += j->first;
|
||||
if (i->empty()) {
|
||||
if (p < s.size()) res += s[p];
|
||||
if (p < s.size()) {
|
||||
res += s[p];
|
||||
}
|
||||
p++;
|
||||
} else {
|
||||
p += i->size();
|
||||
|
|
@ -2022,7 +2066,9 @@ static void prim_replaceStrings(EvalState& state, const Pos& pos, Value** args,
|
|||
break;
|
||||
}
|
||||
if (!found) {
|
||||
if (p < s.size()) res += s[p];
|
||||
if (p < s.size()) {
|
||||
res += s[p];
|
||||
}
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
|
@ -2059,7 +2105,9 @@ static void prim_splitVersion(EvalState& state, const Pos& pos, Value** args,
|
|||
Strings components;
|
||||
while (iter != version.cend()) {
|
||||
auto component = nextComponent(iter, version.cend());
|
||||
if (component.empty()) break;
|
||||
if (component.empty()) {
|
||||
break;
|
||||
}
|
||||
components.emplace_back(std::move(component));
|
||||
}
|
||||
state.mkList(v, components.size());
|
||||
|
|
@ -2114,7 +2162,9 @@ void fetch(EvalState& state, const Pos& pos, Value** args, Value& v,
|
|||
|
||||
auto res = getDownloader()->downloadCached(state.store, request);
|
||||
|
||||
if (state.allowedPaths) state.allowedPaths->insert(res.path);
|
||||
if (state.allowedPaths) {
|
||||
state.allowedPaths->insert(res.path);
|
||||
}
|
||||
|
||||
mkString(v, res.storePath, PathSet({res.storePath}));
|
||||
}
|
||||
|
|
@ -2136,7 +2186,9 @@ static void prim_fetchTarball(EvalState& state, const Pos& pos, Value** args,
|
|||
RegisterPrimOp::PrimOps* RegisterPrimOp::primOps;
|
||||
|
||||
RegisterPrimOp::RegisterPrimOp(std::string name, size_t arity, PrimOpFun fun) {
|
||||
if (!primOps) primOps = new PrimOps;
|
||||
if (!primOps) {
|
||||
primOps = new PrimOps;
|
||||
}
|
||||
primOps->emplace_back(name, arity, fun);
|
||||
}
|
||||
|
||||
|
|
|
|||
12
third_party/nix/src/libexpr/primops/context.cc
vendored
12
third_party/nix/src/libexpr/primops/context.cc
vendored
|
|
@ -111,7 +111,9 @@ static void prim_getContext(EvalState& state, const Pos& pos, Value** args,
|
|||
for (const auto& info : contextInfos) {
|
||||
auto& infoVal = *state.allocAttr(v, state.symbols.create(info.first));
|
||||
state.mkAttrs(infoVal, 3);
|
||||
if (info.second.path) mkBool(*state.allocAttr(infoVal, sPath), true);
|
||||
if (info.second.path) {
|
||||
mkBool(*state.allocAttr(infoVal, sPath), true);
|
||||
}
|
||||
if (info.second.allOutputs)
|
||||
mkBool(*state.allocAttr(infoVal, sAllOutputs), true);
|
||||
if (!info.second.outputs.empty()) {
|
||||
|
|
@ -147,11 +149,15 @@ static void prim_appendContext(EvalState& state, const Pos& pos, Value** args,
|
|||
if (!state.store->isStorePath(i.name))
|
||||
throw EvalError("Context key '%s' is not a store path, at %s", i.name,
|
||||
i.pos);
|
||||
if (!settings.readOnlyMode) state.store->ensurePath(i.name);
|
||||
if (!settings.readOnlyMode) {
|
||||
state.store->ensurePath(i.name);
|
||||
}
|
||||
state.forceAttrs(*i.value, *i.pos);
|
||||
auto iter = i.value->attrs->find(sPath);
|
||||
if (iter != i.value->attrs->end()) {
|
||||
if (state.forceBool(*iter->value, *iter->pos)) context.insert(i.name);
|
||||
if (state.forceBool(*iter->value, *iter->pos)) {
|
||||
context.insert(i.name);
|
||||
}
|
||||
}
|
||||
|
||||
iter = i.value->attrs->find(sAllOutputs);
|
||||
|
|
|
|||
12
third_party/nix/src/libexpr/primops/fetchGit.cc
vendored
12
third_party/nix/src/libexpr/primops/fetchGit.cc
vendored
|
|
@ -37,7 +37,9 @@ GitInfo exportGit(ref<Store> store, const std::string& uri,
|
|||
runProgram("git", true,
|
||||
{"-C", uri, "diff-index", "--quiet", "HEAD", "--"});
|
||||
} catch (ExecError& e) {
|
||||
if (!WIFEXITED(e.status) || WEXITSTATUS(e.status) != 1) throw;
|
||||
if (!WIFEXITED(e.status) || WEXITSTATUS(e.status) != 1) {
|
||||
throw;
|
||||
}
|
||||
clean = false;
|
||||
}
|
||||
|
||||
|
|
@ -78,7 +80,9 @@ GitInfo exportGit(ref<Store> store, const std::string& uri,
|
|||
ref = "HEAD"s;
|
||||
}
|
||||
|
||||
if (!ref) ref = "HEAD"s;
|
||||
if (!ref) {
|
||||
ref = "HEAD"s;
|
||||
}
|
||||
|
||||
if (rev != "" && !std::regex_match(rev, revRegex))
|
||||
throw Error("invalid Git revision '%s'", rev);
|
||||
|
|
@ -166,7 +170,9 @@ GitInfo exportGit(ref<Store> store, const std::string& uri,
|
|||
}
|
||||
|
||||
} catch (SysError& e) {
|
||||
if (e.errNo != ENOENT) throw;
|
||||
if (e.errNo != ENOENT) {
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: should pipe this, or find some better way to extract a
|
||||
|
|
|
|||
|
|
@ -73,7 +73,9 @@ HgInfo exportMercurial(ref<Store> store, const std::string& uri,
|
|||
}
|
||||
}
|
||||
|
||||
if (rev == "") rev = "default";
|
||||
if (rev == "") {
|
||||
rev = "default";
|
||||
}
|
||||
|
||||
Path cacheDir = fmt("%s/nix/hg/%s", getCacheDir(),
|
||||
hashString(htSHA256, uri).to_string(Base32, false));
|
||||
|
|
@ -149,7 +151,9 @@ HgInfo exportMercurial(ref<Store> store, const std::string& uri,
|
|||
}
|
||||
|
||||
} catch (SysError& e) {
|
||||
if (e.errNo != ENOENT) throw;
|
||||
if (e.errNo != ENOENT) {
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
Path tmpDir = createTempDir();
|
||||
|
|
|
|||
8
third_party/nix/src/libexpr/value-to-xml.cc
vendored
8
third_party/nix/src/libexpr/value-to-xml.cc
vendored
|
|
@ -36,7 +36,9 @@ static void showAttrs(EvalState& state, bool strict, bool location,
|
|||
|
||||
XMLAttrs xmlAttrs;
|
||||
xmlAttrs["name"] = i;
|
||||
if (location && a.pos != &noPos) posToXML(xmlAttrs, *a.pos);
|
||||
if (location && a.pos != &noPos) {
|
||||
posToXML(xmlAttrs, *a.pos);
|
||||
}
|
||||
|
||||
XMLOpenElement _(doc, "attr", xmlAttrs);
|
||||
printValueAsXML(state, strict, location, *a.value, doc, context, drvsSeen);
|
||||
|
|
@ -132,7 +134,9 @@ static void printValueAsXML(EvalState& state, bool strict, bool location,
|
|||
|
||||
case tLambda: {
|
||||
XMLAttrs xmlAttrs;
|
||||
if (location) posToXML(xmlAttrs, v.lambda.fun->pos);
|
||||
if (location) {
|
||||
posToXML(xmlAttrs, v.lambda.fun->pos);
|
||||
}
|
||||
XMLOpenElement _(doc, "function", xmlAttrs);
|
||||
|
||||
if (v.lambda.fun->matchAttrs) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue