mercurial/transaction.py
changeset 95 589f507bb259
parent 43 42177b56b949
child 108 8d55c2d72c7c
equal deleted inserted replaced
94:7daef883134f 95:589f507bb259
    12 # of the GNU General Public License, incorporated herein by reference.
    12 # of the GNU General Public License, incorporated herein by reference.
    13 
    13 
    14 import os
    14 import os
    15 
    15 
    16 class transaction:
    16 class transaction:
    17     def __init__(self, opener, journal):
    17     def __init__(self, opener, journal, after = None):
    18         self.opener = opener
    18         self.opener = opener
       
    19         self.after = after
    19         self.entries = []
    20         self.entries = []
    20         self.map = {}
    21         self.map = {}
    21         self.journal = journal
    22         self.journal = journal
    22 
    23 
    23         # abort here if the journal already exists
    24         # abort here if the journal already exists
    24         if os.path.exists(self.journal):
    25         if os.path.exists(self.journal):
    25             print "journal already exists, recovering"
    26             raise "journal already exists!"
    26             self.recover()
       
    27 
    27 
    28         self.file = open(self.journal, "w")
    28         self.file = open(self.journal, "w")
    29 
    29 
    30     def __del__(self):
    30     def __del__(self):
    31         if self.entries: self.abort()
    31         if self.entries: self.abort()
    41         self.file.flush()
    41         self.file.flush()
    42 
    42 
    43     def close(self):
    43     def close(self):
    44         self.file.close()
    44         self.file.close()
    45         self.entries = []
    45         self.entries = []
    46         os.unlink(self.journal)
    46         if self.after:
       
    47             os.rename(self.journal, self.after)
       
    48         else:
       
    49             os.unlink(self.journal)
    47 
    50 
    48     def abort(self):
    51     def abort(self):
    49         if not self.entries: return
    52         if not self.entries: return
    50 
    53 
    51         print "transaction abort!"
    54         print "transaction abort!"