mercurial/util.py
changeset 33439 0e114b992e02
parent 33108 d9962854a4a2
child 33446 fad6852cf879
--- a/mercurial/util.py	Thu Jul 13 18:31:35 2017 -0700
+++ b/mercurial/util.py	Thu Jul 13 09:51:50 2017 -0700
@@ -3052,66 +3052,6 @@
         yield path[:pos]
         pos = path.rfind('/', 0, pos)
 
-class ctxmanager(object):
-    '''A context manager for use in 'with' blocks to allow multiple
-    contexts to be entered at once.  This is both safer and more
-    flexible than contextlib.nested.
-
-    Once Mercurial supports Python 2.7+, this will become mostly
-    unnecessary.
-    '''
-
-    def __init__(self, *args):
-        '''Accepts a list of no-argument functions that return context
-        managers.  These will be invoked at __call__ time.'''
-        self._pending = args
-        self._atexit = []
-
-    def __enter__(self):
-        return self
-
-    def enter(self):
-        '''Create and enter context managers in the order in which they were
-        passed to the constructor.'''
-        values = []
-        for func in self._pending:
-            obj = func()
-            values.append(obj.__enter__())
-            self._atexit.append(obj.__exit__)
-        del self._pending
-        return values
-
-    def atexit(self, func, *args, **kwargs):
-        '''Add a function to call when this context manager exits.  The
-        ordering of multiple atexit calls is unspecified, save that
-        they will happen before any __exit__ functions.'''
-        def wrapper(exc_type, exc_val, exc_tb):
-            func(*args, **kwargs)
-        self._atexit.append(wrapper)
-        return func
-
-    def __exit__(self, exc_type, exc_val, exc_tb):
-        '''Context managers are exited in the reverse order from which
-        they were created.'''
-        received = exc_type is not None
-        suppressed = False
-        pending = None
-        self._atexit.reverse()
-        for exitfunc in self._atexit:
-            try:
-                if exitfunc(exc_type, exc_val, exc_tb):
-                    suppressed = True
-                    exc_type = None
-                    exc_val = None
-                    exc_tb = None
-            except BaseException:
-                pending = sys.exc_info()
-                exc_type, exc_val, exc_tb = pending = sys.exc_info()
-        del self._atexit
-        if pending:
-            raise exc_val
-        return received and suppressed
-
 # compression code
 
 SERVERROLE = 'server'