annotate tests/test-requires.t @ 12938:bf826c0b9537 stable

opener: check hardlink count reporting (issue1866) The Linux CIFS kernel driver (even in 2.6.36) suffers from a hardlink count blindness bug (lstat() returning 1 in st_nlink when it is expected to return >1), which causes repository corruption if Mercurial running on Linux pushes or commits to a hardlinked repository stored on a Windows share, if that share is mounted using the CIFS driver. This patch works around issue1866 and improves the workaround done in 50523b4407f6 to fix issue761, by teaching the opener to lazily execute a runtime check (new function checknlink) to see if the hardlink count reported by nlinks() can be trusted. Since nlinks() is also known to return varying count values (1 or >1) depending on whether the file is open or not and depending on what client and server software combination is being used for accessing and serving the Windows share, we deliberately open the file before calling nlinks() in order to have a stable precondition. Trying to depend on the precondition "file closed" would be fragile, as the file could have been opened very easily somewhere else in the program.
author Adrian Buehlmann <adrian@cadifra.com>
date Sun, 07 Nov 2010 18:21:29 +0100
parents 3b165c127690
children ffb5c09ba822
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12116
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
1 $ mkdir t
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
2 $ cd t
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
3 $ hg init
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
4 $ echo a > a
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
5 $ hg add a
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 12116
diff changeset
6 $ hg commit -m test
12116
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
7 $ rm .hg/requires
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
8 $ hg tip
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
9 abort: index 00changelog.i unknown format 2!
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
10 [255]
12116
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
11 $ echo indoor-pool > .hg/requires
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
12 $ hg tip
f51858009328 tests: unify test-requires
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 3851
diff changeset
13 abort: requirement 'indoor-pool' not supported!
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 12156
diff changeset
14 [255]