fix(3p/nix): Update for usage of new attribute set API

The new attribute set API uses the iterators of the btree_map
directly. This requires changes in various files because the internals
of libexpr are very entangled.

This code runs and compiles, but there is a bug causing empty
attribute sets to be assigned incorrectly.
This commit is contained in:
Vincent Ambo 2020-05-22 01:58:12 +01:00
parent 42205f27fc
commit 986a8f6b75
14 changed files with 187 additions and 176 deletions

View file

@ -1209,13 +1209,12 @@ static void opQuery(Globals& globals, Strings opFlags, Strings opArgs) {
attrs2["type"] = "strings";
XMLOpenElement m(xml, "meta", attrs2);
Bindings& attrs = *v->attrs;
for (auto& i : attrs) {
Attr& a(*attrs.find(i.name));
for (auto& [name, a] : attrs) {
if (a.value->type != tString) {
continue;
}
XMLAttrs attrs3;
attrs3["type"] = i.name;
attrs3["type"] = name;
attrs3["value"] = a.value->string.s;
xml.writeEmptyElement("string", attrs3);
}

View file

@ -129,11 +129,11 @@ bool createUserEnv(EvalState& state, DrvInfos& elems, const Path& profile,
DLOG(INFO) << "evaluating user environment builder";
state.forceValue(topLevel);
PathSet context;
Attr& aDrvPath(*topLevel.attrs->find(state.sDrvPath));
Attr& aDrvPath(topLevel.attrs->find(state.sDrvPath)->second);
Path topLevelDrv =
state.coerceToPath(aDrvPath.pos != nullptr ? *(aDrvPath.pos) : noPos,
*(aDrvPath.value), context);
Attr& aOutPath(*topLevel.attrs->find(state.sOutPath));
Attr& aOutPath(topLevel.attrs->find(state.sOutPath)->second);
Path topLevelOut =
state.coerceToPath(aOutPath.pos != nullptr ? *(aOutPath.pos) : noPos,
*(aOutPath.value), context);