mercurial/transaction.py
changeset 162 5dcbe4d9a30c
parent 108 8d55c2d72c7c
child 421 43b8da7420a9
child 429 688d03d6997a
equal deleted inserted replaced
161:0b4c5cb953d9 162:5dcbe4d9a30c
    13 
    13 
    14 import os
    14 import os
    15 
    15 
    16 class transaction:
    16 class transaction:
    17     def __init__(self, opener, journal, after = None):
    17     def __init__(self, opener, journal, after = None):
       
    18         self.journal = None
       
    19 
       
    20         # abort here if the journal already exists
       
    21         if os.path.exists(journal):
       
    22             raise "journal already exists - run hg recover"
       
    23 
    18         self.opener = opener
    24         self.opener = opener
    19         self.after = after
    25         self.after = after
    20         self.entries = []
    26         self.entries = []
    21         self.map = {}
    27         self.map = {}
    22         self.journal = journal
    28         self.journal = journal
    23 
       
    24         # abort here if the journal already exists
       
    25         if os.path.exists(self.journal):
       
    26             raise "journal already exists!"
       
    27 
    29 
    28         self.file = open(self.journal, "w")
    30         self.file = open(self.journal, "w")
    29 
    31 
    30     def __del__(self):
    32     def __del__(self):
    31         if self.entries: self.abort()
    33         if self.entries: self.abort()
    61 
    63 
    62         self.entries = []
    64         self.entries = []
    63 
    65 
    64         print "rollback completed"
    66         print "rollback completed"
    65         
    67         
    66     def recover(self):
    68 def rollback(opener, file):
    67         for l in open(self.journal).readlines():
    69     for l in open(file).readlines():
    68             f, o = l.split('\0')
    70         f, o = l.split('\0')
    69             self.opener(f, "a").truncate(int(o))
    71         opener(f, "a").truncate(int(o))
    70         os.unlink(self.journal)
    72     os.unlink(file)
    71 
    73