diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
index 122f0b59f5f027d2e06455b2b8fa6271c5aa5368_bWVyY3VyaWFsL2Rpc3BhdGNoLnB5..ca39c45014fa41241e572fb889a00d03fd02b26c_bWVyY3VyaWFsL2Rpc3BhdGNoLnB5 100644
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -1058,5 +1058,5 @@
         req.canonical_command = cmd
 
         if options[b"config"] != req.earlyoptions[b"config"]:
-            raise error.Abort(_(b"option --config may not be abbreviated!"))
+            raise error.Abort(_(b"option --config may not be abbreviated"))
         if options[b"cwd"] != req.earlyoptions[b"cwd"]:
@@ -1062,6 +1062,6 @@
         if options[b"cwd"] != req.earlyoptions[b"cwd"]:
-            raise error.Abort(_(b"option --cwd may not be abbreviated!"))
+            raise error.Abort(_(b"option --cwd may not be abbreviated"))
         if options[b"repository"] != req.earlyoptions[b"repository"]:
             raise error.Abort(
                 _(
                     b"option -R has to be separated from other options (e.g. not "
@@ -1064,8 +1064,8 @@
         if options[b"repository"] != req.earlyoptions[b"repository"]:
             raise error.Abort(
                 _(
                     b"option -R has to be separated from other options (e.g. not "
-                    b"-qR) and --repository may only be abbreviated as --repo!"
+                    b"-qR) and --repository may only be abbreviated as --repo"
                 )
             )
         if options[b"debugger"] != req.earlyoptions[b"debugger"]:
@@ -1069,7 +1069,7 @@
                 )
             )
         if options[b"debugger"] != req.earlyoptions[b"debugger"]:
-            raise error.Abort(_(b"option --debugger may not be abbreviated!"))
+            raise error.Abort(_(b"option --debugger may not be abbreviated"))
         # don't validate --profile/--traceback, which can be enabled from now
 
         if options[b"encoding"]:
diff --git a/tests/test-dispatch.t b/tests/test-dispatch.t
index 122f0b59f5f027d2e06455b2b8fa6271c5aa5368_dGVzdHMvdGVzdC1kaXNwYXRjaC50..ca39c45014fa41241e572fb889a00d03fd02b26c_dGVzdHMvdGVzdC1kaXNwYXRjaC50 100644
--- a/tests/test-dispatch.t
+++ b/tests/test-dispatch.t
@@ -62,10 +62,10 @@
 Unparsable form of early options:
 
   $ hg cat --debugg
-  abort: option --debugger may not be abbreviated!
+  abort: option --debugger may not be abbreviated
   [255]
 
 Parsing failure of early options should be detected before executing the
 command:
 
   $ hg log -b '--config=hooks.pre-log=false' default
@@ -66,9 +66,9 @@
   [255]
 
 Parsing failure of early options should be detected before executing the
 command:
 
   $ hg log -b '--config=hooks.pre-log=false' default
-  abort: option --config may not be abbreviated!
+  abort: option --config may not be abbreviated
   [255]
   $ hg log -b -R. default
@@ -73,5 +73,5 @@
   [255]
   $ hg log -b -R. default
-  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo
   [255]
   $ hg log --cwd .. -b --cwd=. default
@@ -76,6 +76,6 @@
   [255]
   $ hg log --cwd .. -b --cwd=. default
-  abort: option --cwd may not be abbreviated!
+  abort: option --cwd may not be abbreviated
   [255]
 
 However, we can't prevent it from loading extensions and configs:
@@ -85,7 +85,7 @@
   > EOF
   $ hg log -b '--config=extensions.bad=bad.py' default
   *** failed to import extension bad from bad.py: bad
-  abort: option --config may not be abbreviated!
+  abort: option --config may not be abbreviated
   [255]
 
   $ mkdir -p badrepo/.hg
@@ -113,7 +113,7 @@
   [255]
 
   $ hg log -b '--config=defaults.log=--config=hooks.pre-log=false'
-  abort: option --config may not be abbreviated!
+  abort: option --config may not be abbreviated
   [255]
 
 Shell aliases bypass any command parsing rules but for the early one:
@@ -143,6 +143,6 @@
   [255]
 
   $ HGPLAIN=+strictflags hg log --config='hooks.pre-log=false' -b default
-  abort: option --config may not be abbreviated!
+  abort: option --config may not be abbreviated
   [255]
   $ HGPLAIN=+strictflags hg log -q --cwd=.. -b default
@@ -147,5 +147,5 @@
   [255]
   $ HGPLAIN=+strictflags hg log -q --cwd=.. -b default
-  abort: option --cwd may not be abbreviated!
+  abort: option --cwd may not be abbreviated
   [255]
   $ HGPLAIN=+strictflags hg log -q -R . -b default
@@ -150,6 +150,6 @@
   [255]
   $ HGPLAIN=+strictflags hg log -q -R . -b default
-  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo
   [255]
 
   $ HGPLAIN=+strictflags hg --config='hooks.pre-log=false' log -b default
diff --git a/tests/test-globalopts.t b/tests/test-globalopts.t
index 122f0b59f5f027d2e06455b2b8fa6271c5aa5368_dGVzdHMvdGVzdC1nbG9iYWxvcHRzLnQ=..ca39c45014fa41241e572fb889a00d03fd02b26c_dGVzdHMvdGVzdC1nbG9iYWxvcHRzLnQ= 100644
--- a/tests/test-globalopts.t
+++ b/tests/test-globalopts.t
@@ -134,6 +134,6 @@
 earlygetopt with illegal abbreviations:
 
   $ hg --confi "foo.bar=baz"
-  abort: option --config may not be abbreviated!
+  abort: option --config may not be abbreviated
   [255]
   $ hg --cw a tip
@@ -138,5 +138,5 @@
   [255]
   $ hg --cw a tip
-  abort: option --cwd may not be abbreviated!
+  abort: option --cwd may not be abbreviated
   [255]
   $ hg --rep a tip
@@ -141,5 +141,5 @@
   [255]
   $ hg --rep a tip
-  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo
   [255]
   $ hg --repositor a tip
@@ -144,5 +144,5 @@
   [255]
   $ hg --repositor a tip
-  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo
   [255]
   $ hg -qR a tip
@@ -147,5 +147,5 @@
   [255]
   $ hg -qR a tip
-  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo
   [255]
   $ hg -qRa tip
@@ -150,6 +150,6 @@
   [255]
   $ hg -qRa tip
-  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+  abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo
   [255]
 
 Testing --cwd: