mercurial/transaction.py
branchstable
changeset 50283 dda43856ef96
parent 50280 5e568d70f54d
child 50284 a43f0562220c
equal deleted inserted replaced
50282:4bcb91c8b9d8 50283:dda43856ef96
     9 # Copyright 2005, 2006 Olivia Mackall <olivia@selenic.com>
     9 # Copyright 2005, 2006 Olivia Mackall <olivia@selenic.com>
    10 #
    10 #
    11 # This software may be used and distributed according to the terms of the
    11 # This software may be used and distributed according to the terms of the
    12 # GNU General Public License version 2 or any later version.
    12 # GNU General Public License version 2 or any later version.
    13 
    13 
       
    14 import os
    14 
    15 
    15 from .i18n import _
    16 from .i18n import _
    16 from . import (
    17 from . import (
    17     error,
    18     error,
    18     pycompat,
    19     pycompat,
   635     def _writeundo(self):
   636     def _writeundo(self):
   636         """write transaction data for possible future undo call"""
   637         """write transaction data for possible future undo call"""
   637         if self._undoname is None:
   638         if self._undoname is None:
   638             return
   639             return
   639 
   640 
       
   641         def undoname(fn: bytes) -> bytes:
       
   642             base, name = os.path.split(fn)
       
   643             assert name.startswith(self._journal)
       
   644             new_name = name.replace(self._journal, self._undoname, 1)
       
   645             return os.path.join(base, new_name)
       
   646 
   640         undo_backup_path = b"%s.backupfiles" % self._undoname
   647         undo_backup_path = b"%s.backupfiles" % self._undoname
   641         undobackupfile = self._opener.open(undo_backup_path, b'w')
   648         undobackupfile = self._opener.open(undo_backup_path, b'w')
   642         undobackupfile.write(b'%d\n' % version)
   649         undobackupfile.write(b'%d\n' % version)
   643         for l, f, b, c in self._backupentries:
   650         for l, f, b, c in self._backupentries:
   644             if not f:  # temporary file
   651             if not f:  # temporary file
   651                         b"couldn't remove %s: unknown cache location"
   658                         b"couldn't remove %s: unknown cache location"
   652                         b"%s\n" % (b, l)
   659                         b"%s\n" % (b, l)
   653                     )
   660                     )
   654                     continue
   661                     continue
   655                 vfs = self._vfsmap[l]
   662                 vfs = self._vfsmap[l]
   656                 base, name = vfs.split(b)
   663                 u = undoname(b)
   657                 assert name.startswith(self._journal), name
       
   658                 uname = name.replace(self._journal, self._undoname, 1)
       
   659                 u = vfs.reljoin(base, uname)
       
   660                 util.copyfile(vfs.join(b), vfs.join(u), hardlink=True)
   664                 util.copyfile(vfs.join(b), vfs.join(u), hardlink=True)
   661             undobackupfile.write(b"%s\0%s\0%s\0%d\n" % (l, f, u, c))
   665             undobackupfile.write(b"%s\0%s\0%s\0%d\n" % (l, f, u, c))
   662         undobackupfile.close()
   666         undobackupfile.close()
   663 
   667 
   664     def _abort(self):
   668     def _abort(self):