]> granicus.if.org Git - vim/commitdiff
patch 8.1.0393: not all white space difference options available v8.1.0393
authorBram Moolenaar <Bram@vim.org>
Sat, 15 Sep 2018 17:17:38 +0000 (19:17 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 15 Sep 2018 17:17:38 +0000 (19:17 +0200)
Problem:    Not all white space difference options available.
Solution:   Add "iblank", "iwhiteall" and "iwhiteeol" to 'diffopt'.

src/diff.c
src/testdir/dumps/Test_diff_17.dump [new file with mode: 0644]
src/testdir/dumps/Test_diff_18.dump [new file with mode: 0644]
src/testdir/dumps/Test_diff_19.dump [new file with mode: 0644]
src/testdir/dumps/Test_diff_20.dump [new file with mode: 0644]
src/testdir/test_diffmode.vim
src/version.c

index 0bf0ef2cfaa6b8a84f502beb60da461344b3de5f..149022a119a076b5085f468fc30a49c587caa9dc 100644 (file)
 static int     diff_busy = FALSE;      /* ex_diffgetput() is busy */
 
 /* flags obtained from the 'diffopt' option */
-#define DIFF_FILLER    1       // display filler lines
-#define DIFF_ICASE     2       // ignore case
-#define DIFF_IWHITE    4       // ignore change in white space
-#define DIFF_HORIZONTAL        8       // horizontal splits
-#define DIFF_VERTICAL  16      // vertical splits
-#define DIFF_HIDDEN_OFF        32      // diffoff when hidden
-#define DIFF_INTERNAL  64      // use internal xdiff algorithm
+#define DIFF_FILLER    0x001   // display filler lines
+#define DIFF_IBLANK    0x002   // ignore empty lines
+#define DIFF_ICASE     0x004   // ignore case
+#define DIFF_IWHITE    0x008   // ignore change in white space
+#define DIFF_IWHITEALL 0x010   // ignore all white space changes
+#define DIFF_IWHITEEOL 0x020   // ignore change in white space at EOL
+#define DIFF_HORIZONTAL        0x040   // horizontal splits
+#define DIFF_VERTICAL  0x080   // vertical splits
+#define DIFF_HIDDEN_OFF        0x100   // diffoff when hidden
+#define DIFF_INTERNAL  0x200   // use internal xdiff algorithm
+#define ALL_WHITE_DIFF (DIFF_IWHITE | DIFF_IWHITEALL | DIFF_IWHITEEOL)
 static int     diff_flags = DIFF_INTERNAL | DIFF_FILLER;
 
 static long diff_algorithm = 0;
@@ -1050,6 +1054,12 @@ diff_file_internal(diffio_T *diffio)
 
     if (diff_flags & DIFF_IWHITE)
        param.flags |= XDF_IGNORE_WHITESPACE_CHANGE;
+    if (diff_flags & DIFF_IWHITEALL)
+       param.flags |= XDF_IGNORE_WHITESPACE;
+    if (diff_flags & DIFF_IWHITEEOL)
+       param.flags |= XDF_IGNORE_WHITESPACE_AT_EOL;
+    if (diff_flags & DIFF_IBLANK)
+       param.flags |= XDF_IGNORE_BLANK_LINES;
 
     emit_cfg.ctxlen = 0; // don't need any diff_context here
     emit_cb.priv = &diffio->dio_diff;
@@ -1106,7 +1116,7 @@ diff_file(diffio_T *dio)
        // Build the diff command and execute it.  Always use -a, binary
        // differences are of no use.  Ignore errors, diff returns
        // non-zero when differences have been found.
-       vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s %s",
+       vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s%s%s%s %s",
                diff_a_works == FALSE ? "" : "-a ",
 #if defined(MSWIN)
                diff_bin_works == TRUE ? "--binary " : "",
@@ -1114,6 +1124,9 @@ diff_file(diffio_T *dio)
                "",
 #endif
                (diff_flags & DIFF_IWHITE) ? "-b " : "",
+               (diff_flags & DIFF_IWHITEALL) ? "-w " : "",
+               (diff_flags & DIFF_IWHITEEOL) ? "-Z " : "",
+               (diff_flags & DIFF_IBLANK) ? "-B " : "",
                (diff_flags & DIFF_ICASE) ? "-i " : "",
                tmp_orig, tmp_new);
        append_redir(cmd, (int)len, p_srr, tmp_diff);
