/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/library_state.py

  • Committer: Jelmer Vernooij
  • Date: 2020-05-06 02:13:25 UTC
  • mfrom: (7490.7.21 work)
  • mto: This revision was merged to the branch mainline in revision 7501.
  • Revision ID: jelmer@jelmer.uk-20200506021325-awbmmqu1zyorz7sj
Merge 3.1 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""The core state needed to make use of bzr is managed here."""
18
18
 
19
 
from __future__ import absolute_import
20
 
 
21
19
__all__ = [
22
20
    'BzrLibraryState',
23
21
    ]
24
22
 
25
23
 
 
24
import contextlib
 
25
 
 
26
 
26
27
import breezy
27
28
from .lazy_import import lazy_import
28
29
lazy_import(globals(), """
29
30
from breezy import (
30
 
    cleanup,
31
31
    config,
32
32
    osutils,
33
33
    symbol_versioning,
44
44
    currently always exposed as breezy._global_state, but we desired to move
45
45
    to a point where no global state is needed at all.
46
46
 
47
 
    :ivar cleanups: An ObjectWithCleanups which can be used for cleanups that
 
47
    :ivar exit_stack: An ExitStack which can be used for cleanups that
48
48
        should occur when the use of breezy is completed. This is initialised
49
49
        in __enter__ and executed in __exit__.
50
50
    """
75
75
        # arguments are parsed.
76
76
        self.cmdline_overrides = config.CommandLineStore()
77
77
        # No config stores are cached to start with
78
 
        self.config_stores = {} # By url
 
78
        self.config_stores = {}  # By url
79
79
        self.started = False
80
80
 
81
81
    def __enter__(self):
82
82
        if not self.started:
83
83
            self._start()
84
 
        return self # This is bound to the 'as' clause in a with statement.
 
84
        return self  # This is bound to the 'as' clause in a with statement.
85
85
 
86
86
    def _start(self):
87
87
        """Do all initialization."""
89
89
        # isolation within the same interpreter.  It's not reached on normal
90
90
        # in-process run_bzr calls.  If it's broken, we expect that
91
91
        # TestRunBzrSubprocess may fail.
92
 
        self.cleanups = cleanup.ObjectWithCleanups()
 
92
        self.exit_stack = contextlib.ExitStack()
93
93
 
94
94
        if breezy.version_info[3] == 'final':
95
 
            self.cleanups.add_cleanup(
 
95
            self.exit_stack.callback(
96
96
                symbol_versioning.suppress_deprecation_warnings(override=True))
97
97
 
98
98
        self._trace.__enter__()
99
99
 
100
100
        self._orig_ui = breezy.ui.ui_factory
101
 
        breezy.ui.ui_factory = self._ui
102
 
        self._ui.__enter__()
 
101
        if self._ui is not None:
 
102
            breezy.ui.ui_factory = self._ui
 
103
            self._ui.__enter__()
103
104
 
104
105
        if breezy._global_state is not None:
105
106
            raise RuntimeError("Breezy already initialized")
111
112
            # Save config changes
112
113
            for k, store in self.config_stores.items():
113
114
                store.save_changes()
114
 
        self.cleanups.cleanup_now()
 
115
        self.exit_stack.close()
115
116
        trace._flush_stdout_stderr()
116
117
        trace._flush_trace()
117
118
        osutils.report_extension_load_failures()
118
 
        self._ui.__exit__(None, None, None)
 
119
        if self._ui is not None:
 
120
            self._ui.__exit__(None, None, None)
119
121
        self._trace.__exit__(None, None, None)
120
122
        ui.ui_factory = self._orig_ui
121
123
        breezy._global_state = None
122
 
        return False # propogate exceptions.
 
124
        return False  # propogate exceptions.