convert: don't drop missing or corrupt tag entries
Cleaning up the tags file could be a useful feature in some cases, so maybe
there should be a switch for this. However, the default hg -> hg convert tries
to maintain identical hashes (thus convert.hg.saverev is off by default, but is
on by default for other source types). It looks like _rewritesubstate() has a
`continue` in it, and therefore a similar problem.
I ran into this conversion divergence when a coworker "merged" two repositories
by copy/pasting all of the files from the source repo and massaging the code,
and forgetting to revert the .hg* files. That silently emptied the .hgtags file
after the conversion. (This isn't the manifest node bug Yuya has been helping
with- this occurred well after the bzr -> hg conversion and wasn't a merge
commit, which made it extra puzzling. That bug is still an issue.)
#require no-pure
A script to generate nasty diff worst-case scenarios:
$ cat > s.py <<EOF
> import random
> for x in range(100000):
> print
> if random.randint(0, 100) >= 50:
> x += 1
> print(hex(x))
> EOF
$ hg init a
$ cd a
Check in a big file:
$ $PYTHON ../s.py > a
$ hg ci -qAm0
Modify it:
$ $PYTHON ../s.py > a
Time a check-in, should never take more than 10 seconds user time:
$ hg ci --time -m1
time: real .* secs .user [0-9][.].* sys .* (re)