Mercurial > public > mercurial-scm > hg
comparison mercurial/dicthelpers.py @ 18894:ed46c2b98b0d
dicthelpers.diff: compare against default for missing values
This is not only a bit faster, but also aligns with callers' expectations
better since we can legitimately have manifestdict's _flags set to '' instead
of unset.
hg perfmergecalculate -r .
before: ! wall 0.139582 comb 0.140000 user 0.140000 sys 0.000000 (best of 59)
after: ! wall 0.126154 comb 0.120000 user 0.120000 sys 0.000000 (best of 74)
hg perfmergecalculate -r .^
before: ! wall 0.236333 comb 0.240000 user 0.240000 sys 0.000000 (best of 36)
after: ! wall 0.212265 comb 0.210000 user 0.210000 sys 0.000000 (best of 45)
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Wed, 10 Apr 2013 12:31:07 -0700 |
parents | 40c679748fa9 |
children |
comparison
equal
deleted
inserted
replaced
18892:46c0ca1ef7e1 | 18894:ed46c2b98b0d |
---|---|
9 '''Return all key-value pairs that are different between d1 and d2. | 9 '''Return all key-value pairs that are different between d1 and d2. |
10 | 10 |
11 This includes keys that are present in one dict but not the other, and | 11 This includes keys that are present in one dict but not the other, and |
12 keys whose values are different. The return value is a dict with values | 12 keys whose values are different. The return value is a dict with values |
13 being pairs of values from d1 and d2 respectively, and missing values | 13 being pairs of values from d1 and d2 respectively, and missing values |
14 represented as default.''' | 14 treated as default, so if a value is missing from one dict and the same as |
15 default in the other, it will not be returned.''' | |
15 res = {} | 16 res = {} |
16 if d1 is d2: | 17 if d1 is d2: |
17 # same dict, so diff is empty | 18 # same dict, so diff is empty |
18 return res | 19 return res |
19 | 20 |
20 for k1, v1 in d1.iteritems(): | 21 for k1, v1 in d1.iteritems(): |
21 if k1 in d2: | 22 v2 = d2.get(k1, default) |
22 v2 = d2[k1] | 23 if v1 != v2: |
23 if v1 != v2: | 24 res[k1] = (v1, v2) |
24 res[k1] = (v1, v2) | |
25 else: | |
26 res[k1] = (v1, default) | |
27 | 25 |
28 for k2 in d2: | 26 for k2 in d2: |
29 if k2 not in d1: | 27 if k2 not in d1: |
30 res[k2] = (default, d2[k2]) | 28 v2 = d2[k2] |
29 if v2 != default: | |
30 res[k2] = (default, v2) | |
31 | 31 |
32 return res | 32 return res |
33 | 33 |
34 def join(d1, d2, default=None): | 34 def join(d1, d2, default=None): |
35 '''Return all key-value pairs from both d1 and d2. | 35 '''Return all key-value pairs from both d1 and d2. |