annotate: port to generic templater enabled by hidden -T option
If the selected formatter is other than plainformatter, raw data are passed
to the formatter. In this case, it isn't necessary (and not possible) to
calculate column widths.
Field names are substituted to be the same as "log" command.
There are a few limitations:
- "binary file" message is not included in formatted output.
- no data structure for multiple files. all lines are packed to single list.
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 ..