# HG changeset patch # User Matt Harbison # Date 1508291336 14400 # Node ID 9f7ecc5bbc28e1262a8afadad8b5d78bf134a302 # Parent eb24f1d1b50be7898dbb1a571ed9666021ae6a6d share: move the implementation of 'unshare' to the 'hg' module This will be used to setup unsharing subrepos. Usually cmdutil is used for this purpose. But the implementation needs hg.copystore(), and the hg module already imports cmdutil. diff -r eb24f1d1b50b -r 9f7ecc5bbc28 hgext/share.py --- a/hgext/share.py Tue Oct 17 20:25:43 2017 +0200 +++ b/hgext/share.py Tue Oct 17 21:48:56 2017 -0400 @@ -114,28 +114,7 @@ if not repo.shared(): raise error.Abort(_("this is not a shared repo")) - destlock = lock = None - lock = repo.lock() - try: - # we use locks here because if we race with commit, we - # can end up with extra data in the cloned revlogs that's - # not pointed to by changesets, thus causing verify to - # fail - - destlock = hg.copystore(ui, repo, repo.path) - - sharefile = repo.vfs.join('sharedpath') - util.rename(sharefile, sharefile + '.old') - - repo.requirements.discard('shared') - repo.requirements.discard('relshared') - repo._writerequirements() - finally: - destlock and destlock.release() - lock and lock.release() - - # update store, spath, svfs and sjoin of repo - repo.unfiltered().__init__(repo.baseui, repo.root) + hg.unshare(ui, repo) # Wrap clone command to pass auto share options. def clone(orig, ui, source, *args, **opts): diff -r eb24f1d1b50b -r 9f7ecc5bbc28 mercurial/hg.py --- a/mercurial/hg.py Tue Oct 17 20:25:43 2017 +0200 +++ b/mercurial/hg.py Tue Oct 17 21:48:56 2017 -0400 @@ -257,6 +257,35 @@ _postshareupdate(r, update, checkout=checkout) return r +def unshare(ui, repo): + """convert a shared repository to a normal one + + Copy the store data to the repo and remove the sharedpath data. + """ + + destlock = lock = None + lock = repo.lock() + try: + # we use locks here because if we race with commit, we + # can end up with extra data in the cloned revlogs that's + # not pointed to by changesets, thus causing verify to + # fail + + destlock = copystore(ui, repo, repo.path) + + sharefile = repo.vfs.join('sharedpath') + util.rename(sharefile, sharefile + '.old') + + repo.requirements.discard('shared') + repo.requirements.discard('relshared') + repo._writerequirements() + finally: + destlock and destlock.release() + lock and lock.release() + + # update store, spath, svfs and sjoin of repo + repo.unfiltered().__init__(repo.baseui, repo.root) + def postshare(sourcerepo, destrepo, bookmarks=True, defaultpath=None): """Called after a new shared repo is created.