mercurial/dicthelpers.py
author Stefano Tortarolo <stefano.tortarolo@gmail.com>
Fri, 05 Apr 2013 17:04:37 +0200
changeset 18890 537e869b17e9
parent 18820 a45e44d76c81
child 18846 860d36b763ae
permissions -rw-r--r--
hg-i18n-it: minor fixes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18820
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     1
# dicthelpers.py - helper routines for Python dicts
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     2
#
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     3
# Copyright 2013 Facebook
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     4
#
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     7
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     8
def _diffjoin(d1, d2, default, compare):
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
     9
    res = {}
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    10
    if d1 is d2 and compare:
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    11
        # same dict, so diff is empty
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    12
        return res
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    13
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    14
    for k1, v1 in d1.iteritems():
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    15
        if k1 in d2:
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    16
            v2 = d2[k1]
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    17
            if not compare or v1 != v2:
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    18
                res[k1] = (v1, v2)
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    19
        else:
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    20
            res[k1] = (v1, default)
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    21
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    22
    if d1 is d2:
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    23
        return res
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    24
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    25
    for k2 in d2:
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    26
        if k2 not in d1:
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    27
            res[k2] = (default, d2[k2])
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    28
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    29
    return res
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    30
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    31
def diff(d1, d2, default=None):
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    32
    return _diffjoin(d1, d2, default, True)
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    33
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    34
def join(d1, d2, default=None):
a45e44d76c81 mercurial: implement diff and join for dicts
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
    35
    return _diffjoin(d1, d2, default, False)