D4096: narrow: call narrowspec.{save,restore,clear}backup directly
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Sun Aug 5 09:05:26 EDT 2018
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&id=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, dirstatebackupname)
def createcmd(ui, repo, pats, opts):
"""subcommand that creates a new shelve"""
diff --git a/hgext/narrow/narrowdirstate.py b/hgext/narrow/narrowdirstate.py
--- a/hgext/narrow/narrowdirstate.py
+++ b/hgext/narrow/narrowdirstate.py
@@ -11,7 +11,6 @@
from mercurial import (
error,
match as matchmod,
- narrowspec,
)
def wrapdirstate(repo, dirstate):
@@ -28,10 +27,6 @@
return fn(self, *args)
return _wrapper
- def _narrowbackupname(backupname):
- assert 'dirstate' in backupname
- return backupname.replace('dirstate', narrowspec.FILENAME)
-
class narrowdirstate(dirstate.__class__):
def walk(self, match, subrepos, unknown, ignored, full=True,
narrowonly=True):
@@ -77,18 +72,5 @@
allfiles = [f for f in allfiles if repo.narrowmatch()(f)]
super(narrowdirstate, self).rebuild(parent, allfiles, changedfiles)
- def restorebackup(self, tr, backupname):
- narrowspec.restorebackup(self._opener,
- _narrowbackupname(backupname))
- super(narrowdirstate, self).restorebackup(tr, backupname)
-
- def savebackup(self, tr, backupname):
- super(narrowdirstate, self).savebackup(tr, backupname)
- narrowspec.savebackup(self._opener, _narrowbackupname(backupname))
-
- def clearbackup(self, tr, backupname):
- super(narrowdirstate, self).clearbackup(tr, backupname)
- narrowspec.clearbackup(self._opener, _narrowbackupname(backupname))
-
dirstate.__class__ = narrowdirstate
return dirstate
To: martinvonz, durin42, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list