patch 8.1.0573: cannot redefine user command without ! in same script

Problem:    Cannot redefine user command without ! in same script
Solution:   Allow redefining user command without ! in same script, like with
            functions.
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 9040c0d..99a06fc 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5869,9 +5869,13 @@
 
 	if (cmp == 0)
 	{
-	    if (!force)
+	    // Command can be replaced with "command!" and when sourcing the
+	    // same script again, but only once.
+	    if (!force && (cmd->uc_script_ctx.sc_sid != current_sctx.sc_sid
+			  || cmd->uc_script_ctx.sc_seq == current_sctx.sc_seq))
 	    {
-		EMSG(_("E174: Command already exists: add ! to replace it"));
+		EMSG2(_("E174: Command already exists: add ! to replace it: %s"),
+									 name);
 		goto fail;
 	    }
 
diff --git a/src/testdir/test_usercommands.vim b/src/testdir/test_usercommands.vim
index 2709988..06b0a67 100644
--- a/src/testdir/test_usercommands.vim
+++ b/src/testdir/test_usercommands.vim
@@ -90,6 +90,34 @@
   delcommand Dothat
 endfunc
 
+func Test_redefine_on_reload()
+  call writefile(['command ExistingCommand echo "yes"'], 'Xcommandexists')
+  call assert_equal(0, exists(':ExistingCommand'))
+  source Xcommandexists
+  call assert_equal(2, exists(':ExistingCommand'))
+  " Redefining a command when reloading a script is OK.
+  source Xcommandexists
+  call assert_equal(2, exists(':ExistingCommand'))
+
+  " But redefining in another script is not OK.
+  call writefile(['command ExistingCommand echo "yes"'], 'Xcommandexists2')
+  call assert_fails('source Xcommandexists2', 'E174:')
+  call delete('Xcommandexists2')
+
+  " And defining twice in one script is not OK.
+  delcommand ExistingCommand
+  call assert_equal(0, exists(':ExistingCommand'))
+  call writefile([
+	\ 'command ExistingCommand echo "yes"',
+	\ 'command ExistingCommand echo "no"',
+	\ ], 'Xcommandexists')
+  call assert_fails('source Xcommandexists', 'E174:')
+  call assert_equal(2, exists(':ExistingCommand'))
+
+  call delete('Xcommandexists')
+  delcommand ExistingCommand
+endfunc
+
 func Test_CmdUndefined()
   call assert_fails('Doit', 'E492:')
   au CmdUndefined Doit :command Doit let g:didit = 'yes'
diff --git a/src/version.c b/src/version.c
index 9311bc5..880a510 100644
--- a/src/version.c
+++ b/src/version.c
@@ -793,6 +793,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    573,
+/**/
     572,
 /**/
     571,