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 |
|
|
|
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( |
|
|
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( |
|
|
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( |
|
|
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