hgext3rd/evolve/stablerangecache.py
branchstable
changeset 4026 b375398074b0
parent 4024 210f8abdfcd7
child 4027 130a60a51fff
equal deleted inserted replaced
4025:971d2e81b5b6 4026:b375398074b0
   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):