import-checker: check modules for pure Python build correctly
Before this patch, "import-checker.py" just replaces "/" in specified
filenames by ".". This makes modules for pure Python build belong to
"mercurial.pure" package, and prevents "import-checker.py" from
correctly checking about cyclic dependency in them.
This patch discards "pure" component from fully qualified name of such
modules.
To avoid discarding "pure" from the module name of standard libraries
unexpectedly, this patch allows "dotted_name_of_path" to discard
"pure" only from Mercurial specific modules, which are specified via
command line arguments.
Corrupt an hg repo with two pulls.
create one repo with a long history
$ hg init source1
$ cd source1
$ touch foo
$ hg add foo
$ for i in 1 2 3 4 5 6 7 8 9 10; do
> echo $i >> foo
> hg ci -m $i
> done
$ cd ..
create one repo with a shorter history
$ hg clone -r 0 source1 source2
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd source2
$ echo a >> foo
$ hg ci -m a
$ cd ..
create a third repo to pull both other repos into it
$ hg init corrupted
$ cd corrupted
use a hook to make the second pull start while the first one is still running
$ echo '[hooks]' >> .hg/hgrc
$ echo 'prechangegroup = sleep 5' >> .hg/hgrc
start a pull...
$ hg pull ../source1 > pull.out 2>&1 &
... and start another pull before the first one has finished
$ sleep 1
$ hg pull ../source2 2>/dev/null
pulling from ../source2
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
$ cat pull.out
pulling from ../source1
requesting all changes
adding changesets
adding manifests
adding file changes
added 10 changesets with 10 changes to 1 files
(run 'hg update' to get a working copy)
see the result
$ wait
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1 files, 11 changesets, 11 total revisions
$ cd ..