[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