test-hardlinks: unify two test files into one
The "whitelisted" test could be unified using "#if"s.
--- a/tests/test-hardlinks-whitelisted.t Mon May 15 14:08:02 2017 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,391 +0,0 @@
-#require hardlink
-#require hardlink-whitelisted
-
-This test is similar to test-hardlinks.t, but will only run on some filesystems
-that we are sure to have known good hardlink supports (see issue4546 for an
-example where the filesystem claims hardlink support but is actually
-problematic).
-
- $ cat > nlinks.py <<EOF
- > import sys
- > from mercurial import util
- > for f in sorted(sys.stdin.readlines()):
- > f = f[:-1]
- > print util.nlinks(f), f
- > EOF
-
- $ nlinksdir()
- > {
- > 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:
-
- $ hg init r1
- $ cd r1
-
- $ echo c1 > f1
- $ hg add f1
- $ hg ci -m0
-
- $ mkdir d1
- $ cd d1
- $ echo c2 > f2
- $ hg add f2
- $ hg ci -m1
- $ cd ../..
-
- $ nlinksdir r1/.hg/store
- 1 r1/.hg/store/00changelog.i
- 1 r1/.hg/store/00manifest.i
- 1 r1/.hg/store/data/d1/f2.i
- 1 r1/.hg/store/data/f1.i
- 1 r1/.hg/store/fncache
- 1 r1/.hg/store/phaseroots
- 1 r1/.hg/store/undo
- 1 r1/.hg/store/undo.backup.fncache
- 1 r1/.hg/store/undo.backupfiles
- 1 r1/.hg/store/undo.phaseroots
-
-
-Create hardlinked clone r2:
-
- $ hg clone -U --debug r1 r2 --config progress.debug=true
- linking: 1
- linking: 2
- linking: 3
- linking: 4
- linking: 5
- linking: 6
- linking: 7
- linked 7 files
-
-Create non-hardlinked clone r3:
-
- $ hg clone --pull r1 r3
- requesting all changes
- adding changesets
- adding manifests
- adding file changes
- added 2 changesets with 2 changes to 2 files
- updating to branch default
- 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-
-
-Repos r1 and r2 should now contain hardlinked files:
-
- $ nlinksdir r1/.hg/store
- 2 r1/.hg/store/00changelog.i
- 2 r1/.hg/store/00manifest.i
- 2 r1/.hg/store/data/d1/f2.i
- 2 r1/.hg/store/data/f1.i
- 2 r1/.hg/store/fncache
- 1 r1/.hg/store/phaseroots
- 1 r1/.hg/store/undo
- 1 r1/.hg/store/undo.backup.fncache
- 1 r1/.hg/store/undo.backupfiles
- 1 r1/.hg/store/undo.phaseroots
-
- $ nlinksdir r2/.hg/store
- 2 r2/.hg/store/00changelog.i
- 2 r2/.hg/store/00manifest.i
- 2 r2/.hg/store/data/d1/f2.i
- 2 r2/.hg/store/data/f1.i
- 2 r2/.hg/store/fncache
-
-Repo r3 should not be hardlinked:
-
- $ nlinksdir r3/.hg/store
- 1 r3/.hg/store/00changelog.i
- 1 r3/.hg/store/00manifest.i
- 1 r3/.hg/store/data/d1/f2.i
- 1 r3/.hg/store/data/f1.i
- 1 r3/.hg/store/fncache
- 1 r3/.hg/store/phaseroots
- 1 r3/.hg/store/undo
- 1 r3/.hg/store/undo.backupfiles
- 1 r3/.hg/store/undo.phaseroots
-
-
-Create a non-inlined filelog in r3:
-
- $ cd r3/d1
- >>> f = open('data1', 'wb')
- >>> for x in range(10000):
- ... f.write("%s\n" % str(x))
- >>> f.close()
- $ for j in 0 1 2 3 4 5 6 7 8 9; do
- > cat data1 >> f2
- > hg commit -m$j
- > done
- $ cd ../..
-
- $ nlinksdir r3/.hg/store
- 1 r3/.hg/store/00changelog.i
- 1 r3/.hg/store/00manifest.i
- 1 r3/.hg/store/data/d1/f2.d
- 1 r3/.hg/store/data/d1/f2.i
- 1 r3/.hg/store/data/f1.i
- 1 r3/.hg/store/fncache
- 1 r3/.hg/store/phaseroots
- 1 r3/.hg/store/undo
- 1 r3/.hg/store/undo.backup.fncache
- 1 r3/.hg/store/undo.backup.phaseroots
- 1 r3/.hg/store/undo.backupfiles
- 1 r3/.hg/store/undo.phaseroots
-
-Push to repo r1 should break up most hardlinks in r2:
-
- $ hg -R r2 verify
- checking changesets
- checking manifests
- crosschecking files in changesets and manifests
- checking files
- 2 files, 2 changesets, 2 total revisions
-
- $ cd r3
- $ hg push
- pushing to $TESTTMP/r1 (glob)
- searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 10 changesets with 10 changes to 1 files
-
- $ cd ..
-
- $ nlinksdir r2/.hg/store
- 1 r2/.hg/store/00changelog.i
- 1 r2/.hg/store/00manifest.i
- 1 r2/.hg/store/data/d1/f2.i
- 2 r2/.hg/store/data/f1.i
- 2 r2/.hg/store/fncache
-
- $ hg -R r2 verify
- checking changesets
- checking manifests
- crosschecking files in changesets and manifests
- checking files
- 2 files, 2 changesets, 2 total revisions
-
-
- $ cd r1
- $ hg up
- 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-
-Committing a change to f1 in r1 must break up hardlink f1.i in r2:
-
- $ echo c1c1 >> f1
- $ hg ci -m00
- $ cd ..
-
- $ nlinksdir r2/.hg/store
- 1 r2/.hg/store/00changelog.i
- 1 r2/.hg/store/00manifest.i
- 1 r2/.hg/store/data/d1/f2.i
- 1 r2/.hg/store/data/f1.i
- 2 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
- 3 r4/.hg/cache/checklink (?)
- 2 r4/.hg/cache/branch2-base
- 2 r4/.hg/cache/branch2-served
- 2 r4/.hg/cache/checkisexec
- ? r4/.hg/cache/checklink-target (glob)
- 2 r4/.hg/cache/checknoexec
- 2 r4/.hg/cache/rbc-names-v1
- 2 r4/.hg/cache/rbc-revs-v1
- 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/phaseroots
- 2 r4/.hg/store/undo
- 2 r4/.hg/store/undo.backup.fncache
- 2 r4/.hg/store/undo.backup.phaseroots
- 2 r4/.hg/store/undo.backupfiles
- 2 r4/.hg/store/undo.phaseroots
- 4 r4/.hg/undo.backup.dirstate
- 2 r4/.hg/undo.bookmarks
- 2 r4/.hg/undo.branch
- 2 r4/.hg/undo.desc
- 4 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/cache/branch2-base
- 2 r4/.hg/cache/branch2-served
- 2 r4/.hg/cache/checkisexec
- 2 r4/.hg/cache/checklink-target
- 2 r4/.hg/cache/checknoexec
- 2 r4/.hg/cache/rbc-names-v1
- 2 r4/.hg/cache/rbc-revs-v1
- 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/phaseroots
- 2 r4/.hg/store/undo
- 2 r4/.hg/store/undo.backup.fncache
- 2 r4/.hg/store/undo.backup.phaseroots
- 2 r4/.hg/store/undo.backupfiles
- 2 r4/.hg/store/undo.phaseroots
- 4 r4/.hg/undo.backup.dirstate
- 2 r4/.hg/undo.bookmarks
- 2 r4/.hg/undo.branch
- 2 r4/.hg/undo.desc
- 4 r4/.hg/undo.dirstate
- 2 r4/d1/data1
- 2 r4/d1/f2
- 1 r4/f1
-
-
-Test hardlinking outside hg:
-
- $ mkdir x
- $ echo foo > x/a
-
- $ linkcp x y
- $ echo bar >> y/a
-
-No diff if hardlink:
-
- $ diff x/a y/a
-
-Test mq hardlinking:
-
- $ echo "[extensions]" >> $HGRCPATH
- $ echo "mq=" >> $HGRCPATH
-
- $ hg init a
- $ cd a
-
- $ hg qimport -n foo - << EOF
- > # HG changeset patch
- > # Date 1 0
- > diff -r 2588a8b53d66 a
- > --- /dev/null Thu Jan 01 00:00:00 1970 +0000
- > +++ b/a Wed Jul 23 15:54:29 2008 +0200
- > @@ -0,0 +1,1 @@
- > +a
- > EOF
- adding foo to series file
-
- $ hg qpush
- applying foo
- now at: foo
-
- $ cd ..
- $ linkcp a b
- $ cd b
-
- $ hg qimport -n bar - << EOF
- > # HG changeset patch
- > # Date 2 0
- > diff -r 2588a8b53d66 a
- > --- /dev/null Thu Jan 01 00:00:00 1970 +0000
- > +++ b/b Wed Jul 23 15:54:29 2008 +0200
- > @@ -0,0 +1,1 @@
- > +b
- > EOF
- adding bar to series file
-
- $ hg qpush
- applying bar
- now at: bar
-
- $ cat .hg/patches/status
- 430ed4828a74fa4047bc816a25500f7472ab4bfe:foo
- 4e7abb4840c46a910f6d7b4d3c3fc7e5209e684c:bar
-
- $ cat .hg/patches/series
- foo
- bar
-
- $ cat ../a/.hg/patches/status
- 430ed4828a74fa4047bc816a25500f7472ab4bfe:foo
-
- $ cat ../a/.hg/patches/series
- foo
-
-Test tags hardlinking:
-
- $ hg qdel -r qbase:qtip
- patch foo finalized without changeset message
- patch bar finalized without changeset message
-
- $ hg tag -l lfoo
- $ hg tag foo
-
- $ cd ..
- $ linkcp b c
- $ cd c
-
- $ hg tag -l -r 0 lbar
- $ hg tag -r 0 bar
-
- $ cat .hgtags
- 4e7abb4840c46a910f6d7b4d3c3fc7e5209e684c foo
- 430ed4828a74fa4047bc816a25500f7472ab4bfe bar
-
- $ cat .hg/localtags
- 4e7abb4840c46a910f6d7b4d3c3fc7e5209e684c lfoo
- 430ed4828a74fa4047bc816a25500f7472ab4bfe lbar
-
- $ cat ../b/.hgtags
- 4e7abb4840c46a910f6d7b4d3c3fc7e5209e684c foo
-
- $ cat ../b/.hg/localtags
- 4e7abb4840c46a910f6d7b4d3c3fc7e5209e684c lfoo
-
- $ cd ..
--- a/tests/test-hardlinks.t Mon May 15 14:08:02 2017 -0400
+++ b/tests/test-hardlinks.t Mon May 15 13:25:59 2017 -0700
@@ -10,7 +10,7 @@
$ nlinksdir()
> {
- > find $1 -type f | python $TESTTMP/nlinks.py
+ > find "$@" -type f | python $TESTTMP/nlinks.py
> }
Some implementations of cp can't create hardlinks (replaces 'cp -al' on Linux):
@@ -168,6 +168,11 @@
2 r2/.hg/store/data/f1.i
[12] r2/\.hg/store/fncache (re)
+#if hardlink-whitelisted
+ $ nlinksdir r2/.hg/store/fncache
+ 2 r2/.hg/store/fncache
+#endif
+
$ hg -R r2 verify
checking changesets
checking manifests
@@ -193,6 +198,10 @@
1 r2/.hg/store/data/f1.i
[12] r2/\.hg/store/fncache (re)
+#if hardlink-whitelisted
+ $ nlinksdir r2/.hg/store/fncache
+ 2 r2/.hg/store/fncache
+#endif
$ cd r3
$ hg tip --template '{rev}:{node|short}\n'
@@ -246,6 +255,12 @@
2 r4/d1/f2
2 r4/f1
+#if hardlink-whitelisted
+ $ nlinksdir r4/.hg/undo.backup.dirstate r4/.hg/undo.dirstate
+ 4 r4/.hg/undo.backup.dirstate
+ 4 r4/.hg/undo.dirstate
+#endif
+
Update back to revision 11 in r4 should break hardlink of file f1:
$ hg -R r4 up 11
@@ -289,6 +304,11 @@
2 r4/d1/f2
1 r4/f1
+#if hardlink-whitelisted
+ $ nlinksdir r4/.hg/undo.backup.dirstate r4/.hg/undo.dirstate
+ 4 r4/.hg/undo.backup.dirstate
+ 4 r4/.hg/undo.dirstate
+#endif
Test hardlinking outside hg: