revlog: improve delta generation heuristics for generaldelta
Without this change, pulls (and clones) into a generaldelta repository could
generate very inefficient revlogs, the size of which could be at least twice
the original size.
This was caused by the generated delta chains covering too large distances,
causing new chains to be built far too often. This change addresses the
problem by forcing a delta against second parent or against the previous
revision, when the first parent delta is in danger of creating a long chain.
$ hg init dir
$ cd dir
$ echo bleh > bar
$ hg add bar
$ hg ci -m 'add bar'
$ hg cp bar foo
$ echo >> bar
$ hg ci -m 'cp bar foo; change bar'
$ hg debugrename foo
foo renamed from bar:26d3ca0dfd18e44d796b564e38dd173c9668d3a9
$ hg debugindex bar
rev offset length base linkrev nodeid p1 p2
0 0 6 0 0 26d3ca0dfd18 000000000000 000000000000
1 6 7 1 1 d267bddd54f7 26d3ca0dfd18 000000000000