refactor(3p/nix): Rename & undeprecate Bindings::lexicographicOrder

The function is renamed to `SortedByKeys`, which is more descriptive,
and annotated with a comment about what it is used for.

The deprecation warning has been removed because this function is
currently functionally required.

Change-Id: I0ee3a76deff05f366feca9ddac8f38ab34bffbd0
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1288
Tested-by: BuildkiteCI
Reviewed-by: glittershark <grfn@gws.fyi>
This commit is contained in:
Vincent Ambo 2020-07-19 17:59:44 +01:00 committed by tazjin
parent 02066a4bab
commit 324d385b29
5 changed files with 10 additions and 6 deletions

View file

@ -37,7 +37,7 @@ size_t Bindings::size() const { return attributes_.size(); }
bool Bindings::empty() { return attributes_.empty(); }
std::vector<const Attr*> Bindings::lexicographicOrder() {
std::vector<const Attr*> Bindings::SortedByKeys() {
std::vector<const Attr*> res;
res.reserve(attributes_.size());

View file

@ -55,8 +55,12 @@ class Bindings {
iterator begin();
iterator end();
// TODO: can callers just iterate?
[[deprecated]] std::vector<const Attr*> lexicographicOrder();
// Returns the elements of the attribute set as a vector, sorted
// lexicographically by keys.
//
// This is used primarily for builtins that have guaranteed
// ordering, such as `attrNames` or `attrValues`.
std::vector<const Attr*> SortedByKeys();
// oh no
friend class EvalState;

View file

@ -89,7 +89,7 @@ static void printValue(std::ostream& str, std::set<const Value*>& active,
break;
case tAttrs: {
str << "{ ";
for (auto& i : v.attrs->lexicographicOrder()) {
for (auto& i : v.attrs->SortedByKeys()) {
str << i->name << " = ";
printValue(str, active, *i->value);
str << "; ";

View file

@ -387,7 +387,7 @@ static void getDerivations(EvalState& state, Value& vIn,
there are names clashes between derivations, the derivation
bound to the attribute with the "lower" name should take
precedence). */
for (auto& i : v.attrs->lexicographicOrder()) {
for (auto& i : v.attrs->SortedByKeys()) {
DLOG(INFO) << "evaluating attribute '" << i->name << "'";
if (!std::regex_match(std::string(i->name), attrRegex)) {
continue;

View file

@ -561,7 +561,7 @@ static void prim_derivationStrict(EvalState& state, const Pos& pos,
StringSet outputs;
outputs.insert("out");
for (auto& i : args[0]->attrs->lexicographicOrder()) {
for (auto& i : args[0]->attrs->SortedByKeys()) {
if (i->name == state.sIgnoreNulls) {
continue;
}