Re: add non-option reordering to in-tree getopt_long

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>, noah@leadboat.com, pgsql-hackers@postgresql.org
Date: 2023-07-14T05:02:28Z
Lists: pgsql-hackers
On Thu, Jul 13, 2023 at 09:38:42PM -0700, Nathan Bossart wrote:
> I did notice this, but I had the opposite reaction.

Ahah, well ;)

> Take the following examples of client programs that accept one non-option:
> 
> 	~$ pg_resetwal a b c
> 	pg_resetwal: error: too many command-line arguments (first is "b")
> 	pg_resetwal: hint: Try "pg_resetwal --help" for more information.
> 
> Yet pg_ctl gives:
> 
> 	~$ pg_ctl start a b c
> 	pg_ctl: too many command-line arguments (first is "start")
> 	Try "pg_ctl --help" for more information.
> 
> In this example, isn't "a" the first extra non-option that should be
> reported?

Good point.  This is interpreting "first" as being the first option
that's invalid.  Here my first impression was that pg_ctl got that
right, where "first" refers to the first subcommand that would be
valid.  Objection withdrawn.
--
Michael

Commits

  1. Simplify option handling in pg_ctl.

  2. Teach in-tree getopt_long() to move non-options to the end of argv.