Show More
@@ -9,7 +9,6 b' test-check-pylint.t' | |||
|
9 | 9 | test-check-shbang.t |
|
10 | 10 | test-contrib-check-code.t |
|
11 | 11 | test-contrib-check-commit.t |
|
12 | test-ctxmanager.py | |
|
13 | 12 | test-diff-issue2761.t |
|
14 | 13 | test-diff-newlines.t |
|
15 | 14 | test-diff-reverse.t |
@@ -3052,66 +3052,6 b' def finddirs(path):' | |||
|
3052 | 3052 | yield path[:pos] |
|
3053 | 3053 | pos = path.rfind('/', 0, pos) |
|
3054 | 3054 | |
|
3055 | class ctxmanager(object): | |
|
3056 | '''A context manager for use in 'with' blocks to allow multiple | |
|
3057 | contexts to be entered at once. This is both safer and more | |
|
3058 | flexible than contextlib.nested. | |
|
3059 | ||
|
3060 | Once Mercurial supports Python 2.7+, this will become mostly | |
|
3061 | unnecessary. | |
|
3062 | ''' | |
|
3063 | ||
|
3064 | def __init__(self, *args): | |
|
3065 | '''Accepts a list of no-argument functions that return context | |
|
3066 | managers. These will be invoked at __call__ time.''' | |
|
3067 | self._pending = args | |
|
3068 | self._atexit = [] | |
|
3069 | ||
|
3070 | def __enter__(self): | |
|
3071 | return self | |
|
3072 | ||
|
3073 | def enter(self): | |
|
3074 | '''Create and enter context managers in the order in which they were | |
|
3075 | passed to the constructor.''' | |
|
3076 | values = [] | |
|
3077 | for func in self._pending: | |
|
3078 | obj = func() | |
|
3079 | values.append(obj.__enter__()) | |
|
3080 | self._atexit.append(obj.__exit__) | |
|
3081 | del self._pending | |
|
3082 | return values | |
|
3083 | ||
|
3084 | def atexit(self, func, *args, **kwargs): | |
|
3085 | '''Add a function to call when this context manager exits. The | |
|
3086 | ordering of multiple atexit calls is unspecified, save that | |
|
3087 | they will happen before any __exit__ functions.''' | |
|
3088 | def wrapper(exc_type, exc_val, exc_tb): | |
|
3089 | func(*args, **kwargs) | |
|
3090 | self._atexit.append(wrapper) | |
|
3091 | return func | |
|
3092 | ||
|
3093 | def __exit__(self, exc_type, exc_val, exc_tb): | |
|
3094 | '''Context managers are exited in the reverse order from which | |
|
3095 | they were created.''' | |
|
3096 | received = exc_type is not None | |
|
3097 | suppressed = False | |
|
3098 | pending = None | |
|
3099 | self._atexit.reverse() | |
|
3100 | for exitfunc in self._atexit: | |
|
3101 | try: | |
|
3102 | if exitfunc(exc_type, exc_val, exc_tb): | |
|
3103 | suppressed = True | |
|
3104 | exc_type = None | |
|
3105 | exc_val = None | |
|
3106 | exc_tb = None | |
|
3107 | except BaseException: | |
|
3108 | pending = sys.exc_info() | |
|
3109 | exc_type, exc_val, exc_tb = pending = sys.exc_info() | |
|
3110 | del self._atexit | |
|
3111 | if pending: | |
|
3112 | raise exc_val | |
|
3113 | return received and suppressed | |
|
3114 | ||
|
3115 | 3055 | # compression code |
|
3116 | 3056 | |
|
3117 | 3057 | SERVERROLE = 'server' |
@@ -24,7 +24,6 b' outputs, which should be fixed later.' | |||
|
24 | 24 | > -X i18n/posplit \ |
|
25 | 25 | > -X tests/test-hgweb-auth.py \ |
|
26 | 26 | > -X tests/hypothesishelpers.py \ |
|
27 | > -X tests/test-ctxmanager.py \ | |
|
28 | 27 | > -X tests/test-lock.py \ |
|
29 | 28 | > -X tests/test-verify-repo-operations.py \ |
|
30 | 29 | > -X tests/test-hook.t \ |
|
1 | NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now