mercurial/dicthelpers.py
changeset 18820 a45e44d76c81
child 18846 860d36b763ae
equal deleted inserted replaced
18819:05acdf8e1f23 18820:a45e44d76c81
       
     1 # dicthelpers.py - helper routines for Python dicts
       
     2 #
       
     3 # Copyright 2013 Facebook
       
     4 #
       
     5 # This software may be used and distributed according to the terms of the
       
     6 # GNU General Public License version 2 or any later version.
       
     7 
       
     8 def _diffjoin(d1, d2, default, compare):
       
     9     res = {}
       
    10     if d1 is d2 and compare:
       
    11         # same dict, so diff is empty
       
    12         return res
       
    13 
       
    14     for k1, v1 in d1.iteritems():
       
    15         if k1 in d2:
       
    16             v2 = d2[k1]
       
    17             if not compare or v1 != v2:
       
    18                 res[k1] = (v1, v2)
       
    19         else:
       
    20             res[k1] = (v1, default)
       
    21 
       
    22     if d1 is d2:
       
    23         return res
       
    24 
       
    25     for k2 in d2:
       
    26         if k2 not in d1:
       
    27             res[k2] = (default, d2[k2])
       
    28 
       
    29     return res
       
    30 
       
    31 def diff(d1, d2, default=None):
       
    32     return _diffjoin(d1, d2, default, True)
       
    33 
       
    34 def join(d1, d2, default=None):
       
    35     return _diffjoin(d1, d2, default, False)