patch: better handling of sequence of offset patch hunks (issue1941)
The built-in patch implementation applied the hunks to the wrong lines of the
file if the file in the repo has been modified to skew the patch line numbers
and the file contains repetitive sequences of lines.
% create and rename on the same file in the same step
a => b
c => d
e => f
initializing destination source-hg repository
scanning source...
sorting...
converting...
1 Initial add: a, c, e
0 rename a into b, create a, rename c into d
o 1 "rename a into b, create a, rename c into d" files: a b c d e f
|
o 0 "Initial add: a, c, e" files: a c e
% manifest
a
b
d
f
% test --rev option
initializing destination source-1-hg repository
scanning source...
sorting...
converting...
0 Initial add: a, c, e
o 0 "Initial add: a, c, e" files: a c e
% test with filemap
initializing destination source-filemap-hg repository
scanning source...
sorting...
converting...
1 Initial add: a, c, e
0 rename a into b, create a, rename c into d
b
d
f
% convert from lightweight checkout
initializing destination source-light-hg repository
warning: lightweight checkouts may cause conversion failures, try with a regular branch instead.
scanning source...
sorting...
converting...
1 Initial add: a, c, e
0 rename a into b, create a, rename c into d
% lightweight manifest
a
b
d
f
% compare timestamps
good: hg timestamps match bzr timestamps
% merge
initializing destination source-hg repository
scanning source...
sorting...
converting...
3 Initial add
2 Editing a
1 Editing b
0 Merged improve branch
o 3 "Merged improve branch" files:
|\
| o 2 "Editing b" files: b
| |
o | 1 "Editing a" files: a
|/
o 0 "Initial add" files: a b
% symlinks and executable files
initializing destination source-hg repository
scanning source...
sorting...
converting...
1 Initial setup
0 Symlink changed, x bits changed
% manifest of 0
644 @ altname
644 d/a
755 * program
644 @ syma
% manifest of tip
644 @ altname
644 d/a
755 * newprog
644 program
644 @ syma
% test the symlinks can be recreated
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
a