diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -2783,6 +2783,7 @@
 
 
 def amend(ui, repo, old, extra, pats, opts):
+    opts = pycompat.byteskwargs(opts)
     # avoid cycle context -> subrepo -> cmdutil
     from . import context
 
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2135,8 +2135,8 @@
         if not obsolete.isenabled(repo, obsolete.createmarkersopt):
             cmdutil.checkunfinished(repo)
 
+        node = cmdutil.amend(ui, repo, old, extra, pats, opts)
         opts = pycompat.byteskwargs(opts)
-        node = cmdutil.amend(ui, repo, old, extra, pats, opts)
         if node == old.node():
             ui.status(_(b"nothing changed\n"))
             return 1
diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t
--- a/tests/test-obsolete.t
+++ b/tests/test-obsolete.t
@@ -1478,9 +1478,8 @@
   > command = registrar.command(cmdtable)
   > @command(b"amendtransient",[], _(b'hg amendtransient [rev]'))
   > def amend(ui, repo, *pats, **opts):
-  >   opts = pycompat.byteskwargs(opts)
-  >   opts[b'message'] = b'Test'
-  >   opts[b'logfile'] = None
+  >   opts['message'] = b'Test'
+  >   opts['logfile'] = None
   >   cmdutil.amend(ui, repo, repo[b'.'], {}, pats, opts)
   >   ui.write(b'%s\n' % stringutil.pprint(repo.changelog.headrevs()))
   > EOF