diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -905,8 +905,8 @@ return result -def hgpostshare(orig, sourcerepo, destrepo, bookmarks=True, defaultpath=None): - orig(sourcerepo, destrepo, bookmarks, defaultpath) +def hgpostshare(orig, sourcerepo, destrepo, defaultpath=None): + orig(sourcerepo, destrepo, defaultpath=defaultpath) # If largefiles is required for this repo, permanently enable it locally if 'largefiles' in destrepo.requirements: diff --git a/hgext/lfs/wrapper.py b/hgext/lfs/wrapper.py --- a/hgext/lfs/wrapper.py +++ b/hgext/lfs/wrapper.py @@ -240,8 +240,8 @@ return result -def hgpostshare(orig, sourcerepo, destrepo, bookmarks=True, defaultpath=None): - orig(sourcerepo, destrepo, bookmarks, defaultpath) +def hgpostshare(orig, sourcerepo, destrepo, defaultpath=None): + orig(sourcerepo, destrepo, defaultpath=defaultpath) # If lfs is required for this repo, permanently enable it locally if 'lfs' in destrepo.requirements: diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -259,12 +259,17 @@ srcrepo = source.local() checkout = None + shareditems = set() + if bookmarks: + shareditems.add(sharedbookmarks) + r = repository(ui, dest, create=True, createopts={ 'sharedrepo': srcrepo, 'sharedrelative': relative, + 'shareditems': shareditems, }) - postshare(srcrepo, r, bookmarks=bookmarks, defaultpath=defaultpath) + postshare(srcrepo, r, defaultpath=defaultpath) _postshareupdate(r, update, checkout=checkout) return r @@ -315,7 +320,7 @@ return newrepo -def postshare(sourcerepo, destrepo, bookmarks=True, defaultpath=None): +def postshare(sourcerepo, destrepo, defaultpath=None): """Called after a new shared repo is created. The new repo only has a requirements file and pointer to the source. @@ -330,10 +335,6 @@ 'default = %s\n') destrepo.vfs.write('hgrc', util.tonativeeol(template % default)) - with destrepo.wlock(): - if bookmarks: - destrepo.vfs.write('shared', sharedbookmarks + '\n') - def _postshareupdate(repo, update, checkout=None): """Maybe perform a working directory update after a shared repo is created. diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -2786,6 +2786,7 @@ 'narrowfiles', 'sharedrepo', 'sharedrelative', + 'shareditems', } return {k: v for k, v in createopts.items() if k not in known} @@ -2806,6 +2807,8 @@ Boolean indicating if the path to the shared repo should be stored as relative. By default, the pointer to the "parent" repo is stored as an absolute path. + shareditems + Set of items to share to the new repository (in addition to storage). """ createopts = createopts or {} @@ -2867,6 +2870,10 @@ if 'sharedrepo' in createopts: hgvfs.write(b'sharedpath', sharedpath) + if createopts.get('shareditems'): + shared = b'\n'.join(sorted(createopts['shareditems'])) + b'\n' + hgvfs.write(b'shared', shared) + def poisonrepository(repo): """Poison a repository instance so it can no longer be used.""" # Perform any cleanup on the instance.