Patchwork D4099: narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)

login
register
mail settings
Submitter phabricator
Date Aug. 4, 2018, 12:13 a.m.
Message ID <43c7c1aae12dcc4f272dc43dc69bad35@localhost.localdomain>
Download mbox | patch
Permalink /patch/33206/
State Not Applicable
Headers show

Comments

phabricator - Aug. 4, 2018, 12:13 a.m.
martinvonz updated this revision to Diff 9874.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D4099?vs=9861&id=9874

REVISION DETAIL
  https://phab.mercurial-scm.org/D4099

AFFECTED FILES
  hgext/narrow/__init__.py
  hgext/narrow/narrowrepo.py
  mercurial/localrepo.py
  mercurial/narrowspec.py
  mercurial/store.py
  tests/test-narrow-debugcommands.t
  tests/test-narrow-pull.t

CHANGE DETAILS




To: martinvonz, durin42, #hg-reviewers
Cc: mercurial-devel
Yuya Nishihara - Aug. 5, 2018, 1:01 p.m.
Queued, thanks.

>  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)
> +    util.copyfile(repo.svfs.join(FILENAME), vfs.join(backupname), hardlink=True)

Maybe move backup file to svfs as well?
phabricator - Aug. 5, 2018, 1:04 p.m.
yuja added a comment.


  Queued, thanks.
  
  >   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) +    util.copyfile(repo.svfs.join(FILENAME), vfs.join(backupname), hardlink=True)
  
  Maybe move backup file to svfs as well?

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D4099

To: martinvonz, durin42, #hg-reviewers
Cc: yuja, mercurial-devel

Patch

diff --git a/tests/test-narrow-pull.t b/tests/test-narrow-pull.t
--- a/tests/test-narrow-pull.t
+++ b/tests/test-narrow-pull.t
@@ -166,7 +166,6 @@ 
 
 We should also be able to unshare without breaking everything:
   $ hg unshare
-  devel-warn: write with no wlock: "narrowspec" at: */hgext/narrow/narrowrepo.py:* (unsharenarrowspec) (glob)
   $ hg verify
   checking changesets
   checking manifests
diff --git a/tests/test-narrow-debugcommands.t b/tests/test-narrow-debugcommands.t
--- a/tests/test-narrow-debugcommands.t
+++ b/tests/test-narrow-debugcommands.t
@@ -1,7 +1,7 @@ 
   $ . "$TESTDIR/narrow-library.sh"
   $ hg init repo
   $ cd repo
-  $ cat << EOF > .hg/narrowspec
+  $ cat << EOF > .hg/store/narrowspec
   > [include]
   > path:foo
   > [exclude]
diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -317,8 +317,8 @@ 
         mode = None
     return mode
 
-_data = ('data meta 00manifest.d 00manifest.i 00changelog.d 00changelog.i'
-         ' phaseroots obsstore')
+_data = ('narrowspec data meta 00manifest.d 00manifest.i'
+         ' 00changelog.d 00changelog.i phaseroots obsstore')
 
 def isrevlog(f, kind, st):
     return kind == stat.S_IFREG and f[-2:] in ('.i', '.d')
@@ -546,7 +546,7 @@ 
                     raise
 
     def copylist(self):
-        d = ('data meta dh fncache phaseroots obsstore'
+        d = ('narrowspec data meta dh fncache phaseroots obsstore'
              ' 00manifest.d 00manifest.i 00changelog.d 00changelog.i')
         return (['requires', '00changelog.i'] +
                 ['store/' + f for f in d.split()])
diff --git a/mercurial/narrowspec.py b/mercurial/narrowspec.py
--- a/mercurial/narrowspec.py
+++ b/mercurial/narrowspec.py
@@ -108,7 +108,7 @@ 
 
 def load(repo):
     try:
-        spec = repo.vfs.read(FILENAME)
+        spec = repo.svfs.read(FILENAME)
     except IOError as e:
         # Treat "narrowspec does not exist" the same as "narrowspec file exists
         # and is empty".
@@ -125,19 +125,19 @@ 
 
 def save(repo, includepats, excludepats):
     spec = format(includepats, excludepats)
-    repo.vfs.write(FILENAME, spec)
+    repo.svfs.write(FILENAME, spec)
 
 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)
+    util.copyfile(repo.svfs.join(FILENAME), vfs.join(backupname), hardlink=True)
 
 def restorebackup(repo, backupname):
     if repository.NARROW_REQUIREMENT not in repo.requirements:
         return
-    repo.vfs.rename(backupname, FILENAME)
+    util.rename(repo.vfs.join(backupname), repo.svfs.join(FILENAME))
 
 def clearbackup(repo, backupname):
     if repository.NARROW_REQUIREMENT not in repo.requirements:
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -811,7 +811,7 @@ 
                                " working parent %s!\n") % short(node))
             return nullid
 
-    @repofilecache(narrowspec.FILENAME)
+    @storecache(narrowspec.FILENAME)
     def narrowpats(self):
         """matcher patterns for this repository's narrowspec
 
@@ -823,7 +823,7 @@ 
             source = hg.sharedreposource(self)
         return narrowspec.load(source)
 
-    @repofilecache(narrowspec.FILENAME)
+    @storecache(narrowspec.FILENAME)
     def _narrowmatch(self):
         if repository.NARROW_REQUIREMENT not in self.requirements:
             return matchmod.always(self.root, '')
diff --git a/hgext/narrow/narrowrepo.py b/hgext/narrow/narrowrepo.py
--- a/hgext/narrow/narrowrepo.py
+++ b/hgext/narrow/narrowrepo.py
@@ -7,34 +7,11 @@ 
 
 from __future__ import absolute_import
 
-from mercurial import (
-    hg,
-    narrowspec,
-    repository,
-)
-
 from . import (
     narrowdirstate,
     narrowrevlog,
 )
 
-def wrappostshare(orig, sourcerepo, destrepo, **kwargs):
-    orig(sourcerepo, destrepo, **kwargs)
-    if repository.NARROW_REQUIREMENT in sourcerepo.requirements:
-        with destrepo.wlock():
-            with destrepo.vfs('shared', 'a') as fp:
-                fp.write(narrowspec.FILENAME + '\n')
-
-def unsharenarrowspec(orig, ui, repo, repopath):
-    if (repository.NARROW_REQUIREMENT in repo.requirements
-        and repo.path == repopath and repo.shared()):
-        srcrepo = hg.sharedreposource(repo)
-        with srcrepo.vfs(narrowspec.FILENAME) as f:
-            spec = f.read()
-        with repo.vfs(narrowspec.FILENAME, 'w') as f:
-            f.write(spec)
-    return orig(ui, repo, repopath)
-
 def wraprepo(repo):
     """Enables narrow clone functionality on a single local repository."""
 
diff --git a/hgext/narrow/__init__.py b/hgext/narrow/__init__.py
--- a/hgext/narrow/__init__.py
+++ b/hgext/narrow/__init__.py
@@ -16,7 +16,6 @@ 
 
 from mercurial import (
     extensions,
-    hg,
     localrepo,
     registrar,
     repository,
@@ -86,8 +85,6 @@ 
 
 def extsetup(ui):
     extensions.wrapfunction(verifymod.verifier, '__init__', _verifierinit)
-    extensions.wrapfunction(hg, 'postshare', narrowrepo.wrappostshare)
-    extensions.wrapfunction(hg, 'copystore', narrowrepo.unsharenarrowspec)
 
 templatekeyword = narrowtemplates.templatekeyword
 revsetpredicate = narrowtemplates.revsetpredicate