D6468: narrowspec: replace one recursion-avoidance hack with another

2019-06-03 Thread martinvonz (Martin von Zweigbergk)
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG4738c292a520: narrowspec: replace one recursion-avoidance 
hack with another (authored by martinvonz, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6468?vs=15316=15331

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

AFFECTED FILES
  mercurial/narrowspec.py

CHANGE DETAILS

diff --git a/mercurial/narrowspec.py b/mercurial/narrowspec.py
--- a/mercurial/narrowspec.py
+++ b/mercurial/narrowspec.py
@@ -262,6 +262,9 @@
mctx=repo['.'], overwrite=False)
 
 def checkworkingcopynarrowspec(repo):
+# Avoid infinite recursion when updating the working copy
+if getattr(repo, '_updatingnarrowspec', False):
+return
 storespec = repo.svfs.tryread(FILENAME)
 wcspec = repo.vfs.tryread(DIRSTATE_FILENAME)
 if wcspec != storespec:
@@ -276,6 +279,7 @@
 """
 oldspec = repo.vfs.tryread(DIRSTATE_FILENAME)
 newspec = repo.svfs.tryread(FILENAME)
+repo._updatingnarrowspec = True
 
 oldincludes, oldexcludes = parseconfig(repo.ui, oldspec)
 newincludes, newexcludes = parseconfig(repo.ui, newspec)
@@ -305,10 +309,9 @@
 for f in clean + trackeddirty:
 ds.drop(f)
 
-repo.narrowpats = newincludes, newexcludes
-repo._narrowmatch = newmatch
 pctx = repo['.']
 newfiles = [f for f in pctx.manifest().walk(addedmatch) if f not in ds]
 for f in newfiles:
 ds.normallookup(f)
 _writeaddedfiles(repo, pctx, newfiles)
+repo._updatingnarrowspec = False



To: martinvonz, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D6468: narrowspec: replace one recursion-avoidance hack with another

2019-05-31 Thread martinvonz (Martin von Zweigbergk)
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  When updating the working copy narrowspec, we call context.walk() in
  order to find which files to update the working copy
  with. context.walk() calls repo.narrowmatch(). In order to avoid
  infinite recursion in this case, we have a hack that assigns the new
  values for repo.narrowpats and repo._narrowmatch. However, doing that
  of course breaks future invalidation of those properties (they're
  @storecache'd). Let's instead avoid the infinite recursion by setting
  a flag on the repo instance when we're updating the working copy.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/narrowspec.py

CHANGE DETAILS

diff --git a/mercurial/narrowspec.py b/mercurial/narrowspec.py
--- a/mercurial/narrowspec.py
+++ b/mercurial/narrowspec.py
@@ -270,6 +270,9 @@
mctx=repo['.'], overwrite=False)
 
 def checkworkingcopynarrowspec(repo):
+# Avoid infinite recursion when updating the working copy
+if getattr(repo, '_updatingnarrowspec', False):
+return
 storespec = repo.svfs.tryread(FILENAME)
 wcspec = repo.vfs.tryread(DIRSTATE_FILENAME)
 if wcspec != storespec:
@@ -284,6 +287,7 @@
 """
 oldspec = repo.vfs.tryread(DIRSTATE_FILENAME)
 newspec = repo.svfs.tryread(FILENAME)
+repo._updatingnarrowspec = True
 
 oldincludes, oldexcludes = parseconfig(repo.ui, oldspec)
 newincludes, newexcludes = parseconfig(repo.ui, newspec)
@@ -313,10 +317,9 @@
 for f in clean + trackeddirty:
 ds.drop(f)
 
-repo.narrowpats = newincludes, newexcludes
-repo._narrowmatch = newmatch
 pctx = repo['.']
 newfiles = [f for f in pctx.manifest().walk(addedmatch) if f not in ds]
 for f in newfiles:
 ds.normallookup(f)
 _writeaddedfiles(repo, pctx, newfiles)
+repo._updatingnarrowspec = False



To: martinvonz, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel