Re: Postgres perl module namespace
Andrew Dunstan <andrew@dunslane.net>
From: Andrew Dunstan <andrew@dunslane.net>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Noah Misch <noah@leadboat.com>, Andres Freund <andres@anarazel.de>,
Michael Paquier <michael@paquier.xyz>, Erik Rijkers <er@xs4all.nl>,
Robert Haas <robertmhaas@gmail.com>, Alvaro Herrera
<alvherre@alvh.no-ip.org>, Mark Dilger <mark.dilger@enterprisedb.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2022-04-19T15:36:44Z
Lists: pgsql-hackers
Attachments
- PostgresNode-new-method.patch (text/x-patch) patch
- perl-new-namespace-backport.patch (text/x-patch) patch
- perl-new-namespace-backport-2.patch (text/x-patch) patch
On 2022-04-18 Mo 14:07, Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>> No, I think we could probably just port the whole of src/test/PostreSQL
>> back if required, and have it live alongside the old modules. Each TAP
>> test is a separate miracle - see comments elsewhere about port
>> assignment in parallel TAP tests.
>> But that would mean we have some tests in the old flavor and some in the
>> new flavor in the back branches, which might get confusing.
> That works for back-patching entire new test scripts, but not for adding
> some cases to an existing script, which I think is more common.
>
>
I think I've come up with a better scheme that I hope will fix all or
almost all of the pain complained of in this thread. I should note that
we deliberately delayed making these changes until fairly early in the
release 15 development cycle, and that was clearly a good decision.
The attached three patches basically implement the new naming scheme for
the back branches without doing away with the old scheme or doing a
wholesale copy of the new modules.
The first simply implements a proper "new" constructor for PostgresNode,
just like we have in PostgreSQL:Test::Cluster. It's not really essential
but it seems like a good idea. The second adds all the visible
functionality of the PostgresNode and TestLib modules to the
PostgreSQL::Test::Cluster and PostgreSQL::Test::Utils namespaces.. The
third adds dummy packages so that any code doing 'use
PostgreSQL::Test::Utils;' or 'use PostgreSQL::Test::Cluster;' will
actually import the old modules. This last piece is where there might be
some extra work needed, to export the names so that using an unqualified
function or variable, say, 'slurp_file("foo");' will work. But in
general, modulo that issue, I believe things should Just Work (tm). You
should basically just be able to backpatch any new or modified TAP test
without difficulty, sed script usage, etc.
Comments welcome.
cheers
andrew
--
Andrew Dunstan
EDB: https://www.enterprisedb.com
Commits
-
Fix PostgreSQL::Test aliasing for Perl v5.10.1.
- fe25c8533c17 12.12 landed
- ca590a4e958f 10.22 landed
- bf92b73beb50 11.17 landed
- aa1845cdd697 13.8 landed
- 4b0d21b06c6b 14.5 landed
-
For PostgreSQL::Test compatibility, alias entire package symbol tables.
- 38790408b020 10.22 landed
- ec26f44d539a 12.12 landed
- e8f037a2df9b 13.8 landed
- c41edb324294 11.17 landed
- 20911775de4a 14.5 landed
-
Make PostgresNode easily subclassable
- 54dacc746628 10.0 cited