comparison mercurial/hg.py @ 41046:ce0bc2952e2a

narrow: detect if narrowspec was changed in a different share With this commit, `hg share` should be usable with narrow repos. Design explained on https://www.mercurial-scm.org/wiki/NarrowSharePlan I was running into cache invalidation problems when updating the narrowspec. After spending a day trying to figure out a good solution, I resorted to just assigning repo.narrowpats and repo._narrowmatch after invalidating them. Differential Revision: https://phab.mercurial-scm.org/D5278
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 21 Dec 2018 10:13:49 -0800
parents 6f2510b581a0
children 50ca531f1f24
comparison
equal deleted inserted replaced
41045:7db1619af061 41046:ce0bc2952e2a
36 logexchange, 36 logexchange,
37 merge as mergemod, 37 merge as mergemod,
38 narrowspec, 38 narrowspec,
39 node, 39 node,
40 phases, 40 phases,
41 repository as repositorymod,
41 scmutil, 42 scmutil,
42 sshpeer, 43 sshpeer,
43 statichttprepo, 44 statichttprepo,
44 ui as uimod, 45 ui as uimod,
45 unionrepo, 46 unionrepo,
329 default = defaultpath or sourcerepo.ui.config('paths', 'default') 330 default = defaultpath or sourcerepo.ui.config('paths', 'default')
330 if default: 331 if default:
331 template = ('[paths]\n' 332 template = ('[paths]\n'
332 'default = %s\n') 333 'default = %s\n')
333 destrepo.vfs.write('hgrc', util.tonativeeol(template % default)) 334 destrepo.vfs.write('hgrc', util.tonativeeol(template % default))
335 if repositorymod.NARROW_REQUIREMENT in sourcerepo.requirements:
336 with destrepo.wlock():
337 narrowspec.copytoworkingcopy(destrepo, None)
334 338
335 def _postshareupdate(repo, update, checkout=None): 339 def _postshareupdate(repo, update, checkout=None):
336 """Maybe perform a working directory update after a shared repo is created. 340 """Maybe perform a working directory update after a shared repo is created.
337 341
338 ``update`` can be a boolean or a revision to update to. 342 ``update`` can be a boolean or a revision to update to.
729 else: 733 else:
730 revs = None 734 revs = None
731 local = destpeer.local() 735 local = destpeer.local()
732 if local: 736 if local:
733 if narrow: 737 if narrow:
734 with local.lock(): 738 with local.wlock(), local.lock():
735 local.setnarrowpats(storeincludepats, storeexcludepats) 739 local.setnarrowpats(storeincludepats, storeexcludepats)
736 740
737 u = util.url(abspath) 741 u = util.url(abspath)
738 defaulturl = bytes(u) 742 defaulturl = bytes(u)
739 local.ui.setconfig('paths', 'default', defaulturl, 'clone') 743 local.ui.setconfig('paths', 'default', defaulturl, 'clone')