For PostgreSQL::Test compatibility, alias entire package symbol tables.

Remove the need to edit back-branch-specific code sites when
back-patching the addition of a PostgreSQL::Test::Utils symbol.  Replace
per-symbol, incomplete alias lists.  Give old and new package names the
same EXPORT and EXPORT_OK semantics.  Back-patch to v10 (all supported
versions).

Reviewed by Andrew Dunstan.

Discussion: https://postgr.es/m/20220622072144.GD4167527@rfd.leadboat.com
This commit is contained in:
Noah Misch 2022-06-25 09:07:44 -07:00
parent 3a6ef0cdf3
commit e8f037a2df
4 changed files with 22 additions and 92 deletions

View File

@ -1,9 +1,9 @@
# Copyright (c) 2022, PostgreSQL Global Development Group
# allow use of release 15+ perl namespace in older branches
# just 'use' the older module name.
# See PostgresNode.pm for function implementations
# Allow use of release 15+ Perl package name in older branches, by giving that
# package the same symbol table as the older package. See PostgresNode::new
# for supporting heuristics.
package PostgreSQL::Test::Cluster;
@ -11,5 +11,8 @@ use strict;
use warnings;
use PostgresNode;
BEGIN { *PostgreSQL::Test::Cluster:: = \*PostgresNode::; }
use Exporter 'import';
1;

View File

@ -1,46 +1,16 @@
# Copyright (c) 2022, PostgreSQL Global Development Group
# allow use of release 15+ perl namespace in older branches
# just 'use' the older module name.
# We export the same names as the v15 module.
# See TestLib.pm for alias assignment that makes this all work.
# Allow use of release 15+ Perl package name in older branches, by giving that
# package the same symbol table as the older package.
package PostgreSQL::Test::Utils;
use strict;
use warnings;
use TestLib;
BEGIN { *PostgreSQL::Test::Utils:: = \*TestLib::; }
use Exporter 'import';
use TestLib;
our @EXPORT = qw(
generate_ascii_string
slurp_dir
slurp_file
append_to_file
check_mode_recursive
chmod_recursive
check_pg_config
system_or_bail
system_log
run_log
run_command
pump_until
command_ok
command_fails
command_exit_is
program_help_ok
program_version_ok
program_options_handling_ok
command_like
command_like_safe
command_fails_like
command_checks_all
$windows_os
$use_unix_sockets
);
1;

View File

@ -146,6 +146,17 @@ of finding port numbers, registering instances for cleanup, etc.
sub new
{
my ($class, $name, $pghost, $pgport) = @_;
# Use release 15+ semantics when the arguments look like (node_name,
# %params). We can't use $class to decide, because get_new_node() passes
# a v14- argument list regardless of the class. $class might be an
# out-of-core subclass. $class->isa('PostgresNode') returns true even for
# descendants of PostgreSQL::Test::Cluster, so it doesn't help.
return $class->get_new_node(@_[ 1 .. $#_ ])
if !$pghost
or !$pgport
or $pghost =~ /^[a-zA-Z0-9_]$/;
my $testname = basename($0);
$testname =~ s/\.[^.]+$//;
my $self = {
@ -2416,18 +2427,4 @@ sub corrupt_page_checksum
=cut
# support release 15+ perl module namespace
package PostgreSQL::Test::Cluster; ## no critic (ProhibitMultiplePackages)
sub new
{
shift; # remove class param from args
return PostgresNode->get_new_node(@_);
}
no warnings 'once';
*get_free_port = *PostgresNode::get_free_port;
1;

View File

@ -931,44 +931,4 @@ sub command_checks_all
=cut
# support release 15+ perl module namespace
package PostgreSQL::Test::Utils; ## no critic (ProhibitMultiplePackages)
# we don't want to export anything here, but we want to support things called
# via this package name explicitly.
# use typeglobs to alias these functions and variables
no warnings qw(once);
*generate_ascii_string = *TestLib::generate_ascii_string;
*slurp_dir = *TestLib::slurp_dir;
*slurp_file = *TestLib::slurp_file;
*append_to_file = *TestLib::append_to_file;
*check_mode_recursive = *TestLib::check_mode_recursive;
*chmod_recursive = *TestLib::chmod_recursive;
*check_pg_config = *TestLib::check_pg_config;
*system_or_bail = *TestLib::system_or_bail;
*system_log = *TestLib::system_log;
*run_log = *TestLib::run_log;
*run_command = *TestLib::run_command;
*command_ok = *TestLib::command_ok;
*command_fails = *TestLib::command_fails;
*command_exit_is = *TestLib::command_exit_is;
*program_help_ok = *TestLib::program_help_ok;
*program_version_ok = *TestLib::program_version_ok;
*program_options_handling_ok = *TestLib::program_options_handling_ok;
*command_like = *TestLib::command_like;
*command_like_safe = *TestLib::command_like_safe;
*command_fails_like = *TestLib::command_fails_like;
*command_checks_all = *TestLib::command_checks_all;
*windows_os = *TestLib::windows_os;
*use_unix_sockets = *TestLib::use_unix_sockets;
*timeout_default = *TestLib::timeout_default;
*tmp_check = *TestLib::tmp_check;
*log_path = *TestLib::log_path;
*test_logfile = *TestLib::test_log_file;
1;