@@ -1946,17 +1959,25 @@ diff_cmp(char_u *s1, char_u *s2)
     char_u     *p1, *p2;
     int                l;
 
-    if ((diff_flags & (DIFF_ICASE | DIFF_IWHITE)) == 0)
+    if ((diff_flags & DIFF_IBLANK)
+           && (*skipwhite(s1) == NUL || *skipwhite(s2) == NUL))
+       return 0;
+
+    if ((diff_flags & (DIFF_ICASE | ALL_WHITE_DIFF)) == 0)
        return STRCMP(s1, s2);
-    if ((diff_flags & DIFF_ICASE) && !(diff_flags & DIFF_IWHITE))
+    if ((diff_flags & DIFF_ICASE) && !(diff_flags & ALL_WHITE_DIFF))
        return MB_STRICMP(s1, s2);
 
-    /* Ignore white space changes and possibly ignore case. */
     p1 = s1;
     p2 = s2;
+
+    // Ignore white space changes and possibly ignore case.
     while (*p1 != NUL && *p2 != NUL)
     {
-       if (VIM_ISWHITE(*p1) && VIM_ISWHITE(*p2))
+       if (((diff_flags & DIFF_IWHITE)
+                   && VIM_ISWHITE(*p1) && VIM_ISWHITE(*p2))
+               || ((diff_flags & DIFF_IWHITEALL)
+                   && (VIM_ISWHITE(*p1) || VIM_ISWHITE(*p2))))
        {
            p1 = skipwhite(p1);
            p2 = skipwhite(p2);
@@ -1970,7 +1991,7 @@ diff_cmp(char_u *s1, char_u *s2)
        }
     }
 
-    /* Ignore trailing white space. */
+    // Ignore trailing white space.
     p1 = skipwhite(p1);
     p2 = skipwhite(p2);
     if (*p1 != NUL || *p2 != NUL)
@@ -2142,11 +2163,26 @@ diffopt_changed(void)
            p += 8;
            diff_context_new = getdigits(&p);
        }
+       else if (STRNCMP(p, "iblank", 6) == 0)
+       {
+           p += 6;
+           diff_flags_new |= DIFF_IBLANK;
+       }
        else if (STRNCMP(p, "icase", 5) == 0)
        {
            p += 5;
            diff_flags_new |= DIFF_ICASE;
        }
