Patchwork [3,of,4] destroyed: update `unserved` branchcache instead

login
register
mail settings
Submitter Pierre-Yves David
Date Jan. 15, 2013, 11:20 p.m.
Message ID <5175c9be5963aebd2a77.1358292030@yamac.lan>
Download mbox | patch
Permalink /patch/634/
State Accepted
Commit dd3fd3353e233db689c3f4ad4a172010ef0a1be2
Headers show

Comments

Pierre-Yves David - Jan. 15, 2013, 11:20 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@logilab.fr>
# Date 1358289187 -3600
# Node ID 5175c9be5963aebd2a774015fd02050e924dbf63
# Parent  324ad5ba3de993f37342385a8369a5829b59011a
destroyed: update `unserved` branchcache instead


Before this changesets the `destroyed` function  updated the branchcache for
unfiltered repository. As seen in a previous changeset, Read only repo does
not cares about the unfiltered repo. We now update it for `unserved`.

Patch

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -1384,15 +1384,10 @@  class localrepository(object):
         to be flushed when the current lock is released. Because a call to
         destroyed is imminent, the repo will be invalidated causing those
         changes to stay in memory (waiting for the next unlock), or vanish
         completely.
         '''
-        # It simplifies the logic around updating the branchheads cache if we
-        # only have to consider the effect of the stripped revisions and not
-        # revisions missing because the cache is out-of-date.
-        branchmap.updatecache(self)
-
         # When using the same lock to commit and strip, the phasecache is left
         # dirty after committing. Then when we strip, the repo is invalidated,
         # causing those changes to disappear.
         if '_phasecache' in vars(self):
             self._phasecache.write()
@@ -1419,13 +1414,14 @@  class localrepository(object):
         # the removed nodes now and write the updated cache.
         if '_phasecache' in self._filecache:
             self._phasecache.filterunknown(self)
             self._phasecache.write()
 
-        # update branchcache information likely invalidated by the strip.
-        # We rely on branchcache collaboration for this call to be fast
-        branchmap.updatecache(self)
+        # update the 'served' branch cache to help read only server process
+        # Thanks to branchcach collaboration this is done from the nearest
+        # filtered subset and it is expected to be fast.
+        branchmap.updatecache(self.filtered('served'))
 
         # Ensure the persistent tag cache is updated.  Doing it now
         # means that the tag cache only has to worry about destroyed
         # heads immediately after a strip/rollback.  That in turn
         # guarantees that "cachetip == currenttip" (comparing both rev