Author: eelco
Date: Thu Jan 19 23:08:47 2012
New Revision: 31729
URL: https://nixos.org/websvn/nix/?rev=31729&sc=1
Log:
* Allow comparisons between derivations by comparing the outPath
attributes.
Modified:
nix/trunk/src/libexpr/eval.cc
Modified: nix/trunk/src/libexpr/eval.cc
==============================================================================
--- nix/trunk/src/libexpr/eval.cc Thu Jan 19 23:07:42 2012 (r31728)
+++ nix/trunk/src/libexpr/eval.cc Thu Jan 19 23:08:47 2012 (r31729)
@@ -1245,11 +1245,23 @@
return true;
case tAttrs: {
+ /* If both attribute sets denote a derivation (type =
+ "derivation"), then compare their outPaths. */
+ if (isDerivation(v1) && isDerivation(v2)) {
+ Bindings::iterator i = v1.attrs->find(sOutPath);
+ Bindings::iterator j = v2.attrs->find(sOutPath);
+ if (i != v1.attrs->end() && j != v2.attrs->end())
+ return eqValues(*i->value, *j->value);
+ }
+
if (v1.attrs->size() != v2.attrs->size()) return false;
- Bindings::iterator i = v1.attrs->begin(), j = v2.attrs->begin();
- for ( ; i != v1.attrs->end(); ++i, ++j)
+
+ /* Otherwise, compare the attributes one by one. */
+ 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;
+
return true;
}
_______________________________________________
nix-commits mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-commits