##// END OF EJS Templates
narrow: call narrowspec.{save,restore,clear}backup directly...
Martin von Zweigbergk -
r39142:ad24b581 default
parent child Browse files
Show More
@@ -11,7 +11,6 b' from mercurial.i18n import _'
11 11 from mercurial import (
12 12 error,
13 13 match as matchmod,
14 narrowspec,
15 14 )
16 15
17 16 def wrapdirstate(repo, dirstate):
@@ -28,10 +27,6 b' def wrapdirstate(repo, dirstate):'
28 27 return fn(self, *args)
29 28 return _wrapper
30 29
31 def _narrowbackupname(backupname):
32 assert 'dirstate' in backupname
33 return backupname.replace('dirstate', narrowspec.FILENAME)
34
35 30 class narrowdirstate(dirstate.__class__):
36 31 def walk(self, match, subrepos, unknown, ignored, full=True,
37 32 narrowonly=True):
@@ -77,18 +72,5 b' def wrapdirstate(repo, dirstate):'
77 72 allfiles = [f for f in allfiles if repo.narrowmatch()(f)]
78 73 super(narrowdirstate, self).rebuild(parent, allfiles, changedfiles)
79 74
80 def restorebackup(self, tr, backupname):
81 narrowspec.restorebackup(self._opener,
82 _narrowbackupname(backupname))
83 super(narrowdirstate, self).restorebackup(tr, backupname)
84
85 def savebackup(self, tr, backupname):
86 super(narrowdirstate, self).savebackup(tr, backupname)
87 narrowspec.savebackup(self._opener, _narrowbackupname(backupname))
88
89 def clearbackup(self, tr, backupname):
90 super(narrowdirstate, self).clearbackup(tr, backupname)
91 narrowspec.clearbackup(self._opener, _narrowbackupname(backupname))
92
93 75 dirstate.__class__ = narrowdirstate
94 76 return dirstate
@@ -41,6 +41,7 b' from mercurial import ('
41 41 lock as lockmod,
42 42 mdiff,
43 43 merge,
44 narrowspec,
44 45 node as nodemod,
45 46 patch,
46 47 phases,
@@ -314,10 +315,13 b' def _aborttransaction(repo):'
314 315 '''Abort current transaction for shelve/unshelve, but keep dirstate
315 316 '''
316 317 tr = repo.currenttransaction()
317 backupname = 'dirstate.shelve'
318 repo.dirstate.savebackup(tr, backupname)
318 dirstatebackupname = 'dirstate.shelve'
319 narrowspecbackupname = 'narrowspec.shelve'
320 repo.dirstate.savebackup(tr, dirstatebackupname)
321 narrowspec.savebackup(repo, narrowspecbackupname)
319 322 tr.abort()
320 repo.dirstate.restorebackup(None, backupname)
323 narrowspec.restorebackup(repo, narrowspecbackupname)
324 repo.dirstate.restorebackup(None, dirstatebackupname)
321 325
322 326 def createcmd(ui, repo, pats, opts):
323 327 """subcommand that creates a new shelve"""
@@ -11,6 +11,7 b' from .i18n import _'
11 11
12 12 from . import (
13 13 error,
14 narrowspec,
14 15 util,
15 16 )
16 17
@@ -33,7 +34,10 b' class dirstateguard(util.transactional):'
33 34 self._active = False
34 35 self._closed = False
35 36 self._backupname = 'dirstate.backup.%s.%d' % (name, id(self))
37 self._narrowspecbackupname = ('narrowspec.backup.%s.%d' %
38 (name, id(self)))
36 39 repo.dirstate.savebackup(repo.currenttransaction(), self._backupname)
40 narrowspec.savebackup(repo, self._narrowspecbackupname)
37 41 self._active = True
38 42
39 43 def __del__(self):
@@ -52,10 +56,12 b' class dirstateguard(util.transactional):'
52 56
53 57 self._repo.dirstate.clearbackup(self._repo.currenttransaction(),
54 58 self._backupname)
59 narrowspec.clearbackup(self._repo, self._narrowspecbackupname)
55 60 self._active = False
56 61 self._closed = True
57 62
58 63 def _abort(self):
64 narrowspec.restorebackup(self._repo, self._narrowspecbackupname)
59 65 self._repo.dirstate.restorebackup(self._repo.currenttransaction(),
60 66 self._backupname)
61 67 self._active = False
@@ -1373,6 +1373,7 b' class localrepository(object):'
1373 1373 else:
1374 1374 # discard all changes (including ones already written
1375 1375 # out) in this transaction
1376 narrowspec.restorebackup(self, 'journal.narrowspec')
1376 1377 repo.dirstate.restorebackup(None, 'journal.dirstate')
1377 1378
1378 1379 repo.invalidate(clearfilecache=True)
@@ -1461,6 +1462,7 b' class localrepository(object):'
1461 1462 @unfilteredmethod
1462 1463 def _writejournal(self, desc):
1463 1464 self.dirstate.savebackup(None, 'journal.dirstate')
1465 narrowspec.savebackup(self, 'journal.narrowspec')
1464 1466 self.vfs.write("journal.branch",
1465 1467 encoding.fromlocal(self.dirstate.branch()))
1466 1468 self.vfs.write("journal.desc",
@@ -1548,6 +1550,7 b' class localrepository(object):'
1548 1550 # prevent dirstateguard from overwriting already restored one
1549 1551 dsguard.close()
1550 1552
1553 narrowspec.restorebackup(self, 'undo.narrowspec')
1551 1554 self.dirstate.restorebackup(None, 'undo.dirstate')
1552 1555 try:
1553 1556 branch = self.vfs.read('undo.branch')
@@ -13,6 +13,7 b' from .i18n import _'
13 13 from . import (
14 14 error,
15 15 match as matchmod,
16 repository,
16 17 sparse,
17 18 util,
18 19 )
@@ -129,15 +130,22 b' def save(repo, includepats, excludepats)'
129 130 spec = format(includepats, excludepats)
130 131 repo.vfs.write(FILENAME, spec)
131 132
132 def savebackup(vfs, backupname):
133 def savebackup(repo, backupname):
134 if repository.NARROW_REQUIREMENT not in repo.requirements:
135 return
136 vfs = repo.vfs
133 137 vfs.tryunlink(backupname)
134 138 util.copyfile(vfs.join(FILENAME), vfs.join(backupname), hardlink=True)
135 139
136 def restorebackup(vfs, backupname):
137 vfs.rename(backupname, FILENAME, checkambig=True)
140 def restorebackup(repo, backupname):
141 if repository.NARROW_REQUIREMENT not in repo.requirements:
142 return
143 repo.vfs.rename(backupname, FILENAME, checkambig=True)
138 144
139 def clearbackup(vfs, backupname):
140 vfs.unlink(backupname)
145 def clearbackup(repo, backupname):
146 if repository.NARROW_REQUIREMENT not in repo.requirements:
147 return
148 repo.vfs.unlink(backupname)
141 149
142 150 def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes):
143 151 r""" Restricts the patterns according to repo settings,
General Comments 0
You need to be logged in to leave comments. Login now