##// END OF EJS Templates
dirstateguard: use mktemp-like functionality to generate the backup filenames...
Kyle Lippincott -
r47777:222a42ac stable
parent child Browse files
Show More
@@ -7,11 +7,13 b''
7 7
8 8 from __future__ import absolute_import
9 9
10 import os
10 11 from .i18n import _
11 12
12 13 from . import (
13 14 error,
14 15 narrowspec,
16 requirements,
15 17 util,
16 18 )
17 19
@@ -34,13 +36,22 b' class dirstateguard(util.transactional):'
34 36 self._repo = repo
35 37 self._active = False
36 38 self._closed = False
37 self._backupname = b'dirstate.backup.%s.%d' % (name, id(self))
38 self._narrowspecbackupname = b'narrowspec.backup.%s.%d' % (
39 name,
40 id(self),
41 )
39
40 def getname(prefix):
41 fd, fname = repo.vfs.mkstemp(prefix=prefix)
42 os.close(fd)
43 return fname
44
45 self._backupname = getname(b'dirstate.backup.%s.' % name)
42 46 repo.dirstate.savebackup(repo.currenttransaction(), self._backupname)
43 narrowspec.savewcbackup(repo, self._narrowspecbackupname)
47 # Don't make this the empty string, things may join it with stuff and
48 # blindly try to unlink it, which could be bad.
49 self._narrowspecbackupname = None
50 if requirements.NARROW_REQUIREMENT in repo.requirements:
51 self._narrowspecbackupname = getname(
52 b'narrowspec.backup.%s.' % name
53 )
54 narrowspec.savewcbackup(repo, self._narrowspecbackupname)
44 55 self._active = True
45 56
46 57 def __del__(self):
@@ -62,12 +73,14 b' class dirstateguard(util.transactional):'
62 73 self._repo.dirstate.clearbackup(
63 74 self._repo.currenttransaction(), self._backupname
64 75 )
65 narrowspec.clearwcbackup(self._repo, self._narrowspecbackupname)
76 if self._narrowspecbackupname:
77 narrowspec.clearwcbackup(self._repo, self._narrowspecbackupname)
66 78 self._active = False
67 79 self._closed = True
68 80
69 81 def _abort(self):
70 narrowspec.restorewcbackup(self._repo, self._narrowspecbackupname)
82 if self._narrowspecbackupname:
83 narrowspec.restorewcbackup(self._repo, self._narrowspecbackupname)
71 84 self._repo.dirstate.restorebackup(
72 85 self._repo.currenttransaction(), self._backupname
73 86 )
General Comments 0
You need to be logged in to leave comments. Login now