patch 8.2.2490: 'wrap' option is always reset when starting diff mode

Problem:    'wrap' option is always reset when starting diff mode.
Solution:   Add the "followwrap" item in 'diffopt'. (Rick Howe, closes #7797)
diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt
index 0b4edb9..566411a 100644
--- a/runtime/doc/diff.txt
+++ b/runtime/doc/diff.txt
@@ -59,7 +59,7 @@
 	'scrollbind'	on
 	'cursorbind'	on
 	'scrollopt'	includes "hor"
-	'wrap'		off
+	'wrap'		off, or leave as-is if 'diffopt' includes "followwrap"
 	'foldmethod'	"diff"
 	'foldcolumn'	value from 'diffopt', default is 2
 
@@ -144,7 +144,7 @@
 	'scrollbind'	off
 	'cursorbind'	off
 	'scrollopt'	without "hor"
-	'wrap'		on
+	'wrap'		on, or leave as-is if 'diffopt' includes "followwrap"
 	'foldmethod'	"manual"
 	'foldcolumn'	0
 
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 74bab42..f25b1ba 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -2677,6 +2677,8 @@
 		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
diff --git a/src/diff.c b/src/diff.c
index 753d089..0a0594c 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -36,6 +36,7 @@
 #define DIFF_HIDDEN_OFF	0x100	// diffoff when hidden
 #define DIFF_INTERNAL	0x200	// use internal xdiff algorithm
 #define DIFF_CLOSE_OFF	0x400	// diffoff when closing window
+#define DIFF_FOLLOWWRAP	0x800	// follow the wrap option
 #define ALL_WHITE_DIFF (DIFF_IWHITE | DIFF_IWHITEALL | DIFF_IWHITEEOL)
 static int	diff_flags = DIFF_INTERNAL | DIFF_FILLER | DIFF_CLOSE_OFF;
 
@@ -1454,9 +1455,12 @@
     if (!wp->w_p_diff)
 	wp->w_p_crb_save = wp->w_p_crb;
     wp->w_p_crb = TRUE;
-    if (!wp->w_p_diff)
-	wp->w_p_wrap_save = wp->w_p_wrap;
-    wp->w_p_wrap = FALSE;
+    if (!(diff_flags & DIFF_FOLLOWWRAP))
+    {
+        if (!wp->w_p_diff)
+	    wp->w_p_wrap_save = wp->w_p_wrap;
+        wp->w_p_wrap = FALSE;
+    }
 # ifdef FEAT_FOLDING
     if (!wp->w_p_diff)
     {
@@ -1517,8 +1521,11 @@
 		    wp->w_p_scb = wp->w_p_scb_save;
 		if (wp->w_p_crb)
 		    wp->w_p_crb = wp->w_p_crb_save;
-		if (!wp->w_p_wrap)
-		    wp->w_p_wrap = wp->w_p_wrap_save;
+		if (!(diff_flags & DIFF_FOLLOWWRAP))
+		{
+		    if (!wp->w_p_wrap)
+		        wp->w_p_wrap = wp->w_p_wrap_save;
+		}
 #ifdef FEAT_FOLDING
 		free_string_option(wp->w_p_fdm);
 		wp->w_p_fdm = vim_strsave(
@@ -2245,6 +2252,11 @@
 	    p += 8;
 	    diff_flags_new |= DIFF_CLOSE_OFF;
 	}
+	else if (STRNCMP(p, "followwrap", 10) == 0)
+	{
+	    p += 10;
+	    diff_flags_new |= DIFF_FOLLOWWRAP;
+	}
 	else if (STRNCMP(p, "indent-heuristic", 16) == 0)
 	{
 	    p += 16;
diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim
index 2d6228a..d09d741 100644
--- a/src/testdir/test_diffmode.vim
+++ b/src/testdir/test_diffmode.vim
@@ -1045,6 +1045,21 @@
   enew!
 endfunc
 
+func Test_diff_followwrap()
+  new
+  set diffopt+=followwrap
+  set wrap
+  diffthis
+  call assert_equal(1, &wrap)
+  diffoff
+  set nowrap
+  diffthis
+  call assert_equal(0, &wrap)
+  diffoff
+  set diffopt&
+  bwipe!
+endfunc
+
 func Test_diff_maintains_change_mark()
   enew!
   call setline(1, ['a', 'b', 'c', 'd'])
diff --git a/src/version.c b/src/version.c
index 18f0b84..382b923 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2490,
+/**/
     2489,
 /**/
     2488,