260 del self._con |
260 del self._con |
261 |
261 |
262 con = self._db() |
262 con = self._db() |
263 if con is None: |
263 if con is None: |
264 return |
264 return |
265 con.execute('BEGIN IMMEDIATE;') |
|
266 with con: |
265 with con: |
267 for req in _sqliteschema: |
266 for req in _sqliteschema: |
268 con.execute(req) |
267 con.execute(req) |
269 |
268 |
270 meta = [self._schemaversion, |
269 meta = [self._schemaversion, |
271 self._tiprev, |
270 nodemod.nullrev, |
272 self._tipnode, |
271 nodemod.nullid, |
273 ] |
272 ] |
274 con.execute(_newmeta, meta) |
273 con.execute(_newmeta, meta) |
|
274 self._ondisktiprev = nodemod.nullrev |
|
275 self._ondisktipnode = nodemod.nullid |
275 else: |
276 else: |
276 con = self._con |
277 con = self._con |
277 con.execute('BEGIN IMMEDIATE;') |
278 with con: |
278 meta = con.execute(_querymeta).fetchone() |
279 meta = con.execute(_querymeta).fetchone() |
279 if meta[2] != self._ondisktipnode or meta[1] != self._ondisktiprev: |
280 if meta[2] != self._ondisktipnode or meta[1] != self._ondisktiprev: |
280 # drifting is currently an issue because this means another |
281 # drifting is currently an issue because this means another |
281 # process might have already added the cache line we are about |
282 # process might have already added the cache line we are about |
282 # to add. This will confuse sqlite |
283 # to add. This will confuse sqlite |
285 hint = _('(disk: %s-%s vs mem: %s-%s)\n') |
286 hint = _('(disk: %s-%s vs mem: %s-%s)\n') |
286 data = (nodemod.hex(meta[2]), meta[1], |
287 data = (nodemod.hex(meta[2]), meta[1], |
287 nodemod.hex(self._ondisktipnode), self._ondisktiprev) |
288 nodemod.hex(self._ondisktipnode), self._ondisktiprev) |
288 repo.ui.warn(msg) |
289 repo.ui.warn(msg) |
289 repo.ui.warn(hint % data) |
290 repo.ui.warn(hint % data) |
290 con.execute('ROLLBACK;') |
291 self._unsavedsubranges.clear() |
291 return |
292 return |
292 meta = [self._tiprev, |
293 else: |
293 self._tipnode, |
294 self._saverange(con, repo) |
294 ] |
295 meta = [self._tiprev, |
295 con.execute(_updatemeta, meta) |
296 self._tipnode, |
296 |
297 ] |
297 self._saverange(con, repo) |
298 con.execute(_updatemeta, meta) |
298 con.commit() |
|
299 self._ondisktiprev = self._tiprev |
299 self._ondisktiprev = self._tiprev |
300 self._ondisktipnode = self._tipnode |
300 self._ondisktipnode = self._tipnode |
301 self._unsavedsubranges.clear() |
301 self._unsavedsubranges.clear() |
302 |
302 |
303 def _saverange(self, con, repo): |
303 def _saverange(self, con, repo): |