hg: use "os.path.join()" to join path components which may be empty (issue4203) stable
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Tue, 25 Mar 2014 19:34:17 +0900
branchstable
changeset 20825 dda11e799529
parent 20824 c57c9cece645
child 20826 dd2e25e49862
hg: use "os.path.join()" to join path components which may be empty (issue4203) Changset 2d0ab571b822 rewriting "hg.copystore()" with vfs uses 'dstbase + "/lock"' instead of "os.path.join()", because target files given from "store.copyfiles()" already uses "/" as path separator But in the repository using revlog format 0, "dstbase" becomes empty ("data" directory is located under ".hg" directly), and 'dstbase + "/lock"' is treated as "/lock": in almost all cases, write access to "/lock" causes "permission denied". This patch uses "os.path.join()" to join path components which may be empty in "hg.copystore()".
mercurial/hg.py
tests/test-clone.t
--- a/mercurial/hg.py	Mon Mar 24 21:27:40 2014 -0400
+++ b/mercurial/hg.py	Tue Mar 25 19:34:17 2014 +0900
@@ -213,8 +213,10 @@
                 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
--- a/tests/test-clone.t	Mon Mar 24 21:27:40 2014 -0400
+++ b/tests/test-clone.t	Tue Mar 25 19:34:17 2014 +0900
@@ -621,3 +621,17 @@
 #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 ..