+       else if (STRNCMP(p, "iwhiteall", 9) == 0)
+       {
+           p += 9;
+           diff_flags_new |= DIFF_IWHITEALL;
+       }
+       else if (STRNCMP(p, "iwhiteeol", 9) == 0)
+       {
+           p += 9;
+           diff_flags_new |= DIFF_IWHITEEOL;
+       }
        else if (STRNCMP(p, "iwhite", 6) == 0)
        {
            p += 6;
@@ -2315,9 +2351,12 @@ diff_find_change(
            si_org = si_new = 0;
            while (line_org[si_org] != NUL)
            {
-               if ((diff_flags & DIFF_IWHITE)
-                       && VIM_ISWHITE(line_org[si_org])
-                       && VIM_ISWHITE(line_new[si_new]))
+               if (((diff_flags & DIFF_IWHITE)
+                           && VIM_ISWHITE(line_org[si_org])
+                                             && VIM_ISWHITE(line_new[si_new]))
+                       || ((diff_flags & DIFF_IWHITEALL)
+                           && (VIM_ISWHITE(line_org[si_org])
+                                           || VIM_ISWHITE(line_new[si_new]))))
                {
                    si_org = (int)(skipwhite(line_org + si_org) - line_org);
                    si_new = (int)(skipwhite(line_new + si_new) - line_new);
@@ -2351,9 +2390,12 @@ diff_find_change(
                while (ei_org >= *startp && ei_new >= si_new
                                                && ei_org >= 0 && ei_new >= 0)
                {
-                   if ((diff_flags & DIFF_IWHITE)
-                           && VIM_ISWHITE(line_org[ei_org])
-                           && VIM_ISWHITE(line_new[ei_new]))
+                   if (((diff_flags & DIFF_IWHITE)
+                               && VIM_ISWHITE(line_org[ei_org])
+                                             && VIM_ISWHITE(line_new[ei_new]))
+                           || ((diff_flags & DIFF_IWHITEALL)
+                               && (VIM_ISWHITE(line_org[ei_org])
+                                           || VIM_ISWHITE(line_new[ei_new]))))
                    {
                        while (ei_org >= *startp
                                             && VIM_ISWHITE(line_org[ei_org]))
diff --git a/src/testdir/dumps/Test_diff_17.dump b/src/testdir/dumps/Test_diff_17.dump
new file mode 100644 (file)
index 0000000..101df35
--- /dev/null
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
+| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32
+| +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
+| +0#0000e05#a8a8a8255@1|x+2#0000000#ff404010@2| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|y+2#0000000#ff404010@2| +0&#ffd7ff255@31
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+|X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
+|:+0&&> @73
diff --git a/src/testdir/dumps/Test_diff_18.dump b/src/testdir/dumps/Test_diff_18.dump
new file mode 100644 (file)
index 0000000..7f17531
--- /dev/null
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32
+| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
+| +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32||+1&&| +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32
+| +0#0000e05#a8a8a8255@1|x+2#0000000#ff404010@2| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|y+2#0000000#ff404010@2| +0&#ffd7ff255@31
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+|X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
+|:+0&&> @73
diff --git a/src/testdir/dumps/Test_diff_19.dump b/src/testdir/dumps/Test_diff_19.dump
new file mode 100644 (file)
index 0000000..f2d0611
--- /dev/null
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|c+0#0000000#ffd7ff255|d| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|c+0#0000000#ffd7ff255| +2&#ff404010|d+0&#ffd7ff255| @31
+| +0#0000e05#a8a8a8255@1|e+0#0000000#ffd7ff255|f| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +2#0000000#ff404010|e+0&#ffd7ff255|f| @31
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffd7ff255@1| | +2&#ff404010|x+0&#ffd7ff255@1| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#ffd7ff255@1| |x@1| @29
+| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
+| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34
+| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+|X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
+|:+0&&> @73
diff --git a/src/testdir/dumps/Test_diff_20.dump b/src/testdir/dumps/Test_diff_20.dump
new file mode 100644 (file)
index 0000000..1dbd07c
--- /dev/null
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0| |d| @31
+| +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0|e|f| @31
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@1| @1|x@1| @28||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@1| |x@1| @29
+| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
+| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34
+| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+|X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
+|:+0&&> @73
index 0022a73b3ff91cdfacb79d9cfe67b189badd0962..5ee22e25cde55c5205a4f8e4a9ced8de03a5d6a2 100644 (file)
@@ -671,16 +671,18 @@ func Test_diff_lastline()
   bwipe!
 endfunc
 
-func WriteDiffFiles(list1, list2)
+func WriteDiffFiles(buf, list1, list2)
   call writefile(a:list1, 'Xfile1')
   call writefile(a:list2, 'Xfile2')
+  if a:buf
+    call term_sendkeys(a:buf, ":checktime\<CR>")
+  endif
 endfunc
 
-" Verify a screendump with both the external and external diff.
+" Verify a screendump with both the internal and external diff.
 func VerifyBoth(buf, dumpfile, extra)
-  call term_sendkeys(a:buf, ":diffupdate!\<cr>")
   " trailing : for leaving the cursor on the command line
-  for cmd in [":set diffopt=filler" . a:extra . "\<cr>:", ":set diffopt+=internal\<cr>:"]
+  for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"]
     call term_sendkeys(a:buf, cmd)
     if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
       break " don't let the next iteration overwrite the "failed" file.
@@ -688,6 +690,14 @@ func VerifyBoth(buf, dumpfile, extra)
   endfor
 endfunc
 
+" Verify a screendump with the internal diff only.
+func VerifyInternal(buf, dumpfile, extra)
+  call term_sendkeys(a:buf, ":diffupdate!\<CR>")
+  " trailing : for leaving the cursor on the command line
+  call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:")
+  call VerifyScreenDump(a:buf, a:dumpfile, {})
+endfunc
+
 func Test_diff_screen()
   if !CanRunVimInTerminal() || !has('menu')
     return
@@ -697,36 +707,36 @@ func Test_diff_screen()
   call delete('.Xfile2.swp')
 
   " Test 1: Add a line in beginning of file 2
-  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+  call WriteDiffFiles(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
   let buf = RunVimInTerminal('-d Xfile1 Xfile2', {})
   " Set autoread mode, ,so that Vim won't complain once we re-write the test
   " files
-  call term_sendkeys(buf, ":set autoread\<cr>\<c-w>w:set autoread\<cr>\<c-w>w")
+  call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
 
   call VerifyBoth(buf, 'Test_diff_01', '')
 
   " Test 2: Add a line in beginning of file 1
-  call WriteDiffFiles([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+  call WriteDiffFiles(buf, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
   call VerifyBoth(buf, 'Test_diff_02', '')
 
   " Test 3: Add a line at the end of file 2
-  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
+  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
   call VerifyBoth(buf, 'Test_diff_03', '')
 
   " Test 4: Add a line at the end of file 1
-  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
   call VerifyBoth(buf, 'Test_diff_04', '')
 
   " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
-  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10])
+  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10])
   call VerifyBoth(buf, 'Test_diff_05', '')
 
   " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
-  call WriteDiffFiles([1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
+  call WriteDiffFiles(buf, [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
   call VerifyBoth(buf, 'Test_diff_06', '')
 
   " Test 7 - 9: Test normal/patience/histogram diff algorithm
-  call WriteDiffFiles(['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
+  call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
       \ '    int i;', '    for(i = 0; i < 10; i++)', '    {', '        printf("Your answer is: ");',
       \ '        printf("%d\n", foo);', '    }', '}', '', 'int fact(int n)', '{', '    if(n > 1)', '    {',
       \ '        return fact(n-1) * n;', '    }', '    return 1;', '}', '', 'int main(int argc, char **argv)',
@@ -748,7 +758,7 @@ func Test_diff_screen()
 
   " Test 10-11: normal/indent-heuristic
   call term_sendkeys(buf, ":set diffopt&vim\<cr>")
-  call WriteDiffFiles(['', '  def finalize(values)', '', '    values.each do |v|', '      v.finalize', '    end'],
+  call WriteDiffFiles(buf, ['', '  def finalize(values)', '', '    values.each do |v|', '      v.finalize', '    end'],
       \ ['', '  def finalize(values)', '', '    values.each do |v|', '      v.prepare', '    end', '',
       \ '    values.each do |v|', '      v.finalize', '    end'])
   call term_sendkeys(buf, ":diffupdate!\<cr>")
@@ -759,19 +769,19 @@ func Test_diff_screen()
   call VerifyScreenDump(buf, 'Test_diff_11', {})
 
   " Test 12: diff the same file
-  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
   call VerifyBoth(buf, 'Test_diff_12', '')
 
   " Test 13: diff an empty file
-  call WriteDiffFiles([], [])
+  call WriteDiffFiles(buf, [], [])
   call VerifyBoth(buf, 'Test_diff_13', '')
 
   " Test 14: test diffopt+=icase
-  call WriteDiffFiles(['a', 'b', 'cd'], ['A', 'b', 'cDe'])
+  call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe'])
   call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
 
   " Test 15-16: test diffopt+=iwhite
-  call WriteDiffFiles(['int main()', '{', '   printf("Hello, World!");', '   return 0;', '}'],
+  call WriteDiffFiles(buf, ['int main()', '{', '   printf("Hello, World!");', '   return 0;', '}'],
       \ ['int main()', '{', '   if (0)', '   {', '      printf("Hello, World!");', '      return 0;', '   }', '}'])
   call term_sendkeys(buf, ":diffupdate!\<cr>")
   call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
@@ -779,6 +789,22 @@ func Test_diff_screen()
   call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
   call VerifyScreenDump(buf, 'Test_diff_16', {})
 
+  " Test 17: test diffopt+=iblank
+  call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy'])
+  call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank")
+
+  " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol
+  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite")
+  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall")
+  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol")
+
+  " Test 19: test diffopt+=iwhiteeol
+  call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx  xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar'])
+  call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol")
+
+  " Test 19: test diffopt+=iwhiteall
+  call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall")
+
   " clean up
   call StopVimInTerminal(buf)
   call delete('Xfile1')
index d04bdab682b935e733e1899b5da85b9d3a3834b1..13b8aedce9e4231ba2ab3e1ce0a17f98fdae8861 100644 (file)
@@ -794,6 +794,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    393,
 /**/
     392,
 /**/