D4096: narrow: call narrowspec.{save,restore,clear}backup directly
This revision was automatically updated to reflect the committed changes. Closed by commit rHGad24b581e4d9: narrow: call narrowspec.{save,restore,clear}backup directly (authored by martinvonz, committed by ). REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D4096?vs=9871=9931 REVISION DETAIL https://phab.mercurial-scm.org/D4096 AFFECTED FILES hgext/narrow/narrowdirstate.py hgext/shelve.py mercurial/dirstateguard.py mercurial/localrepo.py mercurial/narrowspec.py CHANGE DETAILS diff --git a/mercurial/narrowspec.py b/mercurial/narrowspec.py --- a/mercurial/narrowspec.py +++ b/mercurial/narrowspec.py @@ -13,6 +13,7 @@ from . import ( error, match as matchmod, +repository, sparse, util, ) @@ -129,15 +130,22 @@ spec = format(includepats, excludepats) repo.vfs.write(FILENAME, spec) -def savebackup(vfs, backupname): +def savebackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +vfs = repo.vfs vfs.tryunlink(backupname) util.copyfile(vfs.join(FILENAME), vfs.join(backupname), hardlink=True) -def restorebackup(vfs, backupname): -vfs.rename(backupname, FILENAME, checkambig=True) +def restorebackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +repo.vfs.rename(backupname, FILENAME, checkambig=True) -def clearbackup(vfs, backupname): -vfs.unlink(backupname) +def clearbackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +repo.vfs.unlink(backupname) def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes): r""" Restricts the patterns according to repo settings, diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1373,6 +1373,7 @@ else: # discard all changes (including ones already written # out) in this transaction +narrowspec.restorebackup(self, 'journal.narrowspec') repo.dirstate.restorebackup(None, 'journal.dirstate') repo.invalidate(clearfilecache=True) @@ -1461,6 +1462,7 @@ @unfilteredmethod def _writejournal(self, desc): self.dirstate.savebackup(None, 'journal.dirstate') +narrowspec.savebackup(self, 'journal.narrowspec') self.vfs.write("journal.branch", encoding.fromlocal(self.dirstate.branch())) self.vfs.write("journal.desc", @@ -1548,6 +1550,7 @@ # prevent dirstateguard from overwriting already restored one dsguard.close() +narrowspec.restorebackup(self, 'undo.narrowspec') self.dirstate.restorebackup(None, 'undo.dirstate') try: branch = self.vfs.read('undo.branch') diff --git a/mercurial/dirstateguard.py b/mercurial/dirstateguard.py --- a/mercurial/dirstateguard.py +++ b/mercurial/dirstateguard.py @@ -11,6 +11,7 @@ from . import ( error, +narrowspec, util, ) @@ -33,7 +34,10 @@ self._active = False self._closed = False self._backupname = 'dirstate.backup.%s.%d' % (name, id(self)) +self._narrowspecbackupname = ('narrowspec.backup.%s.%d' % + (name, id(self))) repo.dirstate.savebackup(repo.currenttransaction(), self._backupname) +narrowspec.savebackup(repo, self._narrowspecbackupname) self._active = True def __del__(self): @@ -52,10 +56,12 @@ self._repo.dirstate.clearbackup(self._repo.currenttransaction(), self._backupname) +narrowspec.clearbackup(self._repo, self._narrowspecbackupname) self._active = False self._closed = True def _abort(self): +narrowspec.restorebackup(self._repo, self._narrowspecbackupname) self._repo.dirstate.restorebackup(self._repo.currenttransaction(), self._backupname) self._active = False diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -41,6 +41,7 @@ lock as lockmod, mdiff, merge, +narrowspec, node as nodemod, patch, phases, @@ -314,10 +315,13 @@ '''Abort current transaction for shelve/unshelve, but keep dirstate ''' tr = repo.currenttransaction() -backupname = 'dirstate.shelve' -repo.dirstate.savebackup(tr, backupname) +dirstatebackupname = 'dirstate.shelve' +narrowspecbackupname = 'narrowspec.shelve' +repo.dirstate.savebackup(tr, dirstatebackupname) +narrowspec.savebackup(repo, narrowspecbackupname) tr.abort() -repo.dirstate.restorebackup(None, backupname) +narrowspec.restorebackup(repo, narrowspecbackupname) +repo.dirstate.restorebackup(None,
D4096: narrow: call narrowspec.{save,restore,clear}backup directly
martinvonz updated this revision to Diff 9871. REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D4096?vs=9858=9871 REVISION DETAIL https://phab.mercurial-scm.org/D4096 AFFECTED FILES hgext/narrow/narrowdirstate.py hgext/shelve.py mercurial/dirstateguard.py mercurial/localrepo.py mercurial/narrowspec.py CHANGE DETAILS diff --git a/mercurial/narrowspec.py b/mercurial/narrowspec.py --- a/mercurial/narrowspec.py +++ b/mercurial/narrowspec.py @@ -13,6 +13,7 @@ from . import ( error, match as matchmod, +repository, sparse, util, ) @@ -129,15 +130,22 @@ spec = format(includepats, excludepats) repo.vfs.write(FILENAME, spec) -def savebackup(vfs, backupname): +def savebackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +vfs = repo.vfs vfs.tryunlink(backupname) util.copyfile(vfs.join(FILENAME), vfs.join(backupname), hardlink=True) -def restorebackup(vfs, backupname): -vfs.rename(backupname, FILENAME, checkambig=True) +def restorebackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +repo.vfs.rename(backupname, FILENAME, checkambig=True) -def clearbackup(vfs, backupname): -vfs.unlink(backupname) +def clearbackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +repo.vfs.unlink(backupname) def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes): r""" Restricts the patterns according to repo settings, diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1372,6 +1372,7 @@ else: # discard all changes (including ones already written # out) in this transaction +narrowspec.restorebackup(self, 'journal.narrowspec') repo.dirstate.restorebackup(None, 'journal.dirstate') repo.invalidate(clearfilecache=True) @@ -1460,6 +1461,7 @@ @unfilteredmethod def _writejournal(self, desc): self.dirstate.savebackup(None, 'journal.dirstate') +narrowspec.savebackup(self, 'journal.narrowspec') self.vfs.write("journal.branch", encoding.fromlocal(self.dirstate.branch())) self.vfs.write("journal.desc", @@ -1547,6 +1549,7 @@ # prevent dirstateguard from overwriting already restored one dsguard.close() +narrowspec.restorebackup(self, 'undo.narrowspec') self.dirstate.restorebackup(None, 'undo.dirstate') try: branch = self.vfs.read('undo.branch') diff --git a/mercurial/dirstateguard.py b/mercurial/dirstateguard.py --- a/mercurial/dirstateguard.py +++ b/mercurial/dirstateguard.py @@ -11,6 +11,7 @@ from . import ( error, +narrowspec, util, ) @@ -33,7 +34,10 @@ self._active = False self._closed = False self._backupname = 'dirstate.backup.%s.%d' % (name, id(self)) +self._narrowspecbackupname = ('narrowspec.backup.%s.%d' % + (name, id(self))) repo.dirstate.savebackup(repo.currenttransaction(), self._backupname) +narrowspec.savebackup(repo, self._narrowspecbackupname) self._active = True def __del__(self): @@ -52,10 +56,12 @@ self._repo.dirstate.clearbackup(self._repo.currenttransaction(), self._backupname) +narrowspec.clearbackup(self._repo, self._narrowspecbackupname) self._active = False self._closed = True def _abort(self): +narrowspec.restorebackup(self._repo, self._narrowspecbackupname) self._repo.dirstate.restorebackup(self._repo.currenttransaction(), self._backupname) self._active = False diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -41,6 +41,7 @@ lock as lockmod, mdiff, merge, +narrowspec, node as nodemod, patch, phases, @@ -314,10 +315,13 @@ '''Abort current transaction for shelve/unshelve, but keep dirstate ''' tr = repo.currenttransaction() -backupname = 'dirstate.shelve' -repo.dirstate.savebackup(tr, backupname) +dirstatebackupname = 'dirstate.shelve' +narrowspecbackupname = 'narrowspec.shelve' +repo.dirstate.savebackup(tr, dirstatebackupname) +narrowspec.savebackup(repo, narrowspecbackupname) tr.abort() -repo.dirstate.restorebackup(None, backupname) +narrowspec.restorebackup(repo, narrowspecbackupname) +repo.dirstate.restorebackup(None, dirstatebackupname) def createcmd(ui, repo, pats, opts): """subcommand that creates a new shelve""" diff --git a/hgext/narrow/narrowdirstate.py
D4096: narrow: call narrowspec.{save,restore,clear}backup directly
martinvonz created this revision. Herald added a reviewer: durin42. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers. REVISION SUMMARY I want to move .hg/narrowspec to .hg/store/narrowspec and we need to decouple the narrowspec update from the dirstate update for that. This patch lets the callers call the narrowspec backup functions directly, in addition to the dirstate backup functions. The narrowspec methods are made to check if narrowing is enabled. For that, a repo instance was needed, which all the callers luckily already had available. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D4096 AFFECTED FILES hgext/narrow/narrowdirstate.py hgext/shelve.py mercurial/dirstateguard.py mercurial/localrepo.py mercurial/narrowspec.py CHANGE DETAILS diff --git a/mercurial/narrowspec.py b/mercurial/narrowspec.py --- a/mercurial/narrowspec.py +++ b/mercurial/narrowspec.py @@ -13,6 +13,7 @@ from . import ( error, match as matchmod, +repository, util, ) @@ -145,15 +146,22 @@ spec = format(includepats, excludepats) repo.vfs.write(FILENAME, spec) -def savebackup(vfs, backupname): +def savebackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +vfs = repo.vfs vfs.tryunlink(backupname) util.copyfile(vfs.join(FILENAME), vfs.join(backupname), hardlink=True) -def restorebackup(vfs, backupname): -vfs.rename(backupname, FILENAME, checkambig=True) +def restorebackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +repo.vfs.rename(backupname, FILENAME, checkambig=True) -def clearbackup(vfs, backupname): -vfs.unlink(backupname) +def clearbackup(repo, backupname): +if repository.NARROW_REQUIREMENT not in repo.requirements: +return +repo.vfs.unlink(backupname) def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes): r""" Restricts the patterns according to repo settings, diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1372,6 +1372,7 @@ else: # discard all changes (including ones already written # out) in this transaction +narrowspec.restorebackup(self, 'journal.narrowspec') repo.dirstate.restorebackup(None, 'journal.dirstate') repo.invalidate(clearfilecache=True) @@ -1460,6 +1461,7 @@ @unfilteredmethod def _writejournal(self, desc): self.dirstate.savebackup(None, 'journal.dirstate') +narrowspec.savebackup(self, 'journal.narrowspec') self.vfs.write("journal.branch", encoding.fromlocal(self.dirstate.branch())) self.vfs.write("journal.desc", @@ -1547,6 +1549,7 @@ # prevent dirstateguard from overwriting already restored one dsguard.close() +narrowspec.restorebackup(self, 'undo.narrowspec') self.dirstate.restorebackup(None, 'undo.dirstate') try: branch = self.vfs.read('undo.branch') diff --git a/mercurial/dirstateguard.py b/mercurial/dirstateguard.py --- a/mercurial/dirstateguard.py +++ b/mercurial/dirstateguard.py @@ -11,6 +11,7 @@ from . import ( error, +narrowspec, util, ) @@ -33,7 +34,10 @@ self._active = False self._closed = False self._backupname = 'dirstate.backup.%s.%d' % (name, id(self)) +self._narrowspecbackupname = ('narrowspec.backup.%s.%d' % + (name, id(self))) repo.dirstate.savebackup(repo.currenttransaction(), self._backupname) +narrowspec.savebackup(repo, self._narrowspecbackupname) self._active = True def __del__(self): @@ -52,10 +56,12 @@ self._repo.dirstate.clearbackup(self._repo.currenttransaction(), self._backupname) +narrowspec.clearbackup(self._repo, self._narrowspecbackupname) self._active = False self._closed = True def _abort(self): +narrowspec.restorebackup(self._repo, self._narrowspecbackupname) self._repo.dirstate.restorebackup(self._repo.currenttransaction(), self._backupname) self._active = False diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -41,6 +41,7 @@ lock as lockmod, mdiff, merge, +narrowspec, node as nodemod, patch, phases, @@ -314,10 +315,13 @@ '''Abort current transaction for shelve/unshelve, but keep dirstate ''' tr = repo.currenttransaction() -backupname = 'dirstate.shelve' -repo.dirstate.savebackup(tr, backupname) +dirstatebackupname = 'dirstate.shelve' +narrowspecbackupname =