mercurial/transaction.py
changeset 23278 aa19432764d6
parent 23253 8d84b7a2dd91
child 23279 e245775f8fd3
equal deleted inserted replaced
23277:581d3bc03aad 23278:aa19432764d6
    42                 if inst.errno != errno.ENOENT:
    42                 if inst.errno != errno.ENOENT:
    43                     raise
    43                     raise
    44 
    44 
    45     backupfiles = []
    45     backupfiles = []
    46     for f, b in backupentries:
    46     for f, b in backupentries:
    47         filepath = opener.join(f)
    47         if b:
    48         backuppath = opener.join(b)
    48             filepath = opener.join(f)
    49         try:
    49             backuppath = opener.join(b)
    50             util.copyfile(backuppath, filepath)
    50             try:
    51             backupfiles.append(b)
    51                 util.copyfile(backuppath, filepath)
    52         except IOError:
    52                 backupfiles.append(b)
    53             report(_("failed to recover %s\n") % f)
    53             except IOError:
    54             raise
    54                 report(_("failed to recover %s\n") % f)
       
    55                 raise
       
    56         else:
       
    57             try:
       
    58                 opener.unlink(f)
       
    59             except (IOError, OSError), inst:
       
    60                 if inst.errno != errno.ENOENT:
       
    61                     raise
    55 
    62 
    56     opener.unlink(journal)
    63     opener.unlink(journal)
    57     backuppath = "%s.backupfiles" % journal
    64     backuppath = "%s.backupfiles" % journal
    58     if opener.exists(backuppath):
    65     if opener.exists(backuppath):
    59         opener.unlink(backuppath)
    66         opener.unlink(backuppath)
    83         self.onclose = onclose
    90         self.onclose = onclose
    84         self.onabort = onabort
    91         self.onabort = onabort
    85         self.entries = []
    92         self.entries = []
    86         self.map = {}
    93         self.map = {}
    87         # a list of ('path', 'backuppath') entries.
    94         # a list of ('path', 'backuppath') entries.
       
    95         # if 'backuppath' is empty, no file existed at backup time
    88         self._backupentries = []
    96         self._backupentries = []
    89         self._backupmap = {}
    97         self._backupmap = {}
    90         self.journal = journal
    98         self.journal = journal
    91         self._queue = []
    99         self._queue = []
    92         # a dict of arguments to be passed to hooks
   100         # a dict of arguments to be passed to hooks
   177         if vfs.exists(file):
   185         if vfs.exists(file):
   178             filepath = vfs.join(file)
   186             filepath = vfs.join(file)
   179             backuppath = self.opener.join(backupfile)
   187             backuppath = self.opener.join(backupfile)
   180             util.copyfiles(filepath, backuppath, hardlink=hardlink)
   188             util.copyfiles(filepath, backuppath, hardlink=hardlink)
   181         else:
   189         else:
   182             self.add(file, 0)
   190             backupfile = ''
   183             return
       
   184 
   191 
   185         self._backupentries.append((file, backupfile))
   192         self._backupentries.append((file, backupfile))
   186         self._backupmap[file] = len(self._backupentries) - 1
   193         self._backupmap[file] = len(self._backupentries) - 1
   187         self._backupsfile.write("%s\0%s\n" % (file, backupfile))
   194         self._backupsfile.write("%s\0%s\n" % (file, backupfile))
   188         self._backupsfile.flush()
   195         self._backupsfile.flush()
   329         if self.opener.isfile(self.journal):
   336         if self.opener.isfile(self.journal):
   330             self.opener.unlink(self.journal)
   337             self.opener.unlink(self.journal)
   331         if self.opener.isfile(self._backupjournal):
   338         if self.opener.isfile(self._backupjournal):
   332             self.opener.unlink(self._backupjournal)
   339             self.opener.unlink(self._backupjournal)
   333             for _f, b in self._backupentries:
   340             for _f, b in self._backupentries:
   334                 self.opener.unlink(b)
   341                 if b:
       
   342                     self.opener.unlink(b)
   335         self._backupentries = []
   343         self._backupentries = []
   336         self.journal = None
   344         self.journal = None
   337         # run post close action
   345         # run post close action
   338         categories = sorted(self._postclosecallback)
   346         categories = sorted(self._postclosecallback)
   339         for cat in categories:
   347         for cat in categories: