mercurial/transaction.py
branchstable
changeset 23102 16da812ad970
parent 23065 963f311e3a81
child 23103 29bfa964d6d8
equal deleted inserted replaced
23101:b564330d4b1f 23102:16da812ad970
   203         # For now, we are unable to do proper backup and restore of custom vfs
   203         # For now, we are unable to do proper backup and restore of custom vfs
   204         # but for bookmarks that are handled outside this mechanism.
   204         # but for bookmarks that are handled outside this mechanism.
   205         assert vfs is None or filenames == ('bookmarks',)
   205         assert vfs is None or filenames == ('bookmarks',)
   206         self._filegenerators[genid] = (order, filenames, genfunc, vfs)
   206         self._filegenerators[genid] = (order, filenames, genfunc, vfs)
   207 
   207 
   208     @active
   208     def _generatefiles(self):
   209     def find(self, file):
       
   210         if file in self.map:
       
   211             return self.entries[self.map[file]]
       
   212         if file in self.backupmap:
       
   213             return self.backupentries[self.backupmap[file]]
       
   214         return None
       
   215 
       
   216     @active
       
   217     def replace(self, file, offset, data=None):
       
   218         '''
       
   219         replace can only replace already committed entries
       
   220         that are not pending in the queue
       
   221         '''
       
   222 
       
   223         if file not in self.map:
       
   224             raise KeyError(file)
       
   225         index = self.map[file]
       
   226         self.entries[index] = (file, offset, data)
       
   227         self.file.write("%s\0%d\n" % (file, offset))
       
   228         self.file.flush()
       
   229 
       
   230     @active
       
   231     def nest(self):
       
   232         self.count += 1
       
   233         self.usages += 1
       
   234         return self
       
   235 
       
   236     def release(self):
       
   237         if self.count > 0:
       
   238             self.usages -= 1
       
   239         # if the transaction scopes are left without being closed, fail
       
   240         if self.count > 0 and self.usages == 0:
       
   241             self._abort()
       
   242 
       
   243     def running(self):
       
   244         return self.count > 0
       
   245 
       
   246     @active
       
   247     def close(self):
       
   248         '''commit the transaction'''
       
   249         # write files registered for generation
   209         # write files registered for generation
   250         for entry in sorted(self._filegenerators.values()):
   210         for entry in sorted(self._filegenerators.values()):
   251             order, filenames, genfunc, vfs = entry
   211             order, filenames, genfunc, vfs = entry
   252             if vfs is None:
   212             if vfs is None:
   253                 vfs = self.opener
   213                 vfs = self.opener
   263                 genfunc(*files)
   223                 genfunc(*files)
   264             finally:
   224             finally:
   265                 for f in files:
   225                 for f in files:
   266                     f.close()
   226                     f.close()
   267 
   227 
       
   228     @active
       
   229     def find(self, file):
       
   230         if file in self.map:
       
   231             return self.entries[self.map[file]]
       
   232         if file in self.backupmap:
       
   233             return self.backupentries[self.backupmap[file]]
       
   234         return None
       
   235 
       
   236     @active
       
   237     def replace(self, file, offset, data=None):
       
   238         '''
       
   239         replace can only replace already committed entries
       
   240         that are not pending in the queue
       
   241         '''
       
   242 
       
   243         if file not in self.map:
       
   244             raise KeyError(file)
       
   245         index = self.map[file]
       
   246         self.entries[index] = (file, offset, data)
       
   247         self.file.write("%s\0%d\n" % (file, offset))
       
   248         self.file.flush()
       
   249 
       
   250     @active
       
   251     def nest(self):
       
   252         self.count += 1
       
   253         self.usages += 1
       
   254         return self
       
   255 
       
   256     def release(self):
       
   257         if self.count > 0:
       
   258             self.usages -= 1
       
   259         # if the transaction scopes are left without being closed, fail
       
   260         if self.count > 0 and self.usages == 0:
       
   261             self._abort()
       
   262 
       
   263     def running(self):
       
   264         return self.count > 0
       
   265 
       
   266     @active
       
   267     def close(self):
       
   268         '''commit the transaction'''
       
   269         self._generatefiles()
   268         if self.count == 1 and self.onclose is not None:
   270         if self.count == 1 and self.onclose is not None:
   269             self.onclose()
   271             self.onclose()
   270 
   272 
   271         self.count -= 1
   273         self.count -= 1
   272         if self.count != 0:
   274         if self.count != 0: