Eric Sunshine <sunshine@xxxxxxxxxxxxxx> writes: > On Mon, Aug 5, 2024 at 8:36 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: >> Imagine seeing your command failing with "too many arguments" when >> you run "git cmd foo bar baz". Can you tell it will work if you >> said "git cmd foo bar"? Or is that trimming your command line too >> much? Too little? >> >> Instead, if the command reports "unknown argument: 'bar'", you'd know >> that "bar" and everything after it is unwanted. >> >> Let's make it so for a few remaining commands. >> >> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> >> --- >> diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c >> @@ -2503,7 +2503,8 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix) >> if (argc > 1) >> - usage_msg_opt(_("too many arguments"), receive_pack_usage, options); >> + usage_msg_optf(_("unknown argument: '%s'"), >> + receive_pack_usage, options, argv[0]); > > Is this supposed to be referencing `argv[1]` rather than `argv[0]`... You are right. To the command, the first argument is acceptable, and the unexpected ones are the second and later ones, so argv[1] is what it should have said. > >> diff --git a/builtin/tag.c b/builtin/tag.c >> @@ -641,7 +641,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix) >> if (argc > 2) >> - die(_("too many arguments")); >> + die(_("unknown argument: '%s'"), argv[2]); > > ...similar to how this references `argv[2]` when the condition is `argc > 2`? Yes.