Re: Make all Perl warnings fatal

Andrew Dunstan <andrew@dunslane.net>

From: Andrew Dunstan <andrew@dunslane.net>
To: Peter Eisentraut <peter@eisentraut.org>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2023-08-21T15:51:24Z
Lists: pgsql-hackers
On 2023-08-21 Mo 02:20, Peter Eisentraut wrote:
> To avoid a complete bloodbath on cfbot, here is an updated patch set 
> that includes a workaround for the getprotobyname() issue mentioned 
> below.
>
>
> On 10.08.23 07:58, Peter Eisentraut wrote:
>> We have a lot of Perl scripts in the tree, mostly code generation and 
>> TAP tests.  Occasionally, these scripts produce warnings.  These are 
>> AFAICT always mistakes on the developer side (true positives).  
>> Typical examples are warnings from genbki.pl or related when you make 
>> a mess in the catalog files during development, or warnings from 
>> tests when they massage a config file that looks different on 
>> different hosts, or mistakes during merges (e.g., duplicate 
>> subroutine definitions), or just mistakes that weren't noticed, 
>> because, you know, there is a lot of output in a verbose build.
>>
>> I wanted to figure put if we can catch these more reliably, in the 
>> style of -Werror.  AFAICT, there is no way to automatically turn all 
>> warnings into fatal errors.  But there is a way to do it per script, 
>> by replacing
>>
>>      use warnings;
>>
>> by
>>
>>      use warnings FATAL => 'all';
>>
>> See attached patch to try it out.
>>
>> The documentation at 
>> <https://perldoc.perl.org/warnings#Fatal-Warnings> appears to sort of 
>> hand-wave against doing that.  Their argument appears to be something 
>> like, the modules you use might in the future produce additional 
>> warnings, thus breaking your scripts.  On balance, I'd take that 
>> risk, if it means I would notice the warnings in a more timely and 
>> robust way.  But that's just me at a moment in time.
>>
>> Thoughts?


It's not really the same as -Werror, because many warnings can be 
generated at runtime rather than compile-time.

Still, I guess that might not matter too much since apart from plperl we 
only use perl for building / testing.

Regarding the dangers mentioned, I guess we can undo it if it proves a 
nuisance.

+1 to getting rid if the unnecessary call to getprotobyname().


cheers


andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

Commits

  1. Add missing FATAL => 'all' to a use warnings in Perl

  2. Make all Perl warnings fatal in 043_wal_replay_wait.pl

  3. Add tap test for pg_signal_autovacuum role

  4. Implement pg_wal_replay_wait() stored procedure

  5. Fix an issue in PostgreSQL::Test::Cluster:psql()

  6. Make all Perl warnings fatal

  7. Fix a warning in Perl test code

  8. Avoid use of Perl getprotobyname