mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Teach in-tree getopt_long() to move non-options to the end of argv.
Unlike the other implementations of getopt_long() I could find, the in-tree implementation does not reorder non-options to the end of argv. Instead, it returns -1 as soon as the first non-option is found, even if there are other options listed afterwards. By moving non-options to the end of argv, getopt_long() can parse all specified options and return -1 when only non-options remain. This quirk is periodically missed by hackers (e.g.,869aa40a27
,ffd398021c
, andd9ddc50baf
). This commit introduces the aforementioned non-option reordering behavior to the in-tree getopt_long() implementation. Special thanks to Noah Misch for his help verifying behavior on AIX. Reviewed-by: Kyotaro Horiguchi, Michael Paquier Discussion: https://postgr.es/m/20230609232257.GA121461%40nathanxps13
This commit is contained in:
@ -42,9 +42,8 @@ $node->issues_sql_like(
|
||||
'add a role as a member with admin option of the newly created role');
|
||||
$node->issues_sql_like(
|
||||
[
|
||||
'createuser', '-m',
|
||||
'regress_user3', '-m',
|
||||
'regress user #4', 'REGRESS_USER5'
|
||||
'createuser', 'REGRESS_USER5', '-m', 'regress_user3',
|
||||
'-m', 'regress user #4'
|
||||
],
|
||||
qr/statement: CREATE ROLE "REGRESS_USER5" NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS ROLE regress_user3,"regress user #4";/,
|
||||
'add a role as a member of the newly created role');
|
||||
@ -73,11 +72,14 @@ $node->issues_sql_like(
|
||||
qr/statement: CREATE ROLE regress_user11 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS IN ROLE regress_user1;/,
|
||||
'--role');
|
||||
$node->issues_sql_like(
|
||||
[ 'createuser', '--member-of', 'regress_user1', 'regress_user12' ],
|
||||
[ 'createuser', 'regress_user12', '--member-of', 'regress_user1' ],
|
||||
qr/statement: CREATE ROLE regress_user12 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS IN ROLE regress_user1;/,
|
||||
'--member-of');
|
||||
|
||||
$node->command_fails([ 'createuser', 'regress_user1' ],
|
||||
'fails if role already exists');
|
||||
$node->command_fails(
|
||||
[ 'createuser', 'regress_user1', '-m', 'regress_user2', 'regress_user3' ],
|
||||
'fails for too many non-options');
|
||||
|
||||
done_testing();
|
||||
|
Reference in New Issue
Block a user