147 |
147 |
148 def __init__(self, session, autoclose_session=False): |
148 def __init__(self, session, autoclose_session=False): |
149 self._session = session # XXX there is no real reason to keep the |
149 self._session = session # XXX there is no real reason to keep the |
150 # session around function still using it should |
150 # session around function still using it should |
151 # be rewritten and migrated. |
151 # be rewritten and migrated. |
152 self._cnxid = None |
|
153 self._cnx = None |
152 self._cnx = None |
154 self._open = None |
153 self._open = None |
155 self._web_request = False |
154 self._web_request = False |
156 self.vreg = session.vreg |
155 self.vreg = session.vreg |
157 self._set_user(session.user) |
156 self._set_user(session.user) |
158 self._autoclose_session = autoclose_session |
157 self._autoclose_session = autoclose_session |
159 |
158 |
160 def __enter__(self): |
159 def __enter__(self): |
161 assert self._open is None |
160 assert self._open is None |
162 self._open = True |
161 self._open = True |
163 self._cnxid = '%s-%s' % (self._session.id, uuid4().hex) |
162 self._cnx = self._session.new_cnx() |
164 self._cnx = self._session.get_cnx(self._cnxid) |
163 self._cnx.__enter__() |
165 self._cnx.ctx_count += 1 |
164 self._cnx.ctx_count += 1 |
166 |
165 |
167 def __exit__(self, exc_type, exc_val, exc_tb): |
166 def __exit__(self, exc_type, exc_val, exc_tb): |
168 self._open = False |
167 self._open = False |
169 self._cnxid = None |
|
170 self._cnx.ctx_count -= 1 |
168 self._cnx.ctx_count -= 1 |
171 self._session.close_cnx(self._cnx) |
169 self._cnx.__exit__(exc_type, exc_val, exc_tb) |
172 self._cnx = None |
170 self._cnx = None |
173 if self._autoclose_session: |
171 if self._autoclose_session: |
174 # we have to call repo.close to unsure the repo properly forget the |
172 # we have to call repo.close to unsure the repo properly forget the |
175 # session calling session.close() is not enought :-( |
173 # session calling session.close() is not enought :-( |
176 self._session.repo.close(self._session.id) |
174 self._session.repo.close(self._session.id) |