patch 8.2.2851: using <Cmd> mapping on the command line triggers CmdlineChanged

Problem:    Using <Cmd> mapping on the command line triggers CmdlineChanged.
            (Naohiro Ono)
Solution:   Jump to cmdline_not_changed if the command line didn't change.
            (closes #8208)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index a9f33e6..e87b208 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1757,9 +1757,17 @@
 	    c = safe_vgetc();
 	} while (c == K_IGNORE || c == K_NOP);
 
-	if (c == K_COMMAND
-		   && do_cmdline(NULL, getcmdkeycmd, NULL, DOCMD_NOWAIT) == OK)
-	    goto cmdline_changed;
+	if (c == K_COMMAND)
+	{
+	    int	    clen = ccline.cmdlen;
+
+	    if (do_cmdline(NULL, getcmdkeycmd, NULL, DOCMD_NOWAIT) == OK)
+	    {
+		if (clen == ccline.cmdlen)
+		    goto cmdline_not_changed;
+		goto cmdline_changed;
+	    }
+	}
 
 	if (KeyTyped)
 	{
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 7df80b0..5ed283f 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -1799,4 +1799,23 @@
   cunmap <Plug>(save-cmdline)
 endfunc
 
+func Test_cmd_map_cmdlineChanged()
+  let g:log = []
+  cnoremap <F1> l<Cmd><CR>s
+  augroup test
+    autocmd!
+    autocmd CmdlineChanged : let g:log += [getcmdline()]
+  augroup END
+
+  call feedkeys(":\<F1>\<CR>", 'xt')
+  call assert_equal(['l', 'ls'], g:log)
+
+  unlet g:log
+  cunmap <F1>
+  augroup test
+    autocmd!
+  augroup END
+endfunc
+
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 83c773f..0d3c2ad 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2851,
+/**/
     2850,
 /**/
     2849,