mirror of
https://github.com/vim/vim
synced 2025-07-16 01:01:58 +00:00
patch 9.1.1009: diff feature can be improved
Problem: diff feature can be improved Solution: include the linematch diff alignment algorithm (Jonathon) closes: #9661 Signed-off-by: Jonathon <jonathonwhite@protonmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
faf250c9e4
commit
7c7a4e6d1a
2
Filelist
2
Filelist
@ -52,6 +52,7 @@ SRC_ALL = \
|
|||||||
src/debugger.c \
|
src/debugger.c \
|
||||||
src/dict.c \
|
src/dict.c \
|
||||||
src/diff.c \
|
src/diff.c \
|
||||||
|
src/linematch.c \
|
||||||
src/digraph.c \
|
src/digraph.c \
|
||||||
src/drawline.c \
|
src/drawline.c \
|
||||||
src/drawscreen.c \
|
src/drawscreen.c \
|
||||||
@ -286,6 +287,7 @@ SRC_ALL = \
|
|||||||
src/proto/insexpand.pro \
|
src/proto/insexpand.pro \
|
||||||
src/proto/job.pro \
|
src/proto/job.pro \
|
||||||
src/proto/json.pro \
|
src/proto/json.pro \
|
||||||
|
src/proto/linematch.pro \
|
||||||
src/proto/list.pro \
|
src/proto/list.pro \
|
||||||
src/proto/locale.pro \
|
src/proto/locale.pro \
|
||||||
src/proto/logfile.pro \
|
src/proto/logfile.pro \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
*options.txt* For Vim version 9.1. Last change: 2025 Jan 10
|
*options.txt* For Vim version 9.1. Last change: 2025 Jan 12
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -2880,11 +2880,20 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
Option settings for diff mode. It can consist of the following items.
|
Option settings for diff mode. It can consist of the following items.
|
||||||
All are optional. Items must be separated by a comma.
|
All are optional. Items must be separated by a comma.
|
||||||
|
|
||||||
filler Show filler lines, to keep the text
|
algorithm:{text} Use the specified diff algorithm with the
|
||||||
synchronized with a window that has inserted
|
internal diff engine. Currently supported
|
||||||
lines at the same position. Mostly useful
|
algorithms are:
|
||||||
when windows are side-by-side and 'scrollbind'
|
myers the default algorithm
|
||||||
is set.
|
minimal spend extra time to generate the
|
||||||
|
smallest possible diff
|
||||||
|
patience patience diff algorithm
|
||||||
|
histogram histogram diff algorithm
|
||||||
|
|
||||||
|
closeoff When a window is closed where 'diff' is set
|
||||||
|
and there is only one window remaining in the
|
||||||
|
same tab page with 'diff' set, execute
|
||||||
|
`:diffoff` in that window. This undoes a
|
||||||
|
`:diffsplit` command.
|
||||||
|
|
||||||
context:{n} Use a context of {n} lines between a change
|
context:{n} Use a context of {n} lines between a change
|
||||||
and a fold that contains unchanged lines.
|
and a fold that contains unchanged lines.
|
||||||
@ -2895,6 +2904,23 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
value (999999) to disable folding completely.
|
value (999999) to disable folding completely.
|
||||||
See |fold-diff|.
|
See |fold-diff|.
|
||||||
|
|
||||||
|
filler Show filler lines, to keep the text
|
||||||
|
synchronized with a window that has inserted
|
||||||
|
lines at the same position. Mostly useful
|
||||||
|
when windows are side-by-side and 'scrollbind'
|
||||||
|
is set.
|
||||||
|
|
||||||
|
foldcolumn:{n} Set the 'foldcolumn' option to {n} when
|
||||||
|
starting diff mode. Without this 2 is used.
|
||||||
|
|
||||||
|
followwrap Follow the 'wrap' option and leave as it is.
|
||||||
|
|
||||||
|
horizontal Start diff mode with horizontal splits (unless
|
||||||
|
explicitly specified otherwise).
|
||||||
|
|
||||||
|
hiddenoff Do not use diff mode for a buffer when it
|
||||||
|
becomes hidden.
|
||||||
|
|
||||||
iblank Ignore changes where lines are all blank. Adds
|
iblank Ignore changes where lines are all blank. Adds
|
||||||
the "-B" flag to the "diff" command if
|
the "-B" flag to the "diff" command if
|
||||||
'diffexpr' is empty. Check the documentation
|
'diffexpr' is empty. Check the documentation
|
||||||
@ -2908,6 +2934,17 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
are considered the same. Adds the "-i" flag
|
are considered the same. Adds the "-i" flag
|
||||||
to the "diff" command if 'diffexpr' is empty.
|
to the "diff" command if 'diffexpr' is empty.
|
||||||
|
|
||||||
|
indent-heuristic
|
||||||
|
Use the indent heuristic for the internal
|
||||||
|
diff library.
|
||||||
|
|
||||||
|
internal Use the internal diff library. This is
|
||||||
|
ignored when 'diffexpr' is set. *E960*
|
||||||
|
When running out of memory when writing a
|
||||||
|
buffer this item will be ignored for diffs
|
||||||
|
involving that buffer. Set the 'verbose'
|
||||||
|
option to see when this happens.
|
||||||
|
|
||||||
iwhite Ignore changes in amount of white space. Adds
|
iwhite Ignore changes in amount of white space. Adds
|
||||||
the "-b" flag to the "diff" command if
|
the "-b" flag to the "diff" command if
|
||||||
'diffexpr' is empty. Check the documentation
|
'diffexpr' is empty. Check the documentation
|
||||||
@ -2927,46 +2964,19 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
of the "diff" command for what this does
|
of the "diff" command for what this does
|
||||||
exactly.
|
exactly.
|
||||||
|
|
||||||
horizontal Start diff mode with horizontal splits (unless
|
linematch:{n} Align and mark changes between the most
|
||||||
explicitly specified otherwise).
|
similar lines between the buffers. When the
|
||||||
|
total number of lines in the diff hunk exceeds
|
||||||
|
{n}, the lines will not be aligned because for
|
||||||
|
very large diff hunks there will be a
|
||||||
|
noticeable lag. A reasonable setting is
|
||||||
|
"linematch:60", as this will enable alignment
|
||||||
|
for a 2 buffer diff hunk of 30 lines each,
|
||||||
|
or a 3 buffer diff hunk of 20 lines each.
|
||||||
|
|
||||||
vertical Start diff mode with vertical splits (unless
|
vertical Start diff mode with vertical splits (unless
|
||||||
explicitly specified otherwise).
|
explicitly specified otherwise).
|
||||||
|
|
||||||
closeoff When a window is closed where 'diff' is set
|
|
||||||
and there is only one window remaining in the
|
|
||||||
same tab page with 'diff' set, execute
|
|
||||||
`:diffoff` in that window. This undoes a
|
|
||||||
`:diffsplit` command.
|
|
||||||
|
|
||||||
hiddenoff Do not use diff mode for a buffer when it
|
|
||||||
becomes hidden.
|
|
||||||
|
|
||||||
foldcolumn:{n} Set the 'foldcolumn' option to {n} when
|
|
||||||
starting diff mode. Without this 2 is used.
|
|
||||||
|
|
||||||
followwrap Follow the 'wrap' option and leave as it is.
|
|
||||||
|
|
||||||
internal Use the internal diff library. This is
|
|
||||||
ignored when 'diffexpr' is set. *E960*
|
|
||||||
When running out of memory when writing a
|
|
||||||
buffer this item will be ignored for diffs
|
|
||||||
involving that buffer. Set the 'verbose'
|
|
||||||
option to see when this happens.
|
|
||||||
|
|
||||||
indent-heuristic
|
|
||||||
Use the indent heuristic for the internal
|
|
||||||
diff library.
|
|
||||||
|
|
||||||
algorithm:{text} Use the specified diff algorithm with the
|
|
||||||
internal diff engine. Currently supported
|
|
||||||
algorithms are:
|
|
||||||
myers the default algorithm
|
|
||||||
minimal spend extra time to generate the
|
|
||||||
smallest possible diff
|
|
||||||
patience patience diff algorithm
|
|
||||||
histogram histogram diff algorithm
|
|
||||||
|
|
||||||
Examples: >
|
Examples: >
|
||||||
:set diffopt=internal,filler,context:4
|
:set diffopt=internal,filler,context:4
|
||||||
:set diffopt=
|
:set diffopt=
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
*version9.txt* For Vim version 9.1. Last change: 2025 Jan 02
|
*version9.txt* For Vim version 9.1. Last change: 2025 Jan 12
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -41625,6 +41625,9 @@ Changed~
|
|||||||
the "matches" key
|
the "matches" key
|
||||||
- |v:stacktrace| The stack trace of the exception most recently caught and
|
- |v:stacktrace| The stack trace of the exception most recently caught and
|
||||||
not finished
|
not finished
|
||||||
|
- include the linematch algorithm for the 'diffopt' setting. This aligns
|
||||||
|
changes between buffers on similar lines improving the diff highlighting in
|
||||||
|
Vim
|
||||||
|
|
||||||
*added-9.2*
|
*added-9.2*
|
||||||
Added ~
|
Added ~
|
||||||
|
@ -123,6 +123,7 @@ SRC += \
|
|||||||
indent.c \
|
indent.c \
|
||||||
insexpand.c \
|
insexpand.c \
|
||||||
json.c \
|
json.c \
|
||||||
|
linematch.c\
|
||||||
list.c \
|
list.c \
|
||||||
locale.c \
|
locale.c \
|
||||||
logfile.c \
|
logfile.c \
|
||||||
|
@ -817,6 +817,7 @@ OBJ = \
|
|||||||
$(OUTDIR)/indent.o \
|
$(OUTDIR)/indent.o \
|
||||||
$(OUTDIR)/insexpand.o \
|
$(OUTDIR)/insexpand.o \
|
||||||
$(OUTDIR)/json.o \
|
$(OUTDIR)/json.o \
|
||||||
|
$(OUTDIR)/linematch.o \
|
||||||
$(OUTDIR)/list.o \
|
$(OUTDIR)/list.o \
|
||||||
$(OUTDIR)/locale.o \
|
$(OUTDIR)/locale.o \
|
||||||
$(OUTDIR)/logfile.o \
|
$(OUTDIR)/logfile.o \
|
||||||
|
@ -738,6 +738,7 @@ OBJ = \
|
|||||||
$(OUTDIR)\indent.obj \
|
$(OUTDIR)\indent.obj \
|
||||||
$(OUTDIR)\insexpand.obj \
|
$(OUTDIR)\insexpand.obj \
|
||||||
$(OUTDIR)\json.obj \
|
$(OUTDIR)\json.obj \
|
||||||
|
$(OUTDIR)\linematch.obj \
|
||||||
$(OUTDIR)\list.obj \
|
$(OUTDIR)\list.obj \
|
||||||
$(OUTDIR)\locale.obj \
|
$(OUTDIR)\locale.obj \
|
||||||
$(OUTDIR)\logfile.obj \
|
$(OUTDIR)\logfile.obj \
|
||||||
@ -1675,6 +1676,8 @@ $(OUTDIR)/job.obj: $(OUTDIR) job.c $(INCL)
|
|||||||
|
|
||||||
$(OUTDIR)/json.obj: $(OUTDIR) json.c $(INCL)
|
$(OUTDIR)/json.obj: $(OUTDIR) json.c $(INCL)
|
||||||
|
|
||||||
|
$(OUTDIR)/linematch.obj: $(OUTDIR) linematch.c $(INCL)
|
||||||
|
|
||||||
$(OUTDIR)/list.obj: $(OUTDIR) list.c $(INCL)
|
$(OUTDIR)/list.obj: $(OUTDIR) list.c $(INCL)
|
||||||
|
|
||||||
$(OUTDIR)/locale.obj: $(OUTDIR) locale.c $(INCL)
|
$(OUTDIR)/locale.obj: $(OUTDIR) locale.c $(INCL)
|
||||||
@ -1954,6 +1957,7 @@ proto.h: \
|
|||||||
proto/indent.pro \
|
proto/indent.pro \
|
||||||
proto/insexpand.pro \
|
proto/insexpand.pro \
|
||||||
proto/json.pro \
|
proto/json.pro \
|
||||||
|
proto/linematch.pro \
|
||||||
proto/list.pro \
|
proto/list.pro \
|
||||||
proto/locale.pro \
|
proto/locale.pro \
|
||||||
proto/logfile.pro \
|
proto/logfile.pro \
|
||||||
|
@ -381,6 +381,7 @@ SRC = \
|
|||||||
insexpand.c \
|
insexpand.c \
|
||||||
job.c \
|
job.c \
|
||||||
json.c \
|
json.c \
|
||||||
|
linematch.c \
|
||||||
list.c \
|
list.c \
|
||||||
locale.c \
|
locale.c \
|
||||||
logfile.c \
|
logfile.c \
|
||||||
@ -514,6 +515,7 @@ OBJ = \
|
|||||||
insexpand.obj \
|
insexpand.obj \
|
||||||
job.obj \
|
job.obj \
|
||||||
json.obj \
|
json.obj \
|
||||||
|
linematch.obj \
|
||||||
list.obj \
|
list.obj \
|
||||||
locale.obj \
|
locale.obj \
|
||||||
logfile.obj \
|
logfile.obj \
|
||||||
@ -986,6 +988,9 @@ job.obj : job.c vim.h [.auto]config.h feature.h os_unix.h
|
|||||||
json.obj : json.c vim.h [.auto]config.h feature.h os_unix.h \
|
json.obj : json.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h gui.h beval.h \
|
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h gui.h beval.h \
|
||||||
[.proto]gui_beval.pro option.h ex_cmds.h proto.h errors.h globals.h
|
[.proto]gui_beval.pro option.h ex_cmds.h proto.h errors.h globals.h
|
||||||
|
linematch.obj : linematch.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||||
|
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h gui.h beval.h \
|
||||||
|
[.proto]gui_beval.pro option.h ex_cmds.h proto.h errors.h globals.h
|
||||||
list.obj : list.c vim.h [.auto]config.h feature.h os_unix.h \
|
list.obj : list.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||||
ascii.h keymap.h termdefs.h macros.h option.h structs.h regexp.h gui.h \
|
ascii.h keymap.h termdefs.h macros.h option.h structs.h regexp.h gui.h \
|
||||||
beval.h [.proto]gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
|
beval.h [.proto]gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
|
||||||
|
11
src/Makefile
11
src/Makefile
@ -1531,6 +1531,7 @@ BASIC_SRC = \
|
|||||||
indent.c \
|
indent.c \
|
||||||
insexpand.c \
|
insexpand.c \
|
||||||
json.c \
|
json.c \
|
||||||
|
linematch.c \
|
||||||
list.c \
|
list.c \
|
||||||
locale.c \
|
locale.c \
|
||||||
logfile.c \
|
logfile.c \
|
||||||
@ -1693,6 +1694,7 @@ OBJ_COMMON = \
|
|||||||
objects/if_xcmdsrv.o \
|
objects/if_xcmdsrv.o \
|
||||||
objects/indent.o \
|
objects/indent.o \
|
||||||
objects/insexpand.o \
|
objects/insexpand.o \
|
||||||
|
objects/linematch.o \
|
||||||
objects/list.o \
|
objects/list.o \
|
||||||
objects/locale.o \
|
objects/locale.o \
|
||||||
objects/logfile.o \
|
objects/logfile.o \
|
||||||
@ -1842,6 +1844,7 @@ PRO_AUTO = \
|
|||||||
debugger.pro \
|
debugger.pro \
|
||||||
dict.pro \
|
dict.pro \
|
||||||
diff.pro \
|
diff.pro \
|
||||||
|
linematch.pro \
|
||||||
digraph.pro \
|
digraph.pro \
|
||||||
drawline.pro \
|
drawline.pro \
|
||||||
drawscreen.pro \
|
drawscreen.pro \
|
||||||
@ -3343,6 +3346,9 @@ objects/json_test.o: json_test.c
|
|||||||
objects/kword_test.o: kword_test.c
|
objects/kword_test.o: kword_test.c
|
||||||
$(CCC) -o $@ kword_test.c
|
$(CCC) -o $@ kword_test.c
|
||||||
|
|
||||||
|
objects/linematch.o: linematch.c
|
||||||
|
$(CCC) -o $@ linematch.c
|
||||||
|
|
||||||
objects/list.o: list.c
|
objects/list.o: list.c
|
||||||
$(CCC) -o $@ list.c
|
$(CCC) -o $@ list.c
|
||||||
|
|
||||||
@ -3944,6 +3950,11 @@ objects/json.o: json.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
|||||||
proto/gui_beval.pro structs.h regexp.h gui.h libvterm/include/vterm.h \
|
proto/gui_beval.pro structs.h regexp.h gui.h libvterm/include/vterm.h \
|
||||||
libvterm/include/vterm_keycodes.h alloc.h ex_cmds.h spell.h proto.h \
|
libvterm/include/vterm_keycodes.h alloc.h ex_cmds.h spell.h proto.h \
|
||||||
globals.h errors.h
|
globals.h errors.h
|
||||||
|
objects/linematch.o: linematch.c vim.h protodef.h auto/config.h feature.h \
|
||||||
|
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h \
|
||||||
|
beval.h proto/gui_beval.pro structs.h regexp.h gui.h \
|
||||||
|
libvterm/include/vterm.h libvterm/include/vterm_keycodes.h xdiff/xdiff.h \
|
||||||
|
xdiff/../vim.h alloc.h ex_cmds.h spell.h proto.h globals.h errors.h
|
||||||
objects/list.o: list.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
objects/list.o: list.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||||
auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
|
auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
|
||||||
proto/gui_beval.pro structs.h regexp.h gui.h libvterm/include/vterm.h \
|
proto/gui_beval.pro structs.h regexp.h gui.h libvterm/include/vterm.h \
|
||||||
|
533
src/diff.c
533
src/diff.c
@ -37,6 +37,7 @@ static int diff_need_update = FALSE; // ex_diffupdate needs to be called
|
|||||||
#define DIFF_INTERNAL 0x200 // use internal xdiff algorithm
|
#define DIFF_INTERNAL 0x200 // use internal xdiff algorithm
|
||||||
#define DIFF_CLOSE_OFF 0x400 // diffoff when closing window
|
#define DIFF_CLOSE_OFF 0x400 // diffoff when closing window
|
||||||
#define DIFF_FOLLOWWRAP 0x800 // follow the wrap option
|
#define DIFF_FOLLOWWRAP 0x800 // follow the wrap option
|
||||||
|
#define DIFF_LINEMATCH 0x1000 // match most similar lines within diff
|
||||||
#define ALL_WHITE_DIFF (DIFF_IWHITE | DIFF_IWHITEALL | DIFF_IWHITEEOL)
|
#define ALL_WHITE_DIFF (DIFF_IWHITE | DIFF_IWHITEALL | DIFF_IWHITEEOL)
|
||||||
static int diff_flags = DIFF_INTERNAL | DIFF_FILLER | DIFF_CLOSE_OFF;
|
static int diff_flags = DIFF_INTERNAL | DIFF_FILLER | DIFF_CLOSE_OFF;
|
||||||
|
|
||||||
@ -398,7 +399,8 @@ diff_mark_adjust_tp(
|
|||||||
{
|
{
|
||||||
// 6. change below line2: only adjust for amount_after; also when
|
// 6. change below line2: only adjust for amount_after; also when
|
||||||
// "deleted" became zero when deleted all lines between two diffs
|
// "deleted" became zero when deleted all lines between two diffs
|
||||||
if (dp->df_lnum[idx] - (deleted + inserted != 0) > line2)
|
if (dp->df_lnum[idx] - (deleted + inserted != 0) > line2 -
|
||||||
|
(dp->is_linematched ? 1 : 0))
|
||||||
{
|
{
|
||||||
if (amount_after == 0)
|
if (amount_after == 0)
|
||||||
break; // nothing left to change
|
break; // nothing left to change
|
||||||
@ -501,8 +503,9 @@ diff_mark_adjust_tp(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check if this block touches the previous one, may merge them.
|
// check if this block touches the previous one, may merge them.
|
||||||
if (dprev != NULL && dprev->df_lnum[idx] + dprev->df_count[idx]
|
if (dprev != NULL && !dp->is_linematched
|
||||||
== dp->df_lnum[idx])
|
&& dprev->df_lnum[idx] + dprev->df_count[idx]
|
||||||
|
== dp->df_lnum[idx])
|
||||||
{
|
{
|
||||||
for (i = 0; i < DB_COUNT; ++i)
|
for (i = 0; i < DB_COUNT; ++i)
|
||||||
if (tp->tp_diffbuf[i] != NULL)
|
if (tp->tp_diffbuf[i] != NULL)
|
||||||
@ -570,6 +573,7 @@ diff_alloc_new(tabpage_T *tp, diff_T *dprev, diff_T *dp)
|
|||||||
if (dnew == NULL)
|
if (dnew == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
dnew->is_linematched = FALSE;
|
||||||
dnew->df_next = dp;
|
dnew->df_next = dp;
|
||||||
if (dprev == NULL)
|
if (dprev == NULL)
|
||||||
tp->tp_first_diff = dnew;
|
tp->tp_first_diff = dnew;
|
||||||
@ -753,13 +757,16 @@ clear_diffout(diffout_T *dout)
|
|||||||
* Return FAIL for failure.
|
* Return FAIL for failure.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
diff_write_buffer(buf_T *buf, diffin_T *din)
|
diff_write_buffer(buf_T *buf, diffin_T *din, linenr_T start, linenr_T end)
|
||||||
{
|
{
|
||||||
linenr_T lnum;
|
linenr_T lnum;
|
||||||
char_u *s;
|
char_u *s;
|
||||||
long len = 0;
|
long len = 0;
|
||||||
char_u *ptr;
|
char_u *ptr;
|
||||||
|
|
||||||
|
if (end < 0)
|
||||||
|
end = buf->b_ml.ml_line_count;
|
||||||
|
|
||||||
if (buf->b_ml.ml_flags & ML_EMPTY)
|
if (buf->b_ml.ml_flags & ML_EMPTY)
|
||||||
{
|
{
|
||||||
din->din_mmfile.ptr = NULL;
|
din->din_mmfile.ptr = NULL;
|
||||||
@ -768,7 +775,7 @@ diff_write_buffer(buf_T *buf, diffin_T *din)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// xdiff requires one big block of memory with all the text.
|
// xdiff requires one big block of memory with all the text.
|
||||||
for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
|
for (lnum = start; lnum <= end; ++lnum)
|
||||||
len += ml_get_buf_len(buf, lnum) + 1;
|
len += ml_get_buf_len(buf, lnum) + 1;
|
||||||
ptr = alloc(len);
|
ptr = alloc(len);
|
||||||
if (ptr == NULL)
|
if (ptr == NULL)
|
||||||
@ -790,7 +797,7 @@ diff_write_buffer(buf_T *buf, diffin_T *din)
|
|||||||
din->din_mmfile.size = len;
|
din->din_mmfile.size = len;
|
||||||
|
|
||||||
len = 0;
|
len = 0;
|
||||||
for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
|
for (lnum = start; lnum <= end; ++lnum)
|
||||||
{
|
{
|
||||||
for (s = ml_get_buf(buf, lnum, FALSE); *s != NUL; )
|
for (s = ml_get_buf(buf, lnum, FALSE); *s != NUL; )
|
||||||
{
|
{
|
||||||
@ -841,7 +848,7 @@ diff_write(buf_T *buf, diffin_T *din)
|
|||||||
int save_cmod_flags;
|
int save_cmod_flags;
|
||||||
|
|
||||||
if (din->din_fname == NULL)
|
if (din->din_fname == NULL)
|
||||||
return diff_write_buffer(buf, din);
|
return diff_write_buffer(buf, din, 1, -1);
|
||||||
|
|
||||||
// Always use 'fileformat' set to "unix".
|
// Always use 'fileformat' set to "unix".
|
||||||
save_ff = buf->b_p_ff;
|
save_ff = buf->b_p_ff;
|
||||||
@ -1922,6 +1929,360 @@ diff_clear(tabpage_T *tp)
|
|||||||
tp->tp_first_diff = NULL;
|
tp->tp_first_diff = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* return true if the options are set to use diff linematch
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
diff_linematch(diff_T *dp)
|
||||||
|
{
|
||||||
|
if (!(diff_flags & DIFF_LINEMATCH))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// are there more than three diff buffers?
|
||||||
|
int tsize = 0;
|
||||||
|
for (int i = 0; i < DB_COUNT; i++)
|
||||||
|
{
|
||||||
|
if (curtab->tp_diffbuf[i] != NULL)
|
||||||
|
{
|
||||||
|
// for the rare case (bug?) that the count of a diff block is
|
||||||
|
// negative, do not run the algorithm because this will try to
|
||||||
|
// allocate a negative amount of space and crash
|
||||||
|
if (dp->df_count[i] < 0)
|
||||||
|
return FALSE;
|
||||||
|
tsize += dp->df_count[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// avoid allocating a huge array because it will lag
|
||||||
|
return tsize <= linematch_lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
get_max_diff_length(const diff_T *dp)
|
||||||
|
{
|
||||||
|
int maxlength = 0;
|
||||||
|
|
||||||
|
for (int k = 0; k < DB_COUNT; k++)
|
||||||
|
{
|
||||||
|
if (curtab->tp_diffbuf[k] != NULL)
|
||||||
|
{
|
||||||
|
if (dp->df_count[k] > maxlength)
|
||||||
|
maxlength = dp->df_count[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxlength;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
find_top_diff_block(
|
||||||
|
diff_T **thistopdiff,
|
||||||
|
diff_T **nextblockblock,
|
||||||
|
int fromidx,
|
||||||
|
int topline)
|
||||||
|
{
|
||||||
|
diff_T *topdiff = NULL;
|
||||||
|
diff_T *localtopdiff = NULL;
|
||||||
|
int topdiffchange = 0;
|
||||||
|
|
||||||
|
for (topdiff = curtab->tp_first_diff; topdiff != NULL;
|
||||||
|
topdiff = topdiff->df_next)
|
||||||
|
{
|
||||||
|
// set the top of the current overlapping diff block set as we
|
||||||
|
// iterate through all of the sets of overlapping diff blocks
|
||||||
|
if (!localtopdiff || topdiffchange)
|
||||||
|
{
|
||||||
|
localtopdiff = topdiff;
|
||||||
|
topdiffchange = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if the fromwin topline is matched by the current diff. if so,
|
||||||
|
// set it to the top of the diff block
|
||||||
|
if (topline >= topdiff->df_lnum[fromidx] && topline <=
|
||||||
|
(topdiff->df_lnum[fromidx] + topdiff->df_count[fromidx]))
|
||||||
|
{
|
||||||
|
// this line is inside the current diff block, so we will save the
|
||||||
|
// top block of the set of blocks to refer to later
|
||||||
|
if ((*thistopdiff) == NULL)
|
||||||
|
(*thistopdiff) = localtopdiff;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if the next set of overlapping diff blocks is next
|
||||||
|
if (!(topdiff->df_next && (topdiff->df_next->df_lnum[fromidx] ==
|
||||||
|
(topdiff->df_lnum[fromidx] +
|
||||||
|
topdiff->df_count[fromidx]))))
|
||||||
|
{
|
||||||
|
// mark that the next diff block is belongs to a different set of
|
||||||
|
// overlapping diff blocks
|
||||||
|
topdiffchange = 1;
|
||||||
|
|
||||||
|
// if we already have found that the line number is inside a diff
|
||||||
|
// block, set the marker of the next block and finish the iteration
|
||||||
|
if (*thistopdiff)
|
||||||
|
{
|
||||||
|
(*nextblockblock) = topdiff->df_next;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
count_filler_lines_and_topline(
|
||||||
|
int *curlinenum_to,
|
||||||
|
int *linesfiller,
|
||||||
|
const diff_T *thistopdiff,
|
||||||
|
const int toidx,
|
||||||
|
int virtual_lines_passed)
|
||||||
|
{
|
||||||
|
const diff_T *curdif = thistopdiff;
|
||||||
|
int ch_virtual_lines = 0;
|
||||||
|
int isfiller = FALSE;
|
||||||
|
|
||||||
|
while (virtual_lines_passed > 0)
|
||||||
|
{
|
||||||
|
if (ch_virtual_lines)
|
||||||
|
{
|
||||||
|
virtual_lines_passed--;
|
||||||
|
ch_virtual_lines--;
|
||||||
|
if (!isfiller)
|
||||||
|
(*curlinenum_to)++;
|
||||||
|
else
|
||||||
|
(*linesfiller)++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*linesfiller) = 0;
|
||||||
|
ch_virtual_lines = get_max_diff_length(curdif);
|
||||||
|
isfiller = (curdif->df_count[toidx] ? FALSE : TRUE);
|
||||||
|
if (isfiller)
|
||||||
|
{
|
||||||
|
while (curdif && curdif->df_next &&
|
||||||
|
curdif->df_lnum[toidx] ==
|
||||||
|
curdif->df_next->df_lnum[toidx] &&
|
||||||
|
curdif->df_next->df_count[toidx] == 0)
|
||||||
|
{
|
||||||
|
curdif = curdif->df_next;
|
||||||
|
ch_virtual_lines += get_max_diff_length(curdif);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (curdif)
|
||||||
|
curdif = curdif->df_next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
calculate_topfill_and_topline(
|
||||||
|
const int fromidx,
|
||||||
|
const int toidx,
|
||||||
|
const int from_topline,
|
||||||
|
const int from_topfill,
|
||||||
|
int *topfill,
|
||||||
|
linenr_T *topline)
|
||||||
|
{
|
||||||
|
// 1. find the position from the top of the diff block, and the start
|
||||||
|
// of the next diff block
|
||||||
|
diff_T *thistopdiff = NULL;
|
||||||
|
diff_T *nextblockblock = NULL;
|
||||||
|
int virtual_lines_passed = 0;
|
||||||
|
|
||||||
|
find_top_diff_block(&thistopdiff, &nextblockblock, fromidx, from_topline);
|
||||||
|
|
||||||
|
// count the virtual lines that have been passed
|
||||||
|
diff_T *curdif = thistopdiff;
|
||||||
|
while (curdif && (curdif->df_lnum[fromidx] + curdif->df_count[fromidx])
|
||||||
|
<= from_topline)
|
||||||
|
{
|
||||||
|
virtual_lines_passed += get_max_diff_length(curdif);
|
||||||
|
|
||||||
|
curdif = curdif->df_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (curdif != nextblockblock)
|
||||||
|
virtual_lines_passed += from_topline - curdif->df_lnum[fromidx];
|
||||||
|
virtual_lines_passed -= from_topfill;
|
||||||
|
|
||||||
|
// count the same amount of virtual lines in the toidx buffer
|
||||||
|
int curlinenum_to = thistopdiff->df_lnum[toidx];
|
||||||
|
int linesfiller = 0;
|
||||||
|
|
||||||
|
count_filler_lines_and_topline(&curlinenum_to, &linesfiller, thistopdiff,
|
||||||
|
toidx, virtual_lines_passed);
|
||||||
|
|
||||||
|
// count the number of filler lines that would normally be above this line
|
||||||
|
int maxfiller = 0;
|
||||||
|
for (diff_T *dpfillertest = thistopdiff; dpfillertest != NULL;
|
||||||
|
dpfillertest = dpfillertest->df_next)
|
||||||
|
{
|
||||||
|
if (dpfillertest->df_lnum[toidx] == curlinenum_to)
|
||||||
|
{
|
||||||
|
while (dpfillertest && dpfillertest->df_lnum[toidx] ==
|
||||||
|
curlinenum_to)
|
||||||
|
{
|
||||||
|
maxfiller += dpfillertest->df_count[toidx] ? 0 :
|
||||||
|
get_max_diff_length(dpfillertest);
|
||||||
|
dpfillertest = dpfillertest->df_next;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(*topfill) = maxfiller - linesfiller;
|
||||||
|
(*topline) = curlinenum_to;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
linematched_filler_lines(diff_T *dp, int idx, linenr_T lnum, int *linestatus)
|
||||||
|
{
|
||||||
|
int filler_lines_d1 = 0;
|
||||||
|
|
||||||
|
while (dp && dp->df_next &&
|
||||||
|
lnum == (dp->df_lnum[idx] + dp->df_count[idx]) &&
|
||||||
|
dp->df_next->df_lnum[idx] == lnum)
|
||||||
|
{
|
||||||
|
if (dp->df_count[idx] == 0)
|
||||||
|
filler_lines_d1 += get_max_diff_length(dp);
|
||||||
|
dp = dp->df_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dp->df_count[idx] == 0)
|
||||||
|
filler_lines_d1 += get_max_diff_length(dp);
|
||||||
|
|
||||||
|
if (lnum < dp->df_lnum[idx] + dp->df_count[idx])
|
||||||
|
{
|
||||||
|
int j = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < DB_COUNT; i++)
|
||||||
|
{
|
||||||
|
if (curtab->tp_diffbuf[i] != NULL)
|
||||||
|
{
|
||||||
|
if (dp->df_count[i])
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
// is this an added line or a changed line?
|
||||||
|
if (linestatus)
|
||||||
|
(*linestatus) = (j == 1) ? -2 : -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return filler_lines_d1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply results from the linematch algorithm and apply to 'dp' by splitting it
|
||||||
|
// into multiple adjacent diff blocks.
|
||||||
|
static void
|
||||||
|
apply_linematch_results(
|
||||||
|
diff_T *dp,
|
||||||
|
size_t decisions_length,
|
||||||
|
const int *decisions)
|
||||||
|
{
|
||||||
|
// get the start line number here in each diff buffer, and then increment
|
||||||
|
int line_numbers[DB_COUNT];
|
||||||
|
int outputmap[DB_COUNT];
|
||||||
|
size_t ndiffs = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < DB_COUNT; i++)
|
||||||
|
{
|
||||||
|
if (curtab->tp_diffbuf[i] != NULL)
|
||||||
|
{
|
||||||
|
line_numbers[i] = dp->df_lnum[i];
|
||||||
|
dp->df_count[i] = 0;
|
||||||
|
|
||||||
|
// Keep track of the index of the diff buffer we are using here.
|
||||||
|
// We will use this to write the output of the algorithm to
|
||||||
|
// diff_T structs at the correct indexes
|
||||||
|
outputmap[ndiffs] = i;
|
||||||
|
ndiffs++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// write the diffs starting with the current diff block
|
||||||
|
diff_T *dp_s = dp;
|
||||||
|
for (size_t i = 0; i < decisions_length; i++)
|
||||||
|
{
|
||||||
|
// Don't allocate on first iter since we can reuse the initial
|
||||||
|
// diffblock
|
||||||
|
if (i != 0 && (decisions[i - 1] != decisions[i]))
|
||||||
|
{
|
||||||
|
// create new sub diff blocks to segment the original diff block
|
||||||
|
// which we further divided by running the linematch algorithm
|
||||||
|
dp_s = diff_alloc_new(curtab, dp_s, dp_s->df_next);
|
||||||
|
dp_s->is_linematched = TRUE;
|
||||||
|
for (int j = 0; j < DB_COUNT; j++)
|
||||||
|
{
|
||||||
|
if (curtab->tp_diffbuf[j] != NULL)
|
||||||
|
{
|
||||||
|
dp_s->df_lnum[j] = line_numbers[j];
|
||||||
|
dp_s->df_count[j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (size_t j = 0; j < ndiffs; j++)
|
||||||
|
{
|
||||||
|
if (decisions[i] & (1 << j))
|
||||||
|
{
|
||||||
|
// will need to use the map here
|
||||||
|
dp_s->df_count[outputmap[j]]++;
|
||||||
|
line_numbers[outputmap[j]]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dp->is_linematched = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
run_linematch_algorithm(diff_T *dp)
|
||||||
|
{
|
||||||
|
// define buffers for diff algorithm
|
||||||
|
diffin_T diffbufs_mm[DB_COUNT];
|
||||||
|
const mmfile_t *diffbufs[DB_COUNT];
|
||||||
|
int diff_length[DB_COUNT];
|
||||||
|
size_t ndiffs = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < DB_COUNT; i++)
|
||||||
|
{
|
||||||
|
if (curtab->tp_diffbuf[i] != NULL)
|
||||||
|
{
|
||||||
|
// write the contents of the entire buffer to
|
||||||
|
// diffbufs_mm[diffbuffers_count]
|
||||||
|
if (dp->df_count[i] > 0)
|
||||||
|
{
|
||||||
|
diff_write_buffer(curtab->tp_diffbuf[i], &diffbufs_mm[ndiffs],
|
||||||
|
dp->df_lnum[i], dp->df_lnum[i] + dp->df_count[i] - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
diffbufs_mm[ndiffs].din_mmfile.size = 0;
|
||||||
|
diffbufs_mm[ndiffs].din_mmfile.ptr = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
diffbufs[ndiffs] = &diffbufs_mm[ndiffs].din_mmfile;
|
||||||
|
|
||||||
|
// keep track of the length of this diff block to pass it to the
|
||||||
|
// linematch algorithm
|
||||||
|
diff_length[ndiffs] = dp->df_count[i];
|
||||||
|
|
||||||
|
// increment the amount of diff buffers we are passing to the
|
||||||
|
// algorithm
|
||||||
|
ndiffs++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we will get the output of the linematch algorithm in the format of an
|
||||||
|
// array of integers (*decisions) and the length of that array
|
||||||
|
// (decisions_length)
|
||||||
|
int *decisions = NULL;
|
||||||
|
const int iwhite = (diff_flags & (DIFF_IWHITEALL | DIFF_IWHITE)) > 0 ? 1 : 0;
|
||||||
|
size_t decisions_length =
|
||||||
|
linematch_nbuffers(diffbufs, diff_length, ndiffs, &decisions, iwhite);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < ndiffs; i++)
|
||||||
|
free(diffbufs_mm[i].din_mmfile.ptr); // TODO should this be vim_free ?
|
||||||
|
|
||||||
|
apply_linematch_results(dp, decisions_length, decisions);
|
||||||
|
|
||||||
|
free(decisions);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check diff status for line "lnum" in buffer "buf":
|
* Check diff status for line "lnum" in buffer "buf":
|
||||||
* Returns 0 for nothing special
|
* Returns 0 for nothing special
|
||||||
@ -1930,9 +2291,15 @@ diff_clear(tabpage_T *tp)
|
|||||||
* Returns > 0 for inserting that many filler lines above it (never happens
|
* Returns > 0 for inserting that many filler lines above it (never happens
|
||||||
* when 'diffopt' doesn't contain "filler").
|
* when 'diffopt' doesn't contain "filler").
|
||||||
* This should only be used for windows where 'diff' is set.
|
* This should only be used for windows where 'diff' is set.
|
||||||
|
* When diffopt contains linematch, a changed/added/deleted line
|
||||||
|
* may also have filler lines above it. In such a case, the possibilities
|
||||||
|
* are no longer mutually exclusive. The number of filler lines is
|
||||||
|
* returned from diff_check, and the integer 'linestatus' passed by
|
||||||
|
* pointer is set to -1 to indicate a changed line, and -2 to indicate an
|
||||||
|
* added line
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
diff_check(win_T *wp, linenr_T lnum)
|
diff_check_with_linestatus(win_T *wp, linenr_T lnum, int *linestatus)
|
||||||
{
|
{
|
||||||
int idx; // index in tp_diffbuf[] for this buffer
|
int idx; // index in tp_diffbuf[] for this buffer
|
||||||
diff_T *dp;
|
diff_T *dp;
|
||||||
@ -1968,6 +2335,15 @@ diff_check(win_T *wp, linenr_T lnum)
|
|||||||
if (dp == NULL || lnum < dp->df_lnum[idx])
|
if (dp == NULL || lnum < dp->df_lnum[idx])
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
// Don't run linematch when lnum is offscreen. Useful for scrollbind
|
||||||
|
// calculations which need to count all the filler lines above the screen.
|
||||||
|
if (lnum >= wp->w_topline && lnum < wp->w_botline
|
||||||
|
&& !dp->is_linematched && diff_linematch(dp))
|
||||||
|
run_linematch_algorithm(dp);
|
||||||
|
|
||||||
|
if (dp->is_linematched)
|
||||||
|
return linematched_filler_lines(dp, idx, lnum, linestatus);
|
||||||
|
|
||||||
if (lnum < dp->df_lnum[idx] + dp->df_count[idx])
|
if (lnum < dp->df_lnum[idx] + dp->df_count[idx])
|
||||||
{
|
{
|
||||||
int zero = FALSE;
|
int zero = FALSE;
|
||||||
@ -2014,13 +2390,16 @@ diff_check(win_T *wp, linenr_T lnum)
|
|||||||
|
|
||||||
// Insert filler lines above the line just below the change. Will return
|
// Insert filler lines above the line just below the change. Will return
|
||||||
// 0 when this buf had the max count.
|
// 0 when this buf had the max count.
|
||||||
maxcount = 0;
|
maxcount = get_max_diff_length(dp);
|
||||||
for (i = 0; i < DB_COUNT; ++i)
|
|
||||||
if (curtab->tp_diffbuf[i] != NULL && dp->df_count[i] > maxcount)
|
|
||||||
maxcount = dp->df_count[i];
|
|
||||||
return maxcount - dp->df_count[idx];
|
return maxcount - dp->df_count[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
diff_check(win_T *wp, linenr_T lnum)
|
||||||
|
{
|
||||||
|
return diff_check_with_linestatus(wp, lnum, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compare two entries in diff "*dp" and return TRUE if they are equal.
|
* Compare two entries in diff "*dp" and return TRUE if they are equal.
|
||||||
*/
|
*/
|
||||||
@ -2194,53 +2573,64 @@ diff_set_topline(win_T *fromwin, win_T *towin)
|
|||||||
towin->w_topline = lnum + (dp->df_lnum[toidx] - dp->df_lnum[fromidx]);
|
towin->w_topline = lnum + (dp->df_lnum[toidx] - dp->df_lnum[fromidx]);
|
||||||
if (lnum >= dp->df_lnum[fromidx])
|
if (lnum >= dp->df_lnum[fromidx])
|
||||||
{
|
{
|
||||||
// Inside a change: compute filler lines. With three or more
|
if (dp->is_linematched)
|
||||||
// buffers we need to know the largest count.
|
{
|
||||||
max_count = 0;
|
calculate_topfill_and_topline(fromidx, toidx,
|
||||||
for (i = 0; i < DB_COUNT; ++i)
|
fromwin->w_topline,
|
||||||
if (curtab->tp_diffbuf[i] != NULL
|
fromwin->w_topfill,
|
||||||
&& max_count < dp->df_count[i])
|
&towin->w_topfill,
|
||||||
max_count = dp->df_count[i];
|
&towin->w_topline);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Inside a change: compute filler lines. With three or more
|
||||||
|
// buffers we need to know the largest count.
|
||||||
|
max_count = 0;
|
||||||
|
for (i = 0; i < DB_COUNT; ++i)
|
||||||
|
if (curtab->tp_diffbuf[i] != NULL
|
||||||
|
&& max_count < dp->df_count[i])
|
||||||
|
max_count = dp->df_count[i];
|
||||||
|
|
||||||
if (dp->df_count[toidx] == dp->df_count[fromidx])
|
if (dp->df_count[toidx] == dp->df_count[fromidx])
|
||||||
{
|
|
||||||
// same number of lines: use same filler count
|
|
||||||
towin->w_topfill = fromwin->w_topfill;
|
|
||||||
}
|
|
||||||
else if (dp->df_count[toidx] > dp->df_count[fromidx])
|
|
||||||
{
|
|
||||||
if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx])
|
|
||||||
{
|
{
|
||||||
// more lines in towin and fromwin doesn't show diff
|
// same number of lines: use same filler count
|
||||||
// lines, only filler lines
|
towin->w_topfill = fromwin->w_topfill;
|
||||||
if (max_count - fromwin->w_topfill >= dp->df_count[toidx])
|
|
||||||
{
|
|
||||||
// towin also only shows filler lines
|
|
||||||
towin->w_topline = dp->df_lnum[toidx]
|
|
||||||
+ dp->df_count[toidx];
|
|
||||||
towin->w_topfill = fromwin->w_topfill;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
// towin still has some diff lines to show
|
|
||||||
towin->w_topline = dp->df_lnum[toidx]
|
|
||||||
+ max_count - fromwin->w_topfill;
|
|
||||||
}
|
}
|
||||||
}
|
else if (dp->df_count[toidx] > dp->df_count[fromidx])
|
||||||
else if (towin->w_topline >= dp->df_lnum[toidx]
|
|
||||||
+ dp->df_count[toidx])
|
|
||||||
{
|
|
||||||
// less lines in towin and no diff lines to show: compute
|
|
||||||
// filler lines
|
|
||||||
towin->w_topline = dp->df_lnum[toidx] + dp->df_count[toidx];
|
|
||||||
if (diff_flags & DIFF_FILLER)
|
|
||||||
{
|
{
|
||||||
if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx])
|
if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx])
|
||||||
// fromwin is also out of diff lines
|
{
|
||||||
towin->w_topfill = fromwin->w_topfill;
|
// more lines in towin and fromwin doesn't show diff
|
||||||
else
|
// lines, only filler lines
|
||||||
// fromwin has some diff lines
|
if (max_count - fromwin->w_topfill >= dp->df_count[toidx])
|
||||||
towin->w_topfill = dp->df_lnum[fromidx]
|
{
|
||||||
+ max_count - lnum;
|
// towin also only shows filler lines
|
||||||
|
towin->w_topline = dp->df_lnum[toidx]
|
||||||
|
+ dp->df_count[toidx];
|
||||||
|
towin->w_topfill = fromwin->w_topfill;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// towin still has some diff lines to show
|
||||||
|
towin->w_topline = dp->df_lnum[toidx]
|
||||||
|
+ max_count - fromwin->w_topfill;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (towin->w_topline >= dp->df_lnum[toidx]
|
||||||
|
+ dp->df_count[toidx])
|
||||||
|
{
|
||||||
|
// less lines in towin and no diff lines to show: compute
|
||||||
|
// filler lines
|
||||||
|
towin->w_topline = dp->df_lnum[toidx] + dp->df_count[toidx];
|
||||||
|
if (diff_flags & DIFF_FILLER)
|
||||||
|
{
|
||||||
|
if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx])
|
||||||
|
// fromwin is also out of diff lines
|
||||||
|
towin->w_topfill = fromwin->w_topfill;
|
||||||
|
else
|
||||||
|
// fromwin has some diff lines
|
||||||
|
towin->w_topfill = dp->df_lnum[fromidx] +
|
||||||
|
max_count - lnum;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2278,6 +2668,7 @@ diffopt_changed(void)
|
|||||||
{
|
{
|
||||||
char_u *p;
|
char_u *p;
|
||||||
int diff_context_new = 6;
|
int diff_context_new = 6;
|
||||||
|
int linematch_lines_new = 0;
|
||||||
int diff_flags_new = 0;
|
int diff_flags_new = 0;
|
||||||
int diff_foldcolumn_new = 2;
|
int diff_foldcolumn_new = 2;
|
||||||
long diff_algorithm_new = 0;
|
long diff_algorithm_new = 0;
|
||||||
@ -2390,6 +2781,12 @@ diffopt_changed(void)
|
|||||||
else
|
else
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
else if (STRNCMP(p, "linematch:", 10) == 0 && VIM_ISDIGIT(p[11]))
|
||||||
|
{
|
||||||
|
p += 10;
|
||||||
|
linematch_lines_new = getdigits(&p);
|
||||||
|
diff_flags_new |= DIFF_LINEMATCH;
|
||||||
|
}
|
||||||
|
|
||||||
if (*p != ',' && *p != NUL)
|
if (*p != ',' && *p != NUL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@ -2411,6 +2808,7 @@ diffopt_changed(void)
|
|||||||
|
|
||||||
diff_flags = diff_flags_new;
|
diff_flags = diff_flags_new;
|
||||||
diff_context = diff_context_new == 0 ? 1 : diff_context_new;
|
diff_context = diff_context_new == 0 ? 1 : diff_context_new;
|
||||||
|
linematch_lines = linematch_lines_new;
|
||||||
diff_foldcolumn = diff_foldcolumn_new;
|
diff_foldcolumn = diff_foldcolumn_new;
|
||||||
diff_algorithm = diff_algorithm_new;
|
diff_algorithm = diff_algorithm_new;
|
||||||
|
|
||||||
@ -2489,6 +2887,13 @@ diff_find_change(
|
|||||||
FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp)
|
FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp)
|
||||||
if (lnum <= dp->df_lnum[idx] + dp->df_count[idx])
|
if (lnum <= dp->df_lnum[idx] + dp->df_count[idx])
|
||||||
break;
|
break;
|
||||||
|
if (dp->is_linematched)
|
||||||
|
{
|
||||||
|
while (dp && dp->df_next
|
||||||
|
&& lnum == dp->df_count[idx] + dp->df_lnum[idx]
|
||||||
|
&& dp->df_next->df_lnum[idx] == lnum)
|
||||||
|
dp = dp->df_next;
|
||||||
|
}
|
||||||
if (dp == NULL || diff_check_sanity(curtab, dp) == FAIL)
|
if (dp == NULL || diff_check_sanity(curtab, dp) == FAIL)
|
||||||
{
|
{
|
||||||
vim_free(line_org);
|
vim_free(line_org);
|
||||||
@ -2829,6 +3234,19 @@ ex_diffgetput(exarg_T *eap)
|
|||||||
dprev = NULL;
|
dprev = NULL;
|
||||||
for (dp = curtab->tp_first_diff; dp != NULL; )
|
for (dp = curtab->tp_first_diff; dp != NULL; )
|
||||||
{
|
{
|
||||||
|
if (!eap->addr_count)
|
||||||
|
{
|
||||||
|
// handle the case with adjacent diff blocks
|
||||||
|
while (dp->is_linematched
|
||||||
|
&& dp->df_next
|
||||||
|
&& dp->df_next->df_lnum[idx_cur] == dp->df_lnum[idx_cur] +
|
||||||
|
dp->df_count[idx_cur]
|
||||||
|
&& dp->df_next->df_lnum[idx_cur] == eap->line1 + off + 1)
|
||||||
|
{
|
||||||
|
dprev = dp;
|
||||||
|
dp = dp->df_next;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (dp->df_lnum[idx_cur] > eap->line2 + off)
|
if (dp->df_lnum[idx_cur] > eap->line2 + off)
|
||||||
break; // past the range that was specified
|
break; // past the range that was specified
|
||||||
|
|
||||||
@ -3445,10 +3863,11 @@ f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
|||||||
|| fnum != curbuf->b_fnum)
|
|| fnum != curbuf->b_fnum)
|
||||||
{
|
{
|
||||||
// New line, buffer, change: need to get the values.
|
// New line, buffer, change: need to get the values.
|
||||||
filler_lines = diff_check(curwin, lnum);
|
int linestatus = 0;
|
||||||
if (filler_lines < 0)
|
filler_lines = diff_check_with_linestatus(curwin, lnum, &linestatus);
|
||||||
|
if (filler_lines < 0 || linestatus < 0)
|
||||||
{
|
{
|
||||||
if (filler_lines == -1)
|
if (filler_lines == -1 || linestatus == -1)
|
||||||
{
|
{
|
||||||
change_start = MAXCOL;
|
change_start = MAXCOL;
|
||||||
change_end = -1;
|
change_end = -1;
|
||||||
|
@ -1467,10 +1467,13 @@ win_line(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FEAT_DIFF
|
#ifdef FEAT_DIFF
|
||||||
wlv.filler_lines = diff_check(wp, lnum);
|
|
||||||
if (wlv.filler_lines < 0)
|
int linestatus = 0;
|
||||||
|
wlv.filler_lines = diff_check_with_linestatus(wp, lnum, &linestatus);
|
||||||
|
|
||||||
|
if (wlv.filler_lines < 0 || linestatus < 0)
|
||||||
{
|
{
|
||||||
if (wlv.filler_lines == -1)
|
if (wlv.filler_lines == -1 || linestatus == -1)
|
||||||
{
|
{
|
||||||
if (diff_find_change(wp, lnum, &change_start, &change_end))
|
if (diff_find_change(wp, lnum, &change_start, &change_end))
|
||||||
wlv.diff_hlf = HLF_ADD; // added line
|
wlv.diff_hlf = HLF_ADD; // added line
|
||||||
@ -1480,12 +1483,17 @@ win_line(
|
|||||||
wlv.diff_hlf = HLF_CHD; // changed line
|
wlv.diff_hlf = HLF_CHD; // changed line
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
wlv.diff_hlf = HLF_ADD; // added line
|
wlv.diff_hlf = HLF_ADD;
|
||||||
wlv.filler_lines = 0;
|
|
||||||
|
if (linestatus == 0)
|
||||||
|
wlv.filler_lines = 0;
|
||||||
|
|
||||||
area_highlighting = TRUE;
|
area_highlighting = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lnum == wp->w_topline)
|
if (lnum == wp->w_topline)
|
||||||
wlv.filler_lines = wp->w_topfill;
|
wlv.filler_lines = wp->w_topfill;
|
||||||
|
|
||||||
wlv.filler_todo = wlv.filler_lines;
|
wlv.filler_todo = wlv.filler_lines;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -869,6 +869,7 @@ EXTERN int drag_sep_line INIT(= FALSE); // dragging vert separator
|
|||||||
#ifdef FEAT_DIFF
|
#ifdef FEAT_DIFF
|
||||||
// Value set from 'diffopt'.
|
// Value set from 'diffopt'.
|
||||||
EXTERN int diff_context INIT(= 6); // context for folds
|
EXTERN int diff_context INIT(= 6); // context for folds
|
||||||
|
EXTERN int linematch_lines INIT(= 0); // number of lines for diff line match
|
||||||
EXTERN int diff_foldcolumn INIT(= 2); // 'foldcolumn' for diff mode
|
EXTERN int diff_foldcolumn INIT(= 2); // 'foldcolumn' for diff mode
|
||||||
EXTERN int diff_need_scrollbind INIT(= FALSE);
|
EXTERN int diff_need_scrollbind INIT(= FALSE);
|
||||||
#endif
|
#endif
|
||||||
|
486
src/linematch.c
Normal file
486
src/linematch.c
Normal file
@ -0,0 +1,486 @@
|
|||||||
|
/* vi:set ts=8 sts=4 sw=4 noet:
|
||||||
|
*
|
||||||
|
* VIM - Vi IMproved by Bram Moolenaar
|
||||||
|
*
|
||||||
|
* Do ":help uganda" in Vim to read copying and usage conditions.
|
||||||
|
* Do ":help credits" in Vim to see a list of people who contributed.
|
||||||
|
* See README.txt for an overview of the Vim source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "vim.h"
|
||||||
|
|
||||||
|
#define LN_MAX_BUFS 8
|
||||||
|
#define LN_DECISION_MAX 255 // pow(2, LN_MAX_BUFS(8)) - 1 = 255
|
||||||
|
|
||||||
|
// struct for running the diff linematch algorithm
|
||||||
|
typedef struct diffcmppath_S diffcmppath_T;
|
||||||
|
struct diffcmppath_S
|
||||||
|
{
|
||||||
|
// to keep track of the total score of this path
|
||||||
|
int df_lev_score;
|
||||||
|
size_t df_path_n; // current index of this path
|
||||||
|
int df_choice_mem[LN_DECISION_MAX + 1];
|
||||||
|
int df_choice[LN_DECISION_MAX];
|
||||||
|
// to keep track of this path traveled
|
||||||
|
diffcmppath_T *df_decision[LN_DECISION_MAX];
|
||||||
|
size_t df_optimal_choice;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int matching_chars(const mmfile_t *m1, const mmfile_t *m2);
|
||||||
|
static size_t unwrap_indexes(const int *values, const int *diff_len, const size_t ndiffs);
|
||||||
|
static size_t test_charmatch_paths(diffcmppath_T *node, int lastdecision);
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
line_len(const mmfile_t *m)
|
||||||
|
{
|
||||||
|
char *s = m->ptr;
|
||||||
|
size_t n = (size_t)m->size;
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
end = vim_strnchr(s, &n, '\n');
|
||||||
|
if (end)
|
||||||
|
return (size_t)(end - s);
|
||||||
|
|
||||||
|
return (size_t)m->size;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MATCH_CHAR_MAX_LEN 800
|
||||||
|
|
||||||
|
/// Same as matching_chars but ignore whitespace
|
||||||
|
///
|
||||||
|
/// @param s1
|
||||||
|
/// @param s2
|
||||||
|
static int
|
||||||
|
matching_chars_iwhite(const mmfile_t *s1, const mmfile_t *s2)
|
||||||
|
{
|
||||||
|
// the newly processed strings that will be compared
|
||||||
|
// delete the white space characters
|
||||||
|
mmfile_t sp[2];
|
||||||
|
char p[2][MATCH_CHAR_MAX_LEN];
|
||||||
|
|
||||||
|
for (int k = 0; k < 2; k++)
|
||||||
|
{
|
||||||
|
const mmfile_t *s = k == 0 ? s1 : s2;
|
||||||
|
size_t pi = 0;
|
||||||
|
size_t slen = MIN(MATCH_CHAR_MAX_LEN - 1, line_len(s));
|
||||||
|
|
||||||
|
for (size_t i = 0; i <= slen; i++)
|
||||||
|
{
|
||||||
|
char e = s->ptr[i];
|
||||||
|
|
||||||
|
if (e != ' ' && e != '\t')
|
||||||
|
{
|
||||||
|
p[k][pi] = e;
|
||||||
|
pi++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sp[k].ptr = p[k];
|
||||||
|
sp[k].size = (int)pi;
|
||||||
|
}
|
||||||
|
|
||||||
|
return matching_chars(&sp[0], &sp[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return matching characters between "s1" and "s2" whilst respecting sequence
|
||||||
|
/// order.
|
||||||
|
/// Consider the case of two strings 'AAACCC' and 'CCCAAA', the
|
||||||
|
/// return value from this function will be 3, either to match
|
||||||
|
/// the 3 C's, or the 3 A's.
|
||||||
|
///
|
||||||
|
/// Examples:
|
||||||
|
/// matching_chars("aabc", "acba") -> 2 // 'a' and 'b' in common
|
||||||
|
/// matching_chars("123hello567", "he123ll567o") -> 8 // '123', 'll' and '567' in common
|
||||||
|
/// matching_chars("abcdefg", "gfedcba") -> 1 // all characters in common,
|
||||||
|
/// // but only at most 1 in sequence
|
||||||
|
///
|
||||||
|
/// @param m1
|
||||||
|
/// @param m2
|
||||||
|
static int
|
||||||
|
matching_chars(const mmfile_t *m1, const mmfile_t *m2)
|
||||||
|
{
|
||||||
|
size_t s1len = MIN(MATCH_CHAR_MAX_LEN - 1, line_len(m1));
|
||||||
|
size_t s2len = MIN(MATCH_CHAR_MAX_LEN - 1, line_len(m2));
|
||||||
|
char *s1 = m1->ptr;
|
||||||
|
char *s2 = m2->ptr;
|
||||||
|
int matrix[2][MATCH_CHAR_MAX_LEN] = { 0 };
|
||||||
|
int icur = 1; // save space by storing only two rows for i axis
|
||||||
|
|
||||||
|
for (size_t i = 0; i < s1len; i++)
|
||||||
|
{
|
||||||
|
icur = (icur == 1 ? 0 : 1);
|
||||||
|
int *e1 = matrix[icur];
|
||||||
|
int *e2 = matrix[!icur];
|
||||||
|
|
||||||
|
for (size_t j = 0; j < s2len; j++)
|
||||||
|
{
|
||||||
|
// skip char in s1
|
||||||
|
if (e2[j + 1] > e1[j + 1])
|
||||||
|
e1[j + 1] = e2[j + 1];
|
||||||
|
// skip char in s2
|
||||||
|
if (e1[j] > e1[j + 1])
|
||||||
|
e1[j + 1] = e1[j];
|
||||||
|
// compare char in s1 and s2
|
||||||
|
if ((s1[i] == s2[j]) && (e2[j] + 1) > e1[j + 1])
|
||||||
|
e1[j + 1] = e2[j] + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return matrix[icur][s2len];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// count the matching characters between a variable number of strings "sp"
|
||||||
|
/// mark the strings that have already been compared to extract them later
|
||||||
|
/// without re-running the character match counting.
|
||||||
|
/// @param sp
|
||||||
|
/// @param fomvals
|
||||||
|
/// @param n
|
||||||
|
static int
|
||||||
|
count_n_matched_chars(mmfile_t **sp, const size_t n, int iwhite)
|
||||||
|
{
|
||||||
|
int matched_chars = 0;
|
||||||
|
int matched = 0;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
for (size_t j = i + 1; j < n; j++)
|
||||||
|
{
|
||||||
|
if (sp[i]->ptr != NULL && sp[j]->ptr != NULL)
|
||||||
|
{
|
||||||
|
matched++;
|
||||||
|
// TODO(lewis6991): handle whitespace ignoring higher up in the
|
||||||
|
// stack
|
||||||
|
matched_chars += iwhite ? matching_chars_iwhite(sp[i], sp[j])
|
||||||
|
: matching_chars(sp[i], sp[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// prioritize a match of 3 (or more lines) equally to a match of 2 lines
|
||||||
|
if (matched >= 2)
|
||||||
|
{
|
||||||
|
matched_chars *= 2;
|
||||||
|
matched_chars /= matched;
|
||||||
|
}
|
||||||
|
|
||||||
|
return matched_chars;
|
||||||
|
}
|
||||||
|
|
||||||
|
static mmfile_t
|
||||||
|
fastforward_buf_to_lnum(mmfile_t s, linenr_T lnum)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < lnum - 1; i++)
|
||||||
|
{
|
||||||
|
size_t n = (size_t)s.size;
|
||||||
|
|
||||||
|
s.ptr = vim_strnchr(s.ptr, &n, '\n');
|
||||||
|
s.size = (int)n;
|
||||||
|
if (!s.ptr)
|
||||||
|
break;
|
||||||
|
s.ptr++;
|
||||||
|
s.size--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// try all the different ways to compare these lines and use the one that
|
||||||
|
/// results in the most matching characters
|
||||||
|
/// @param df_iters
|
||||||
|
/// @param paths
|
||||||
|
/// @param npaths
|
||||||
|
/// @param path_idx
|
||||||
|
/// @param choice
|
||||||
|
/// @param diffcmppath
|
||||||
|
/// @param diff_len
|
||||||
|
/// @param ndiffs
|
||||||
|
/// @param diff_blk
|
||||||
|
static void
|
||||||
|
try_possible_paths(
|
||||||
|
const int *df_iters,
|
||||||
|
const size_t *paths,
|
||||||
|
const int npaths,
|
||||||
|
const int path_idx,
|
||||||
|
int *choice,
|
||||||
|
diffcmppath_T *diffcmppath,
|
||||||
|
const int *diff_len,
|
||||||
|
const size_t ndiffs,
|
||||||
|
const mmfile_t **diff_blk,
|
||||||
|
int iwhite)
|
||||||
|
{
|
||||||
|
if (path_idx == npaths)
|
||||||
|
{
|
||||||
|
if ((*choice) > 0)
|
||||||
|
{
|
||||||
|
int from_vals[LN_MAX_BUFS] = { 0 };
|
||||||
|
const int *to_vals = df_iters;
|
||||||
|
|
||||||
|
mmfile_t mm[LN_MAX_BUFS]; // stack memory for current_lines
|
||||||
|
mmfile_t *current_lines[LN_MAX_BUFS];
|
||||||
|
for (size_t k = 0; k < ndiffs; k++)
|
||||||
|
{
|
||||||
|
from_vals[k] = df_iters[k];
|
||||||
|
// get the index at all of the places
|
||||||
|
if ((*choice) & (1 << k))
|
||||||
|
{
|
||||||
|
from_vals[k]--;
|
||||||
|
mm[k] = fastforward_buf_to_lnum(*diff_blk[k], df_iters[k]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CLEAR_FIELD(mm[k]);
|
||||||
|
current_lines[k] = &mm[k];
|
||||||
|
}
|
||||||
|
size_t unwrapped_idx_from = unwrap_indexes(from_vals, diff_len, ndiffs);
|
||||||
|
size_t unwrapped_idx_to = unwrap_indexes(to_vals, diff_len, ndiffs);
|
||||||
|
int matched_chars = count_n_matched_chars(current_lines, ndiffs, iwhite);
|
||||||
|
int score = diffcmppath[unwrapped_idx_from].df_lev_score + matched_chars;
|
||||||
|
|
||||||
|
if (score > diffcmppath[unwrapped_idx_to].df_lev_score)
|
||||||
|
{
|
||||||
|
diffcmppath[unwrapped_idx_to].df_path_n = 1;
|
||||||
|
diffcmppath[unwrapped_idx_to].df_decision[0] =
|
||||||
|
&diffcmppath[unwrapped_idx_from];
|
||||||
|
diffcmppath[unwrapped_idx_to].df_choice[0] = *choice;
|
||||||
|
diffcmppath[unwrapped_idx_to].df_lev_score = score;
|
||||||
|
}
|
||||||
|
else if (score == diffcmppath[unwrapped_idx_to].df_lev_score)
|
||||||
|
{
|
||||||
|
size_t k = diffcmppath[unwrapped_idx_to].df_path_n++;
|
||||||
|
diffcmppath[unwrapped_idx_to].df_decision[k] =
|
||||||
|
&diffcmppath[unwrapped_idx_from];
|
||||||
|
diffcmppath[unwrapped_idx_to].df_choice[k] = *choice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t bit_place = paths[path_idx];
|
||||||
|
*(choice) |= (1 << bit_place); // set it to 1
|
||||||
|
try_possible_paths(df_iters, paths, npaths, path_idx + 1, choice,
|
||||||
|
diffcmppath, diff_len, ndiffs, diff_blk, iwhite);
|
||||||
|
*(choice) &= ~(1 << bit_place); // set it to 0
|
||||||
|
try_possible_paths(df_iters, paths, npaths, path_idx + 1, choice,
|
||||||
|
diffcmppath, diff_len, ndiffs, diff_blk, iwhite);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// unwrap indexes to access n dimensional tensor
|
||||||
|
/// @param values
|
||||||
|
/// @param diff_len
|
||||||
|
/// @param ndiffs
|
||||||
|
static size_t
|
||||||
|
unwrap_indexes(const int *values, const int *diff_len, const size_t ndiffs)
|
||||||
|
{
|
||||||
|
size_t num_unwrap_scalar = 1;
|
||||||
|
|
||||||
|
for (size_t k = 0; k < ndiffs; k++)
|
||||||
|
num_unwrap_scalar *= (size_t)diff_len[k] + 1;
|
||||||
|
|
||||||
|
size_t path_idx = 0;
|
||||||
|
for (size_t k = 0; k < ndiffs; k++)
|
||||||
|
{
|
||||||
|
num_unwrap_scalar /= (size_t)diff_len[k] + 1;
|
||||||
|
|
||||||
|
int n = values[k];
|
||||||
|
path_idx += num_unwrap_scalar * (size_t)n;
|
||||||
|
}
|
||||||
|
|
||||||
|
return path_idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// populate the values of the linematch algorithm tensor, and find the best
|
||||||
|
/// decision for how to compare the relevant lines from each of the buffers at
|
||||||
|
/// each point in the tensor
|
||||||
|
/// @param df_iters
|
||||||
|
/// @param ch_dim
|
||||||
|
/// @param diffcmppath
|
||||||
|
/// @param diff_len
|
||||||
|
/// @param ndiffs
|
||||||
|
/// @param diff_blk
|
||||||
|
static void
|
||||||
|
populate_tensor(
|
||||||
|
int *df_iters,
|
||||||
|
const size_t ch_dim,
|
||||||
|
diffcmppath_T *diffcmppath,
|
||||||
|
const int *diff_len,
|
||||||
|
const size_t ndiffs,
|
||||||
|
const mmfile_t **diff_blk,
|
||||||
|
int iwhite)
|
||||||
|
{
|
||||||
|
if (ch_dim == ndiffs)
|
||||||
|
{
|
||||||
|
int npaths = 0;
|
||||||
|
size_t paths[LN_MAX_BUFS];
|
||||||
|
|
||||||
|
for (size_t j = 0; j < ndiffs; j++)
|
||||||
|
{
|
||||||
|
if (df_iters[j] > 0)
|
||||||
|
{
|
||||||
|
paths[npaths] = j;
|
||||||
|
npaths++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int choice = 0;
|
||||||
|
size_t unwrapper_idx_to = unwrap_indexes(df_iters, diff_len, ndiffs);
|
||||||
|
|
||||||
|
diffcmppath[unwrapper_idx_to].df_lev_score = -1;
|
||||||
|
try_possible_paths(df_iters, paths, npaths, 0, &choice, diffcmppath,
|
||||||
|
diff_len, ndiffs, diff_blk, iwhite);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i <= diff_len[ch_dim]; i++)
|
||||||
|
{
|
||||||
|
df_iters[ch_dim] = i;
|
||||||
|
populate_tensor(df_iters, ch_dim + 1, diffcmppath, diff_len,
|
||||||
|
ndiffs, diff_blk, iwhite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// algorithm to find an optimal alignment of lines of a diff block with 2 or
|
||||||
|
/// more files. The algorithm is generalized to work for any number of files
|
||||||
|
/// which corresponds to another dimension added to the tensor used in the
|
||||||
|
/// algorithm
|
||||||
|
///
|
||||||
|
/// for questions and information about the linematch algorithm please contact
|
||||||
|
/// Jonathon White (jonathonwhite@protonmail.com)
|
||||||
|
///
|
||||||
|
/// for explanation, a summary of the algorithm in 3 dimensions (3 files
|
||||||
|
/// compared) follows
|
||||||
|
///
|
||||||
|
/// The 3d case (for 3 buffers) of the algorithm implemented when diffopt
|
||||||
|
/// 'linematch' is enabled. The algorithm constructs a 3d tensor to
|
||||||
|
/// compare a diff between 3 buffers. The dimensions of the tensor are
|
||||||
|
/// the length of the diff in each buffer plus 1 A path is constructed by
|
||||||
|
/// moving from one edge of the cube/3d tensor to the opposite edge.
|
||||||
|
/// Motions from one cell of the cube to the next represent decisions. In
|
||||||
|
/// a 3d cube, there are a total of 7 decisions that can be made,
|
||||||
|
/// represented by the enum df_path3_choice which is defined in
|
||||||
|
/// buffer_defs.h a comparison of buffer 0 and 1 represents a motion
|
||||||
|
/// toward the opposite edge of the cube with components along the 0 and
|
||||||
|
/// 1 axes. a comparison of buffer 0, 1, and 2 represents a motion
|
||||||
|
/// toward the opposite edge of the cube with components along the 0, 1,
|
||||||
|
/// and 2 axes. A skip of buffer 0 represents a motion along only the 0
|
||||||
|
/// axis. For each action, a point value is awarded, and the path is
|
||||||
|
/// saved for reference later, if it is found to have been the optimal
|
||||||
|
/// path. The optimal path has the highest score. The score is
|
||||||
|
/// calculated as the summation of the total characters matching between
|
||||||
|
/// all of the lines which were compared. The structure of the algorithm
|
||||||
|
/// is that of a dynamic programming problem. We can calculate a point
|
||||||
|
/// i,j,k in the cube as a function of i-1, j-1, and k-1. To find the
|
||||||
|
/// score and path at point i,j,k, we must determine which path we want
|
||||||
|
/// to use, this is done by looking at the possibilities and choosing
|
||||||
|
/// the one which results in the local highest score. The total highest
|
||||||
|
/// scored path is, then in the end represented by the cell in the
|
||||||
|
/// opposite corner from the start location. The entire algorithm
|
||||||
|
/// consists of populating the 3d cube with the optimal paths from which
|
||||||
|
/// it may have came.
|
||||||
|
///
|
||||||
|
/// Optimizations:
|
||||||
|
/// As the function to calculate the cell of a tensor at point i,j,k is a
|
||||||
|
/// function of the cells at i-1, j-1, k-1, the whole tensor doesn't need
|
||||||
|
/// to be stored in memory at once. In the case of the 3d cube, only two
|
||||||
|
/// slices (along k and j axis) are stored in memory. For the 2d matrix
|
||||||
|
/// (for 2 files), only two rows are stored at a time. The next/previous
|
||||||
|
/// slice (or row) is always calculated from the other, and they alternate
|
||||||
|
/// at each iteration.
|
||||||
|
/// In the 3d case, 3 arrays are populated to memorize the score (matched
|
||||||
|
/// characters) of the 3 buffers, so a redundant calculation of the
|
||||||
|
/// scores does not occur
|
||||||
|
/// @param diff_blk
|
||||||
|
/// @param diff_len
|
||||||
|
/// @param ndiffs
|
||||||
|
/// @param [out] [allocated] decisions
|
||||||
|
/// @return the length of decisions
|
||||||
|
size_t
|
||||||
|
linematch_nbuffers(
|
||||||
|
const mmfile_t **diff_blk,
|
||||||
|
const int *diff_len,
|
||||||
|
const size_t ndiffs,
|
||||||
|
int **decisions,
|
||||||
|
int iwhite)
|
||||||
|
{
|
||||||
|
assert(ndiffs <= LN_MAX_BUFS);
|
||||||
|
|
||||||
|
size_t memsize = 1;
|
||||||
|
size_t memsize_decisions = 0;
|
||||||
|
for (size_t i = 0; i < ndiffs; i++)
|
||||||
|
{
|
||||||
|
assert(diff_len[i] >= 0);
|
||||||
|
memsize *= (size_t)(diff_len[i] + 1);
|
||||||
|
memsize_decisions += (size_t)diff_len[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the flattened path matrix
|
||||||
|
diffcmppath_T *diffcmppath = lalloc(sizeof(diffcmppath_T) * memsize, TRUE);
|
||||||
|
// allocate memory here
|
||||||
|
for (size_t i = 0; i < memsize; i++)
|
||||||
|
{
|
||||||
|
diffcmppath[i].df_lev_score = 0;
|
||||||
|
diffcmppath[i].df_path_n = 0;
|
||||||
|
for (size_t j = 0; j < (size_t)pow(2, (double)ndiffs); j++)
|
||||||
|
diffcmppath[i].df_choice_mem[j] = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// memory for avoiding repetitive calculations of score
|
||||||
|
int df_iters[LN_MAX_BUFS];
|
||||||
|
populate_tensor(df_iters, 0, diffcmppath, diff_len, ndiffs, diff_blk,
|
||||||
|
iwhite);
|
||||||
|
|
||||||
|
const size_t u = unwrap_indexes(diff_len, diff_len, ndiffs);
|
||||||
|
diffcmppath_T *startNode = &diffcmppath[u];
|
||||||
|
|
||||||
|
*decisions = lalloc(sizeof(int) * memsize_decisions, TRUE);
|
||||||
|
size_t n_optimal = 0;
|
||||||
|
test_charmatch_paths(startNode, 0);
|
||||||
|
while (startNode->df_path_n > 0)
|
||||||
|
{
|
||||||
|
size_t j = startNode->df_optimal_choice;
|
||||||
|
(*decisions)[n_optimal++] = startNode->df_choice[j];
|
||||||
|
startNode = startNode->df_decision[j];
|
||||||
|
}
|
||||||
|
// reverse array
|
||||||
|
for (size_t i = 0; i < (n_optimal / 2); i++)
|
||||||
|
{
|
||||||
|
int tmp = (*decisions)[i];
|
||||||
|
(*decisions)[i] = (*decisions)[n_optimal - 1 - i];
|
||||||
|
(*decisions)[n_optimal - 1 - i] = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
vim_free(diffcmppath);
|
||||||
|
|
||||||
|
return n_optimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns the minimum amount of path changes from start to end
|
||||||
|
static size_t
|
||||||
|
test_charmatch_paths(diffcmppath_T *node, int lastdecision)
|
||||||
|
{
|
||||||
|
// memoization
|
||||||
|
if (node->df_choice_mem[lastdecision] == -1)
|
||||||
|
{
|
||||||
|
if (node->df_path_n == 0)
|
||||||
|
// we have reached the end of the tree
|
||||||
|
node->df_choice_mem[lastdecision] = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// the minimum amount of turns required to reach the end
|
||||||
|
size_t minimum_turns = SIZE_MAX;
|
||||||
|
for (size_t i = 0; i < node->df_path_n; i++)
|
||||||
|
{
|
||||||
|
// recurse
|
||||||
|
size_t t = test_charmatch_paths(node->df_decision[i],
|
||||||
|
node->df_choice[i]) +
|
||||||
|
(lastdecision != node->df_choice[i] ? 1 : 0);
|
||||||
|
if (t < minimum_turns)
|
||||||
|
{
|
||||||
|
node->df_optimal_choice = i;
|
||||||
|
minimum_turns = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node->df_choice_mem[lastdecision] = (int)minimum_turns;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (size_t)node->df_choice_mem[lastdecision];
|
||||||
|
}
|
@ -74,6 +74,7 @@ extern int _stricoll(char *a, char *b);
|
|||||||
# include "debugger.pro"
|
# include "debugger.pro"
|
||||||
# include "dict.pro"
|
# include "dict.pro"
|
||||||
# include "diff.pro"
|
# include "diff.pro"
|
||||||
|
# include "linematch.pro"
|
||||||
# include "digraph.pro"
|
# include "digraph.pro"
|
||||||
# include "drawline.pro"
|
# include "drawline.pro"
|
||||||
# include "drawscreen.pro"
|
# include "drawscreen.pro"
|
||||||
|
@ -14,6 +14,7 @@ void diff_win_options(win_T *wp, int addbuf);
|
|||||||
void ex_diffoff(exarg_T *eap);
|
void ex_diffoff(exarg_T *eap);
|
||||||
void diff_clear(tabpage_T *tp);
|
void diff_clear(tabpage_T *tp);
|
||||||
int diff_check(win_T *wp, linenr_T lnum);
|
int diff_check(win_T *wp, linenr_T lnum);
|
||||||
|
int diff_check_with_linestatus(win_T *wp, linenr_T lnum, int *linestatus);
|
||||||
int diff_check_fill(win_T *wp, linenr_T lnum);
|
int diff_check_fill(win_T *wp, linenr_T lnum);
|
||||||
void diff_set_topline(win_T *fromwin, win_T *towin);
|
void diff_set_topline(win_T *fromwin, win_T *towin);
|
||||||
int diffopt_changed(void);
|
int diffopt_changed(void);
|
||||||
|
3
src/proto/linematch.pro
Normal file
3
src/proto/linematch.pro
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
/* linematch.c */
|
||||||
|
size_t linematch_nbuffers(const mmfile_t **diff_blk, const int *diff_len, const size_t ndiffs, int **decisions, int iwhite);
|
||||||
|
/* vim: set ft=c : */
|
@ -17,6 +17,7 @@ int vim_stricmp(char *s1, char *s2);
|
|||||||
int vim_strnicmp(char *s1, char *s2, size_t len);
|
int vim_strnicmp(char *s1, char *s2, size_t len);
|
||||||
int vim_strnicmp_asc(char *s1, char *s2, size_t len);
|
int vim_strnicmp_asc(char *s1, char *s2, size_t len);
|
||||||
char_u *vim_strchr(char_u *string, int c);
|
char_u *vim_strchr(char_u *string, int c);
|
||||||
|
char *vim_strnchr(const char *p, size_t *n, int c);
|
||||||
char_u *vim_strbyte(char_u *string, int c);
|
char_u *vim_strbyte(char_u *string, int c);
|
||||||
char_u *vim_strrchr(char_u *string, int c);
|
char_u *vim_strrchr(char_u *string, int c);
|
||||||
void sort_strings(char_u **files, int count);
|
void sort_strings(char_u **files, int count);
|
||||||
|
@ -674,6 +674,22 @@ vim_strchr(char_u *string, int c)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sized version of strchr that can handle embedded NULs.
|
||||||
|
// Adjusts n to the new size.
|
||||||
|
char *
|
||||||
|
vim_strnchr(const char *p, size_t *n, int c)
|
||||||
|
{
|
||||||
|
while (*n > 0)
|
||||||
|
{
|
||||||
|
if (*p == c)
|
||||||
|
return (char *)p;
|
||||||
|
p++;
|
||||||
|
(*n)--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Version of strchr() that only works for bytes and handles unsigned char
|
* Version of strchr() that only works for bytes and handles unsigned char
|
||||||
* strings with characters above 128 correctly. It also doesn't return a
|
* strings with characters above 128 correctly. It also doesn't return a
|
||||||
|
@ -3553,6 +3553,8 @@ struct diffblock_S
|
|||||||
diff_T *df_next;
|
diff_T *df_next;
|
||||||
linenr_T df_lnum[DB_COUNT]; // line number in buffer
|
linenr_T df_lnum[DB_COUNT]; // line number in buffer
|
||||||
linenr_T df_count[DB_COUNT]; // nr of inserted/changed lines
|
linenr_T df_count[DB_COUNT]; // nr of inserted/changed lines
|
||||||
|
int is_linematched; // has the linematch algorithm ran on this diff hunk to divide it into
|
||||||
|
// smaller diff hunks?
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
20
src/testdir/dumps/Test_diff_23.dump
Normal file
20
src/testdir/dumps/Test_diff_23.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|a| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|b+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|b+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|c| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
|~+0&#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|:+0&&> @73
|
20
src/testdir/dumps/Test_diff_24.dump
Normal file
20
src/testdir/dumps/Test_diff_24.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|0|-|1| @9|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|0|-|1| @9|A|l@1
|
||||||
|
|:+0&&> @73
|
20
src/testdir/dumps/Test_diff_get_put_linematch_1.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_1.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|0|-|1| @9|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|0|-|1| @9|A|l@1
|
||||||
|
|"+0&&|X|d|i|f|i|l|e|2|"| |1|7|L|,| |1|2|0|B| @54
|
20
src/testdir/dumps/Test_diff_get_put_linematch_10.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_10.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1>s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|1|3|,|1| @10|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|7|,|1| @10|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|g|e|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_11.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_11.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1>A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|5|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| |[|+|]| @6|5|,|1| @11|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_12.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_12.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1>A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|6|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| |[|+|]| @6|9|,|1| @11|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_13.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_13.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1>A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|7|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| |[|+|]| @6|1|0|,|1| @10|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_14.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_14.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1>c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1@1|,|1| @10|A|l@1| |X+1&&|d|i|f|i|l|e|2| |[|+|]| @6|1|4|,|1| @10|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_15.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_15.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1>s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|2|,|1| @10|A|l@1| |X+1&&|d|i|f|i|l|e|2| |[|+|]| @6|1|6|,|1| @10|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_16.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_16.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1>x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+1#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|9|,|1| @11|A|l@1| |X+3&&|d|i|f|i|l|e|2| @10|6|,|1| @11|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_17.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_17.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1>x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+1#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|9|,|1| @11|A|l@1| |X+3&&|d|i|f|i|l|e|2| @10|8|,|1| @11|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_18.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_18.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1>D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+1#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|6|,|1| @11|A|l@1| |X+3&&|d|i|f|i|l|e|2| @10|9|,|1| @11|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_19.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_19.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1>s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+1#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|1|3|,|1| @10|A|l@1| |X+3&&|d|i|f|i|l|e|2| @10|1|7|,|1| @10|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|p|u|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_2.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_2.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|++0#0000e05#a8a8a8255| >+|-@1| @1|7| |l|i|n|e|s|:| |c|o|m@1|o|n| |l|i|n|e|-@9||+1#0000000#ffffff0|++0#0000e05#a8a8a8255| |+|-@1| @1|7| |l|i|n|e|s|:| |c|o|m@1|o|n| |l|i|n|e|-@9
|
||||||
|
| @1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|1|,|0|-|1| @9|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|0|-|1| @9|A|l@1
|
||||||
|
|:+0&&|5|,|9|d|i|f@1|g|e|t| @63
|
20
src/testdir/dumps/Test_diff_get_put_linematch_3.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_3.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@34||+1&&|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1>A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+1#0000000&|d|i|f|i|l|e|1| @10|5|,|1| @11|A|l@1| |X+3&&|d|i|f|i|l|e|2| |[|+|]| @6|5|,|1| @11|A|l@1
|
||||||
|
|:+0&&|5|,|1|0|d|i|f@1|g|e|t| @62
|
20
src/testdir/dumps/Test_diff_get_put_linematch_4.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_4.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1>A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0|B|C|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+1#0000000&|d|i|f|i|l|e|1| @10|5|,|1| @11|A|l@1| |X+3&&|d|i|f|i|l|e|2| |[|+|]| @6|5|,|1| @11|A|l@1
|
||||||
|
|:+0&&|4|,|1|7|d|i|f@1|g|e|t| @62
|
20
src/testdir/dumps/Test_diff_get_put_linematch_5.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_5.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1>D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|5|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|5|,|1| @11|A|l@1
|
||||||
|
|:+0&&|4|,|1|2|d|i|f@1|g|e|t| @62
|
20
src/testdir/dumps/Test_diff_get_put_linematch_6.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_6.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1>D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|5|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|5|,|1| @11|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|g|e|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_7.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_7.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1>D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|6|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|9|,|1| @11|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|g|e|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_8.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_8.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1>D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F|a|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|7|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|0|,|1| @10|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|g|e|t| @66
|
20
src/testdir/dumps/Test_diff_get_put_linematch_9.dump
Normal file
20
src/testdir/dumps/Test_diff_get_put_linematch_9.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|A+2#0000000#ff404010|B|C|a+0&#ffd7ff255|b|c| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|D+2#0000000#ff404010|E|F|a+0&#ffd7ff255|b|c| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31||+1&&| +0#0000e05#a8a8a8255@1|D+0#0000000#ffffff0|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1>c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| |[|+|]| @6|1|2|,|1| @10|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|5|,|1| @10|A|l@1
|
||||||
|
|:+0&&|d|i|f@1|g|e|t| @66
|
20
src/testdir/dumps/Test_linematch_3diffs1.dump
Normal file
20
src/testdir/dumps/Test_linematch_3diffs1.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@22||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@21||+1&&| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@21
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c|o|m@1|o|n| |l|i|n|e| @9||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c|o|m@1|o|n| |l|i|n|e| @8||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c|o|m@1|o|n| |l|i|n|e| @8
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@22||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@1|<@6| |H|E|A|D| @7||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@21
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|A@2| @13||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|A@2| @12||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@21
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|A@2| @13||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|A@2| @12||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@21
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|A@2| @13||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|A@2| @12||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@21
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@22||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@1|=@6| @12||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@21
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@22||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|B@2| @12||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|B@2| @12
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@22||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|B@2| @12||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|B@2| @12
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@22||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|B@2| @12||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@5|B@2| @12
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@22||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@1|>@6| |b|r|a|n|c|h|1| @4||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@21
|
||||||
|
|~+0&#ffffff0| @23||+1#0000000&|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @22
|
||||||
|
|~| @23||+1#0000000&|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @22
|
||||||
|
|~| @23||+1#0000000&|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @22
|
||||||
|
|~| @23||+1#0000000&|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @22
|
||||||
|
|~| @23||+1#0000000&|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @22
|
||||||
|
|~| @23||+1#0000000&|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @22
|
||||||
|
|~| @23||+1#0000000&|~+0#4040ff13&| @22||+1#0000000&|~+0#4040ff13&| @22
|
||||||
|
|X+1#0000000&|d|i|f|i|l|e|1| @4|1|,|0|-|1| @3|A|l@1| |X|d|i|f|i|l|e|2| @3|1|,|0|-|1| @3|A|l@1| |X+3&&|d|i|f|i|l|e|3| @3|1|,|0|-|1| @3|A|l@1
|
||||||
|
|"+0&&|X|d|i|f|i|l|e|3|"| |5|L|,| |4|5|B| @56
|
20
src/testdir/dumps/Test_linematch_diff1.dump
Normal file
20
src/testdir/dumps/Test_linematch_diff1.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|!+0#0000000#5fd7ff255| @33
|
||||||
|
| +0#0000e05#a8a8a8255@1>/+2#0000000#ff404010@1| |a|b|c| |d|?| +0&#ffd7ff255@25||+1&#ffffff0| +0#0000e05#a8a8a8255@1|a+2#0000000#ff404010|b|c| |d|!| +0&#ffd7ff255@28
|
||||||
|
| +0#0000e05#a8a8a8255@1|/+2#0000000#ff404010@1| |d|?| +0&#ffd7ff255@29||+1&#ffffff0| +0#0000e05#a8a8a8255@1|d+2#0000000#ff404010|!| +0&#ffd7ff255@32
|
||||||
|
| +0#0000e05#a8a8a8255@1|/+0#0000000#5fd7ff255@1| |d|?| @29||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
|~+0&#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|"+0&&|X|d|i|f|i|l|e|2|"| |3|L|,| |1|2|B| @56
|
20
src/testdir/dumps/Test_linematch_diff_grouping1.dump
Normal file
20
src/testdir/dumps/Test_linematch_diff_grouping1.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|Z| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1>!+2#0000000#ff404010|A+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|A+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|B+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|B+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|C+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|C+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|A| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|B| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|B| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|C| @32
|
||||||
|
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|"+0&&|X|d|i|f|i|l|e|2|"| |8|L|,| |2|4|B| @56
|
20
src/testdir/dumps/Test_linematch_diff_grouping2.dump
Normal file
20
src/testdir/dumps/Test_linematch_diff_grouping2.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|A| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|Z| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|B| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|C| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1>!+2#0000000#ff404010|A+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|A+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|B+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|B+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|C+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|C+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|C| @32
|
||||||
|
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|"+0&&|X|d|i|f|i|l|e|2|"| |8|L|,| |2|4|B| @56
|
20
src/testdir/dumps/Test_linematch_diff_grouping_scroll0.dump
Normal file
20
src/testdir/dumps/Test_linematch_diff_grouping_scroll0.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|A| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|Z| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|B| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|C| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1>!+2#0000000#ff404010|A+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|A+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|B+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|B+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|C+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|C+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|C| @32
|
||||||
|
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|"+0&&|X|d|i|f|i|l|e|2|"| |8|L|,| |2|4|B| @56
|
20
src/testdir/dumps/Test_linematch_diff_grouping_scroll1.dump
Normal file
20
src/testdir/dumps/Test_linematch_diff_grouping_scroll1.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|C| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1>!+2#0000000#ff404010|A+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|A+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|B+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|B+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|!+2#0000000#ff404010|C+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|C+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|C| @32
|
||||||
|
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|8|,|1| @11|B|o|t
|
||||||
|
| +0&&@74
|
20
src/testdir/dumps/Test_linematch_diff_grouping_scroll2.dump
Normal file
20
src/testdir/dumps/Test_linematch_diff_grouping_scroll2.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1>!+2#0000000#ff404010|C+0&#ffd7ff255| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|?+2#0000000#ff404010|C+0&#ffd7ff255| @32
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|?+0#0000000#5fd7ff255|C| @32
|
||||||
|
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|3|,|1| @11|B|o|t| |X+1&&|d|i|f|i|l|e|2| @10|7|,|1| @11|B|o|t
|
||||||
|
| +0&&@74
|
20
src/testdir/dumps/Test_linematch_diff_iwhite1.dump
Normal file
20
src/testdir/dumps/Test_linematch_diff_iwhite1.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1>v+0#0000000#ffffff0|o|i|d| |t|e|s|t|F|u|n|c|t|i|o|n| |(|)| |{| @12||+1&&| +0#0000e05#a8a8a8255@1|v+0#0000000#ffffff0|o|i|d| |t|e|s|t|F|u|n|c|t|i|o|n| |(|)| |{| @12
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@1|f|o|r| |(|i|n|t| |i| |=| |0|;| |i| |<| |1|0|;| |i|+@1|)| |{| @2||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@1| +2&#ff404010@1|f|o|r| |(|i|n|t| |j| |=| |0|;| |j| |<| |1|0|;| |j|++0&#ffd7ff255@1|)| |{| ||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@1|/+2&#ff404010@1| |f|o|r| |(|i|n|t| |j| |=| |0|;| |j| |<| |1|0|;| |i|++0&#ffd7ff255@1|)| |{
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@1| +2&#ff404010| +0&#ffd7ff255|}| @29||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@1|/+2&#ff404010@1| +0&#ffd7ff255|}| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@1|}| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|"+0&&|X|d|i|f|i|l|e|2|"| |4|L|,| |6|8|B| @56
|
20
src/testdir/dumps/Test_linematch_diff_iwhite2.dump
Normal file
20
src/testdir/dumps/Test_linematch_diff_iwhite2.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1>v+0#0000000#ffffff0|o|i|d| |t|e|s|t|F|u|n|c|t|i|o|n| |(|)| |{| @12||+1&&| +0#0000e05#a8a8a8255@1|v+0#0000000#ffffff0|o|i|d| |t|e|s|t|F|u|n|c|t|i|o|n| |(|)| |{| @12
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@1|f|o|r| |(|i|n|t| |i| |=| |0|;| |i| |<| |1|0|;| |i|+@1|)| |{| @2||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@3|f+2&#ff404010|o|r| |(|i|n|t| |j| |=| |0|;| |j| |<| |1|0|;| |j|++0&#ffd7ff255@1|)| |{| ||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@1|/+2&#ff404010@1| |f|o|r| |(|i|n|t| |j| |=| |0|;| |j| |<| |1|0|;| |i|++0&#ffd7ff255@1|)| |{
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@3|}| @29||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@1|/+2&#ff404010@1| |}+0&#ffd7ff255| @28
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@1|}| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33
|
||||||
|
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||||
|
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|i|w|h|i|t|e|a|l@1| @51
|
20
src/testdir/dumps/Test_linematch_line_limit_exceeded1.dump
Normal file
20
src/testdir/dumps/Test_linematch_line_limit_exceeded1.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1>c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|H+2#0000000#ff404010|I|L| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|G+2#0000000#ff404010|H|I| +0&#ffd7ff255@31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|s+0#0000000#5fd7ff255|o|m|e|t|h|i|n|g| @25
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|A+2&#ff404010|B|C|a+0&#ffd7ff255|b|c| @27||+1&#ffffff0| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|D+2&#ff404010|E|F|a+0&#ffd7ff255|b|c| @27
|
||||||
|
| +0#0000e05#a8a8a8255@1|a+2#0000000#ff404010|A|B|C|a|b|c| +0&#ffd7ff255@27||+1&#ffffff0| +0#0000e05#a8a8a8255@1|x+2#0000000#ff404010|y|z| +0&#ffd7ff255@31
|
||||||
|
| +0#0000e05#a8a8a8255@1|a+2#0000000#ff404010|A|B|C|a|b|c| +0&#ffd7ff255@27||+1&#ffffff0| +0#0000e05#a8a8a8255@1|x+2#0000000#ff404010|y|z| +0&#ffd7ff255@31
|
||||||
|
| +0#0000e05#a8a8a8255@1|a+2#0000000#ff404010|A|B|C|a|b|c| +0&#ffd7ff255@27||+1&#ffffff0| +0#0000e05#a8a8a8255@1|x+2#0000000#ff404010|y|z| +0&#ffd7ff255@31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|a+0#0000000#5fd7ff255|D|E|F|a|b|c| @27
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|a+0#0000000#5fd7ff255|D|E|F|a|b|c| @27
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|a+0#0000000#5fd7ff255|D|E|F|a|b|c| @27
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|H+2#0000000#ff404010|I|L| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|G+2#0000000#ff404010|H|I| +0&#ffd7ff255@31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|s+0#0000000#5fd7ff255|o|m|e|t|h|i|n|g| |e|l|s|e| @20
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|X+3&&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|"+0&&|X|d|i|f|i|l|e|2|"| |1|8|L|,| |1|3|2|B| @54
|
20
src/testdir/dumps/Test_linematch_line_limit_exceeded2.dump
Normal file
20
src/testdir/dumps/Test_linematch_line_limit_exceeded2.dump
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1>c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|H+2#0000000#ff404010|I|L| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|G+2#0000000#ff404010|H|I| +0&#ffd7ff255@31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|s+0#0000000#5fd7ff255|o|m|e|t|h|i|n|g| @25
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
|
||||||
|
| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|A+2&#ff404010|B|C|a+0&#ffd7ff255|b|c| @27||+1&#ffffff0| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|D+2&#ff404010|E|F|a+0&#ffd7ff255|b|c| @27
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#5fd7ff255|y|z| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|A+2&#ff404010|B|C|a+0&#ffd7ff255|b|c| @27||+1&#ffffff0| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|D+2&#ff404010|E|F|a+0&#ffd7ff255|b|c| @27
|
||||||
|
| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|A+2&#ff404010|B|C|a+0&#ffd7ff255|b|c| @27||+1&#ffffff0| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|D+2&#ff404010|E|F|a+0&#ffd7ff255|b|c| @27
|
||||||
|
| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|A+2&#ff404010|B|C|a+0&#ffd7ff255|b|c| @27||+1&#ffffff0| +0#0000e05#a8a8a8255@1|a+0#0000000#ffd7ff255|D+2&#ff404010|E|F|a+0&#ffd7ff255|b|c| @27
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|D+0#0000000#5fd7ff255|E|F| @31
|
||||||
|
| +0#0000e05#a8a8a8255@1|H+2#0000000#ff404010|I|L| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|G+2#0000000#ff404010|H|I| +0&#ffd7ff255@31
|
||||||
|
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|s+0#0000000#5fd7ff255|o|m|e|t|h|i|n|g| |e|l|s|e| @20
|
||||||
|
| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|o|m@1|o|n| |l|i|n|e| @23
|
||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25||+1&&| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e|t|h|i|n|g| @25
|
||||||
|
|X+3&&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
|
||||||
|
|:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|l|i|n|e|m|a|t|c|h|:|3|0| @48
|
@ -1035,6 +1035,41 @@ func Test_diff_screen()
|
|||||||
call WriteDiffFiles(buf, [], [0])
|
call WriteDiffFiles(buf, [], [0])
|
||||||
call VerifyBoth(buf, "Test_diff_22", "")
|
call VerifyBoth(buf, "Test_diff_22", "")
|
||||||
|
|
||||||
|
call WriteDiffFiles(buf, ['?a', '?b', '?c'], ['!b'])
|
||||||
|
call VerifyInternal(buf, 'Test_diff_23', " diffopt+=linematch:30")
|
||||||
|
|
||||||
|
call WriteDiffFiles(buf, ['',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ '',
|
||||||
|
\ 'DEFabc',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'DEFabc',
|
||||||
|
\ 'DEFabc',
|
||||||
|
\ 'DEFabc',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'DEF',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'DEF',
|
||||||
|
\ 'something' ],
|
||||||
|
\ ['',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ '',
|
||||||
|
\ 'ABCabc',
|
||||||
|
\ 'ABCabc',
|
||||||
|
\ 'ABCabc',
|
||||||
|
\ 'ABCabc',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'something'])
|
||||||
|
call VerifyInternal(buf, 'Test_diff_24', " diffopt+=linematch:30")
|
||||||
|
|
||||||
|
|
||||||
" clean up
|
" clean up
|
||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
call delete('Xdifile1')
|
call delete('Xdifile1')
|
||||||
@ -2285,4 +2320,411 @@ func Test_diff_topline_noscroll()
|
|||||||
call term_sendkeys(buf, "\<C-W>p")
|
call term_sendkeys(buf, "\<C-W>p")
|
||||||
call term_wait(buf)
|
call term_wait(buf)
|
||||||
call VerifyScreenDump(buf, 'Test_diff_topline_4', {})
|
call VerifyScreenDump(buf, 'Test_diff_topline_4', {})
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_diffget_diffput_linematch()
|
||||||
|
CheckScreendump
|
||||||
|
call delete('.Xdifile1.swp')
|
||||||
|
call delete('.Xdifile2.swp')
|
||||||
|
call WriteDiffFiles(0, [], [])
|
||||||
|
let buf = RunVimInTerminal('-d Xdifile1 Xdifile2', {})
|
||||||
|
call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
|
||||||
|
|
||||||
|
" enable linematch
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=linematch:30\<CR>")
|
||||||
|
call WriteDiffFiles(buf, ['',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ '',
|
||||||
|
\ 'ABCabc',
|
||||||
|
\ 'ABCabc',
|
||||||
|
\ 'ABCabc',
|
||||||
|
\ 'ABCabc',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'something' ],
|
||||||
|
\ ['',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ '',
|
||||||
|
\ 'DEFabc',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'DEFabc',
|
||||||
|
\ 'DEFabc',
|
||||||
|
\ 'DEFabc',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'DEF',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'DEF',
|
||||||
|
\ 'something'])
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_1', {})
|
||||||
|
|
||||||
|
" get from window 1 from line 5 to 9
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, ":5,9diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_2', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" get from window 2 from line 5 to 10
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, ":5,10diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_3', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" get all from window 2
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, ":4,17diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_4', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" get all from window 1
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, ":4,12diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_5', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" get from window 1 using do 1 line 5
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "5gg")
|
||||||
|
call term_sendkeys(buf, ":diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_6', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" get from window 1 using do 2 line 6
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "6gg")
|
||||||
|
call term_sendkeys(buf, ":diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_7', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" get from window 1 using do 2 line 7
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "7gg")
|
||||||
|
call term_sendkeys(buf, ":diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_8', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" get from window 1 using do 2 line 11
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "11gg")
|
||||||
|
call term_sendkeys(buf, ":diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_9', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" get from window 1 using do 2 line 12
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "12gg")
|
||||||
|
call term_sendkeys(buf, ":diffget\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_10', {})
|
||||||
|
|
||||||
|
" undo the last diffget
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 1 using dp 1 line 5
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "5gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_11', {})
|
||||||
|
|
||||||
|
" undo the last diffput
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 1 using dp 2 line 6
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "6gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_12', {})
|
||||||
|
|
||||||
|
" undo the last diffput
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 1 using dp 2 line 7
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "7gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_13', {})
|
||||||
|
|
||||||
|
" undo the last diffput
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 1 using dp 2 line 11
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "11gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_14', {})
|
||||||
|
|
||||||
|
" undo the last diffput
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 1 using dp 2 line 12
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "12gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_15', {})
|
||||||
|
|
||||||
|
" undo the last diffput
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 2 using dp line 6
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "6gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_16', {})
|
||||||
|
|
||||||
|
" undo the last diffput
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 2 using dp line 8
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "8gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_17', {})
|
||||||
|
|
||||||
|
" undo the last diffput
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 2 using dp line 9
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "9gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_18', {})
|
||||||
|
|
||||||
|
" undo the last diffput
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "u")
|
||||||
|
|
||||||
|
" put from window 2 using dp line 17
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w")
|
||||||
|
call term_sendkeys(buf, "17gg")
|
||||||
|
call term_sendkeys(buf, ":diffput\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_diff_get_put_linematch_19', {})
|
||||||
|
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_linematch_diff()
|
||||||
|
CheckScreendump
|
||||||
|
call delete('.Xdifile1.swp')
|
||||||
|
call delete('.Xdifile2.swp')
|
||||||
|
call WriteDiffFiles(0, [], [])
|
||||||
|
let buf = RunVimInTerminal('-d Xdifile1 Xdifile2', {})
|
||||||
|
call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
|
||||||
|
|
||||||
|
" enable linematch
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=linematch:30\<CR>")
|
||||||
|
call WriteDiffFiles(buf, ['// abc d?',
|
||||||
|
\ '// d?',
|
||||||
|
\ '// d?' ],
|
||||||
|
\ ['!',
|
||||||
|
\ 'abc d!',
|
||||||
|
\ 'd!'])
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_diff1', {})
|
||||||
|
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_linematch_diff_iwhite()
|
||||||
|
CheckScreendump
|
||||||
|
call delete('.Xdifile1.swp')
|
||||||
|
call delete('.Xdifile2.swp')
|
||||||
|
call WriteDiffFiles(0, [], [])
|
||||||
|
let buf = RunVimInTerminal('-d Xdifile1 Xdifile2', {})
|
||||||
|
call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
|
||||||
|
|
||||||
|
" setup a diff with 2 files and set linematch:30, with ignore white
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=linematch:30\<CR>")
|
||||||
|
call WriteDiffFiles(buf, ['void testFunction () {',
|
||||||
|
\ ' for (int i = 0; i < 10; i++) {',
|
||||||
|
\ ' for (int j = 0; j < 10; j++) {',
|
||||||
|
\ ' }',
|
||||||
|
\ ' }',
|
||||||
|
\ '}' ],
|
||||||
|
\ ['void testFunction () {',
|
||||||
|
\ ' // for (int j = 0; j < 10; i++) {',
|
||||||
|
\ ' // }',
|
||||||
|
\ '}'])
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_diff_iwhite1', {})
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=iwhiteall\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_diff_iwhite2', {})
|
||||||
|
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_linematch_diff_grouping()
|
||||||
|
CheckScreendump
|
||||||
|
call delete('.Xdifile1.swp')
|
||||||
|
call delete('.Xdifile2.swp')
|
||||||
|
call WriteDiffFiles(0, [], [])
|
||||||
|
let buf = RunVimInTerminal('-d Xdifile1 Xdifile2', {})
|
||||||
|
call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
|
||||||
|
|
||||||
|
" a diff that would result in multiple groups before grouping optimization
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=linematch:30\<CR>")
|
||||||
|
call WriteDiffFiles(buf, ['!A',
|
||||||
|
\ '!B',
|
||||||
|
\ '!C' ],
|
||||||
|
\ ['?Z',
|
||||||
|
\ '?A',
|
||||||
|
\ '?B',
|
||||||
|
\ '?C',
|
||||||
|
\ '?A',
|
||||||
|
\ '?B',
|
||||||
|
\ '?B',
|
||||||
|
\ '?C'])
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_diff_grouping1', {})
|
||||||
|
call WriteDiffFiles(buf, ['!A',
|
||||||
|
\ '!B',
|
||||||
|
\ '!C' ],
|
||||||
|
\ ['?A',
|
||||||
|
\ '?Z',
|
||||||
|
\ '?B',
|
||||||
|
\ '?C',
|
||||||
|
\ '?A',
|
||||||
|
\ '?B',
|
||||||
|
\ '?C',
|
||||||
|
\ '?C'])
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_diff_grouping2', {})
|
||||||
|
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_linematch_diff_scroll()
|
||||||
|
CheckScreendump
|
||||||
|
call delete('.Xdifile1.swp')
|
||||||
|
call delete('.Xdifile2.swp')
|
||||||
|
call WriteDiffFiles(0, [], [])
|
||||||
|
let buf = RunVimInTerminal('-d Xdifile1 Xdifile2', {})
|
||||||
|
call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
|
||||||
|
|
||||||
|
" a diff that would result in multiple groups before grouping optimization
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=linematch:30\<CR>")
|
||||||
|
call WriteDiffFiles(buf, ['!A',
|
||||||
|
\ '!B',
|
||||||
|
\ '!C' ],
|
||||||
|
\ ['?A',
|
||||||
|
\ '?Z',
|
||||||
|
\ '?B',
|
||||||
|
\ '?C',
|
||||||
|
\ '?A',
|
||||||
|
\ '?B',
|
||||||
|
\ '?C',
|
||||||
|
\ '?C'])
|
||||||
|
" scroll down to show calculation of top fill and scroll to correct line in
|
||||||
|
" both windows
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_diff_grouping_scroll0', {})
|
||||||
|
call term_sendkeys(buf, "3\<c-e>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_diff_grouping_scroll1', {})
|
||||||
|
call term_sendkeys(buf, "3\<c-e>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_diff_grouping_scroll2', {})
|
||||||
|
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func Test_linematch_line_limit_exceeded()
|
||||||
|
CheckScreendump
|
||||||
|
call delete('.Xdifile1.swp')
|
||||||
|
call delete('.Xdifile2.swp')
|
||||||
|
call WriteDiffFiles(0, [], [])
|
||||||
|
let buf = RunVimInTerminal('-d Xdifile1 Xdifile2', {})
|
||||||
|
call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=linematch:10\<CR>")
|
||||||
|
" a diff block will not be aligned with linematch because it's contents
|
||||||
|
" exceed 10 lines
|
||||||
|
call WriteDiffFiles(buf,
|
||||||
|
\ ['common line',
|
||||||
|
\ 'HIL',
|
||||||
|
\ '',
|
||||||
|
\ 'aABCabc',
|
||||||
|
\ 'aABCabc',
|
||||||
|
\ 'aABCabc',
|
||||||
|
\ 'aABCabc',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'HIL',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'something'],
|
||||||
|
\ ['common line',
|
||||||
|
\ 'DEF',
|
||||||
|
\ 'GHI',
|
||||||
|
\ 'something',
|
||||||
|
\ '',
|
||||||
|
\ 'aDEFabc',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'xyz',
|
||||||
|
\ 'aDEFabc',
|
||||||
|
\ 'aDEFabc',
|
||||||
|
\ 'aDEFabc',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'DEF',
|
||||||
|
\ 'GHI',
|
||||||
|
\ 'something else',
|
||||||
|
\ 'common line',
|
||||||
|
\ 'something'])
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_line_limit_exceeded1', {})
|
||||||
|
" after increasing the count to 30, the limit is not exceeded, and the
|
||||||
|
" alignment algorithm will run on the largest diff block here
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=linematch:30\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_linematch_line_limit_exceeded2', {})
|
||||||
|
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_linematch_3diffs()
|
||||||
|
CheckScreendump
|
||||||
|
call delete('.Xdifile1.swp')
|
||||||
|
call delete('.Xdifile2.swp')
|
||||||
|
call delete('.Xdifile3.swp')
|
||||||
|
call WriteDiffFiles3(0, [], [], [])
|
||||||
|
let buf = RunVimInTerminal('-d Xdifile1 Xdifile2 Xdifile3', {})
|
||||||
|
call term_sendkeys(buf, "1\<c-w>w:set autoread\<CR>")
|
||||||
|
call term_sendkeys(buf, "2\<c-w>w:set autoread\<CR>")
|
||||||
|
call term_sendkeys(buf, "3\<c-w>w:set autoread\<CR>")
|
||||||
|
call term_sendkeys(buf, ":set diffopt+=linematch:30\<CR>")
|
||||||
|
call WriteDiffFiles3(buf,
|
||||||
|
\ ["",
|
||||||
|
\ " common line",
|
||||||
|
\ " AAA",
|
||||||
|
\ " AAA",
|
||||||
|
\ " AAA"],
|
||||||
|
\ ["",
|
||||||
|
\ " common line",
|
||||||
|
\ " <<<<<<< HEAD",
|
||||||
|
\ " AAA",
|
||||||
|
\ " AAA",
|
||||||
|
\ " AAA",
|
||||||
|
\ " =======",
|
||||||
|
\ " BBB",
|
||||||
|
\ " BBB",
|
||||||
|
\ " BBB",
|
||||||
|
\ " >>>>>>> branch1"],
|
||||||
|
\ ["",
|
||||||
|
\ " common line",
|
||||||
|
\ " BBB",
|
||||||
|
\ " BBB",
|
||||||
|
\ " BBB"])
|
||||||
call VerifyScreenDump(buf, 'Test_linematch_3diffs1', {})
|
call VerifyScreenDump(buf, 'Test_linematch_3diffs1', {})
|
||||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1009,
|
||||||
/**/
|
/**/
|
||||||
1008,
|
1008,
|
||||||
/**/
|
/**/
|
||||||
|
@ -1992,6 +1992,7 @@ typedef int sock_T;
|
|||||||
// Note that gui.h is included by structs.h
|
// Note that gui.h is included by structs.h
|
||||||
|
|
||||||
#include "structs.h" // defines many structures
|
#include "structs.h" // defines many structures
|
||||||
|
#include "xdiff/xdiff.h" // TODO: maybe remove this, but this brings in mmfile_t so it can compile
|
||||||
|
|
||||||
#include "alloc.h"
|
#include "alloc.h"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user