test-hardlinks: add testcase for repo copied with 'cp -al'
authorAdrian Buehlmann <adrian@cadifra.com>
Wed, 17 Nov 2010 16:54:30 +0100
changeset 13019 42ac864ed394
parent 13018 96956105e92d
child 13022 3fd4e4e81382
test-hardlinks: add testcase for repo copied with 'cp -al' This patch adds a case to test-hardlinks.t which demonstrates that hardlinks in the working directory are broken up (using 'hg update'). Motivation for this patch: 'hg help clone' shows copying repositories *and* the working directory using 'cp -al', creating hardlinks in the *working directory* too (not just in the store). Note that we can't use 'cp -al' since for example MacOS X doesn't support these options on cp. I'm thus using the same trick as in test-hardlinks-safety.t for creating hardlinks in the working dir.
tests/test-hardlinks.t
--- a/tests/test-hardlinks.t	Thu Nov 18 23:15:13 2010 +0100
+++ b/tests/test-hardlinks.t	Wed Nov 17 16:54:30 2010 +0100
@@ -10,6 +10,19 @@
   >     find $1 -type f | python $TESTTMP/nlinks.py
   > }
 
+Some implementations of cp can't create hardlinks (replaces 'cp -al' on Linux):
+
+  $ cat > linkcp.py <<EOF
+  > from mercurial import util
+  > import sys
+  > util.copyfiles(sys.argv[1], sys.argv[2], hardlink=True)
+  > EOF
+
+  $ linkcp()
+  > {
+  >     python $TESTTMP/linkcp.py $1 $2
+  > }
+
 Prepare repo r1:
 
   $ mkdir r1
@@ -152,3 +165,68 @@
   1 r2/.hg/store/data/f1.i
   1 r2/.hg/store/fncache
 
+
+  $ cd r3
+  $ hg tip --template '{rev}:{node|short}\n'
+  11:a6451b6bc41f
+  $ echo bla > f1
+  $ hg ci -m1
+  $ cd ..
+
+Create hardlinked copy r4 of r3 (on Linux, we would call 'cp -al'):
+
+  $ linkcp r3 r4
+
+r4 has hardlinks in the working dir (not just inside .hg):
+
+  $ nlinksdir r4
+  2 r4/.hg/00changelog.i
+  2 r4/.hg/branch
+  2 r4/.hg/branchheads.cache
+  2 r4/.hg/dirstate
+  2 r4/.hg/hgrc
+  2 r4/.hg/last-message.txt
+  2 r4/.hg/requires
+  2 r4/.hg/store/00changelog.i
+  2 r4/.hg/store/00manifest.i
+  2 r4/.hg/store/data/d1/f2.d
+  2 r4/.hg/store/data/d1/f2.i
+  2 r4/.hg/store/data/f1.i
+  2 r4/.hg/store/fncache
+  2 r4/.hg/store/undo
+  2 r4/.hg/tags.cache
+  2 r4/.hg/undo.branch
+  2 r4/.hg/undo.desc
+  2 r4/.hg/undo.dirstate
+  2 r4/d1/data1
+  2 r4/d1/f2
+  2 r4/f1
+
+Update back to revision 11 in r4 should break hardlink of file f1:
+
+  $ hg -R r4 up 11
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+  $ nlinksdir r4
+  2 r4/.hg/00changelog.i
+  1 r4/.hg/branch
+  2 r4/.hg/branchheads.cache
+  1 r4/.hg/dirstate
+  2 r4/.hg/hgrc
+  2 r4/.hg/last-message.txt
+  2 r4/.hg/requires
+  2 r4/.hg/store/00changelog.i
+  2 r4/.hg/store/00manifest.i
+  2 r4/.hg/store/data/d1/f2.d
+  2 r4/.hg/store/data/d1/f2.i
+  2 r4/.hg/store/data/f1.i
+  2 r4/.hg/store/fncache
+  2 r4/.hg/store/undo
+  2 r4/.hg/tags.cache
+  2 r4/.hg/undo.branch
+  2 r4/.hg/undo.desc
+  2 r4/.hg/undo.dirstate
+  2 r4/d1/data1
+  2 r4/d1/f2
+  1 r4/f1
+