##// END OF EJS Templates
extensions: register functions always at loading extension (issue5601)...
extensions: register functions always at loading extension (issue5601) Before this patch, functions defined in extensions are registered via extra loaders only in _dispatch(). Therefore, loading extensions in other code paths like below omits registration of functions. - WSGI service - operation across repositories (e.g. subrepo) - test-duplicateoptions.py, using extensions.loadall() directly To register functions always at loading new extension, this patch moves implementation for extra loading from dispatch._dispatch() to extensions.loadall(). AFAIK, only commands module causes cyclic dependency between extensions module, but this patch imports all related modules just before extra loading in loadall(), in order to centralize them. This patch makes extensions.py depend on many other modules, even though extensions.py itself doesn't. It should be avoided if possible, but I don't have any better idea. Some other places like below aren't reasonable for extra loading, IMHO. - specific function in newly added module: existing callers of extensions.loadall() should invoke it, too - hg.repository() or so: no-repo commands aren't covered by this. BTW, this patch removes _loaded.add(name) on relocation, because dispatch._loaded is used only for extraloaders (for similar reason, "exts" variable is removed, too).

File last commit:

r29828:79add5a4 default
r33052:45b0e9d0 default
Show More
test-lrucachedict.py
77 lines | 1.9 KiB | text/x-python | PythonLexer
/ tests / test-lrucachedict.py
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 from __future__ import absolute_import, print_function
Pulkit Goyal
tests: make test-lrucachedict use absolute_import
r28930
from mercurial import (
util,
)
Siddharth Agarwal
util: add an LRU cache dict...
r18603
Eric Sumner
lrucachedict: add copy method...
r27576 def printifpresent(d, xs, name='d'):
Siddharth Agarwal
util: add an LRU cache dict...
r18603 for x in xs:
present = x in d
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("'%s' in %s: %s" % (x, name, present))
Siddharth Agarwal
util: add an LRU cache dict...
r18603 if present:
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("%s['%s']: %s" % (name, x, d[x]))
Siddharth Agarwal
util: add an LRU cache dict...
r18603
def test_lrucachedict():
d = util.lrucachedict(4)
d['a'] = 'va'
d['b'] = 'vb'
d['c'] = 'vc'
d['d'] = 'vd'
# all of these should be present
printifpresent(d, ['a', 'b', 'c', 'd'])
# 'a' should be dropped because it was least recently used
d['e'] = 've'
printifpresent(d, ['a', 'b', 'c', 'd', 'e'])
Gregory Szorc
util: properly implement lrucachedict.get()...
r29828 assert d.get('a') is None
assert d.get('e') == 've'
Siddharth Agarwal
util: add an LRU cache dict...
r18603 # touch entries in some order (get or set).
d['e']
d['c'] = 'vc2'
d['d']
d['b'] = 'vb2'
# 'e' should be dropped now
d['f'] = 'vf'
printifpresent(d, ['b', 'c', 'd', 'e', 'f'])
Siddharth Agarwal
lrucachedict: implement clear()
r19710 d.clear()
printifpresent(d, ['b', 'c', 'd', 'e', 'f'])
Gregory Szorc
util: reimplement lrucachedict...
r27371 # Now test dicts that aren't full.
d = util.lrucachedict(4)
d['a'] = 1
d['b'] = 2
d['a']
d['b']
printifpresent(d, ['a', 'b'])
Eric Sumner
lrucachedict: add copy method...
r27576 # test copy method
d = util.lrucachedict(4)
d['a'] = 'va3'
d['b'] = 'vb3'
d['c'] = 'vc3'
d['d'] = 'vd3'
dc = d.copy()
# all of these should be present
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("\nAll of these should be present:")
Eric Sumner
lrucachedict: add copy method...
r27576 printifpresent(dc, ['a', 'b', 'c', 'd'], 'dc')
# 'a' should be dropped because it was least recently used
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("\nAll of these except 'a' should be present:")
Eric Sumner
lrucachedict: add copy method...
r27576 dc['e'] = 've3'
printifpresent(dc, ['a', 'b', 'c', 'd', 'e'], 'dc')
# contents and order of original dict should remain unchanged
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("\nThese should be in reverse alphabetical order and read 'v?3':")
Eric Sumner
lrucachedict: add copy method...
r27576 dc['b'] = 'vb3_new'
for k in list(iter(d)):
Pulkit Goyal
tests: make test-lrucachedict use print_function
r28931 print("d['%s']: %s" % (k, d[k]))
Eric Sumner
lrucachedict: add copy method...
r27576
Siddharth Agarwal
util: add an LRU cache dict...
r18603 if __name__ == '__main__':
test_lrucachedict()