# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@octobus.net>
# Date 1732796551 -3600
#      Thu Nov 28 13:22:31 2024 +0100
# Node ID 8faabe8abf66c752a30a86d59b115f9a91d33a8b
# Parent  0b52283d50bb14942e8a47414dc24845b63e4dae
graft: gather arg compatibility code

Lets do it all in one place and at the start, this is easier to maintain
consistently.

We also take this as an opportunity to do this before we resolve commit options,
that so user do not get error about "--date" when they actually they specified
the "--current-date" argument.

diff --git a/mercurial/cmd_impls/graft.py b/mercurial/cmd_impls/graft.py
--- a/mercurial/cmd_impls/graft.py
+++ b/mercurial/cmd_impls/graft.py
@@ -44,49 +44,28 @@
     # list of new nodes created by ongoing graft
     statedata[b'newnodes'] = []
 
-    cmdutil.resolve_commit_options(ui, opts)
+    # argument incompatible with followup from an interrupted operation
+    commit_args = ['edit', 'log', 'user', 'date', 'currentdate', 'currentuser']
+    nofollow_args = commit_args + ['rev']
 
+    arg_compatibilities = [
+        ('no_commit', commit_args),
+        ('stop', nofollow_args),
+        ('abort', nofollow_args),
+    ]
     cmdutil.check_at_most_one_arg(opts, 'abort', 'stop', 'continue')
+    for arg, incompatible in arg_compatibilities:
+        cmdutil.check_incompatible_arguments(opts, arg, incompatible)
+
+    cmdutil.resolve_commit_options(ui, opts)
 
     cont = False
-    if opts.get('no_commit'):
-        cmdutil.check_incompatible_arguments(
-            opts,
-            'no_commit',
-            ['edit', 'currentuser', 'currentdate', 'log'],
-        )
 
     graftstate = statemod.cmdstate(repo, b'graftstate')
 
     if opts.get('stop'):
-        cmdutil.check_incompatible_arguments(
-            opts,
-            'stop',
-            [
-                'edit',
-                'log',
-                'user',
-                'date',
-                'currentdate',
-                'currentuser',
-                'rev',
-            ],
-        )
         return "STOP", graftstate, None
     elif opts.get('abort'):
-        cmdutil.check_incompatible_arguments(
-            opts,
-            'abort',
-            [
-                'edit',
-                'log',
-                'user',
-                'date',
-                'currentdate',
-                'currentuser',
-                'rev',
-            ],
-        )
         return "ABORT", graftstate, None
     elif opts.get('continue'):
         cont = True
diff --git a/tests/test-graft-interrupted.t b/tests/test-graft-interrupted.t
--- a/tests/test-graft-interrupted.t
+++ b/tests/test-graft-interrupted.t
@@ -253,7 +253,7 @@
   [10]
 
   $ hg graft --stop -U
-  abort: cannot specify both --stop and --user
+  abort: cannot specify both --stop and --currentuser
   [10]
   $ hg graft --stop --rev 4
   abort: cannot specify both --stop and --rev
@@ -363,7 +363,7 @@
   [10]
 
   $ hg graft --abort --currentuser
-  abort: cannot specify both --abort and --user
+  abort: cannot specify both --abort and --currentuser
   [10]
 
   $ hg graft --abort --edit