equal
deleted
inserted
replaced
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): |