# HG changeset patch # User Pierre-Yves David # Date 2021-06-08 23:10:34 # Node ID d1c1fd7ac46dbf46f8467486f55c13bc7ba097ad # Parent e33c6dd346e73609a38c52eb71cf5cf2e3ec4c19 clone: use "official" API to create local clone destination This make sure we have a properly created, fully functional repository early. This will be useful to simply the hardlink/copy phases of the local clone to make it share more of its logic with the similar "stream" cloning. This has a minor impact of the test and the resulting repository has is better initialized (eg: the `wcache` directory is pre-created.) Differential Revision: https://phab.mercurial-scm.org/D10850 diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -857,20 +857,17 @@ def clone( if copy: srcrepo.hook(b'preoutgoing', throw=True, source=b'clone') - hgdir = os.path.realpath(os.path.join(dest, b".hg")) - if not os.path.exists(dest): - util.makedirs(dest) - try: - destpath = hgdir - util.makedir(destpath, notindexed=True) - except OSError as inst: - if inst.errno == errno.EEXIST: - cleandir = None - raise error.Abort( - _(b"destination '%s' already exists") % dest - ) - raise + destrootpath = urlutil.urllocalpath(dest) + dest_reqs = localrepo.clone_requirements(ui, createopts, srcrepo) + localrepo.createrepository( + ui, + destrootpath, + requirements=dest_reqs, + ) + destrepo = localrepo.makelocalrepository(ui, destrootpath) + + destpath = destrepo.vfs.base destlock = copystore(ui, srcrepo, destpath) # copy bookmarks over srcbookmarks = srcrepo.vfs.join(b'bookmarks') diff --git a/tests/test-empty.t b/tests/test-empty.t --- a/tests/test-empty.t +++ b/tests/test-empty.t @@ -48,6 +48,7 @@ Poke at a clone: hgrc requires store + wcache Should be empty: diff --git a/tests/test-extension.t b/tests/test-extension.t --- a/tests/test-extension.t +++ b/tests/test-extension.t @@ -111,6 +111,7 @@ Test basic extension support reposetup called for a ui == repo.ui uipopulate called (1 times) + uipopulate called (1 times) reposetup called for b ui == repo.ui updating to branch default