diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -213,8 +213,10 @@ def copystore(ui, srcrepo, destpath): dstvfs.mkdir(dstbase) if srcvfs.exists(f): if f.endswith('data'): + # 'dstbase' may be empty (e.g. revlog format 0) + lockfile = os.path.join(dstbase, "lock") # lock to avoid premature writing to the target - destlock = lock.lock(dstvfs, dstbase + "/lock") + destlock = lock.lock(dstvfs, lockfile) hardlink, n = util.copyfiles(srcvfs.join(f), dstvfs.join(f), hardlink) num += n diff --git a/tests/test-clone.t b/tests/test-clone.t --- a/tests/test-clone.t +++ b/tests/test-clone.t @@ -621,3 +621,17 @@ re-enable perm to allow deletion #endif $ cd .. + +Test clone from the repository in (emulated) revlog format 0 (issue4203): + + $ mkdir issue4203 + $ mkdir -p src/.hg + $ echo foo > src/foo + $ hg -R src add src/foo + $ hg -R src commit -m '#0' + $ hg -R src log -q + 0:e1bab28bca43 + $ hg clone -U -q src dst + $ hg -R dst log -q + 0:e1bab28bca43 + $ cd ..