view mercurial/dicthelpers.py @ 18825:f0564402d059

repo: repo isolation, do not pass on repo.ui for creating new repos A repo should not get the configuration from an other repo, so create it with the global configuration in repo.baseui. This is done too when recreating a repo. The repo configuration is reread anyway. And now deleted repo configuration does not persist.
author Simon Heimberg <simohe@besonet.ch>
date Wed, 10 Oct 2012 21:55:49 +0200
parents a45e44d76c81
children 860d36b763ae
line wrap: on
line source

# dicthelpers.py - helper routines for Python dicts
#
# Copyright 2013 Facebook
#
# 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):
    res = {}
    if d1 is d2 and compare:
        # 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:
                res[k1] = (v1, v2)
        else:
            res[k1] = (v1, default)

    if d1 is d2:
        return res

    for k2 in d2:
        if k2 not in d1:
            res[k2] = (default, d2[k2])

    return res

def diff(d1, d2, default=None):
    return _diffjoin(d1, d2, default, True)

def join(d1, d2, default=None):
    return _diffjoin(d1, d2, default, False)