[PATCH 2 of 2] dicthelpers: inline diff and join code
Siddharth Agarwal
sid0 at fb.com
Fri Mar 29 17:37:06 CDT 2013
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1364596587 25200
# Fri Mar 29 15:36:27 2013 -0700
# Node ID 533d20bdbfd46d9a158db40b2cfaeb52a4825958
# Parent c1167c0f2bf3d31e2492af0b45803bc4d874502e
dicthelpers: inline diff and join code
diff --git a/mercurial/dicthelpers.py b/mercurial/dicthelpers.py
--- a/mercurial/dicthelpers.py
+++ b/mercurial/dicthelpers.py
@@ -5,20 +5,46 @@
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
-def _diffjoin(d1, d2, default, compare):
+def diff(d1, d2, default=None):
+ '''Return all key-value pairs that are different between d1 and d2.
+
+ This includes keys that are present in one dict but not the other, and
+ keys whose values are different. The return value is a dict with values
+ being pairs of values from d1 and d2 respectively, and missing values
+ represented as default.'''
res = {}
- if d1 is d2 and compare:
+ if d1 is d2:
# same dict, so diff is empty
return res
for k1, v1 in d1.iteritems():
if k1 in d2:
v2 = d2[k1]
- if not compare or v1 != v2:
+ if v1 != v2:
res[k1] = (v1, v2)
else:
res[k1] = (v1, default)
+ for k2 in d2:
+ if k2 not in d1:
+ res[k2] = (default, d2[k2])
+
+ return res
+
+def join(d1, d2, default=None):
+ '''Return all key-value pairs from both d1 and d2.
+
+ This is akin to an outer join in relational algebra. The return value is a
+ dict with values being pairs of values from d1 and d2 respectively, and
+ missing values represented as default.'''
+ res = {}
+
+ for k1, v1 in d1.iteritems():
+ if k1 in d2:
+ res[k1] = (v1, d2[k1])
+ else:
+ res[k1] = (v1, default)
+
if d1 is d2:
return res
@@ -27,20 +53,3 @@ def _diffjoin(d1, d2, default, compare):
res[k2] = (default, d2[k2])
return res
-
-def diff(d1, d2, default=None):
- '''Return all key-value pairs that are different between d1 and d2.
-
- This includes keys that are present in one dict but not the other, and
- keys whose values are different. The return value is a dict with values
- being pairs of values from d1 and d2 respectively, and missing values
- represented as default.'''
- return _diffjoin(d1, d2, default, True)
-
-def join(d1, d2, default=None):
- '''Return all key-value pairs from both d1 and d2.
-
- This is akin to an outer join in relational algebra. The return value is a
- dict with values being pairs of values from d1 and d2 respectively, and
- missing values represented as default.'''
- return _diffjoin(d1, d2, default, False)
More information about the Mercurial-devel
mailing list