v6-0001-Add-read_head_tail-helper-to-Utils.pm.patch
text/x-diff
Filename: v6-0001-Add-read_head_tail-helper-to-Utils.pm.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v6-0001
Subject: Add read_head_tail() helper to Utils.pm
| File | + | − |
|---|---|---|
| doc/src/sgml/regress.sgml | 8 | 0 |
| src/test/perl/PostgreSQL/Test/Utils.pm | 50 | 0 |
From e644bb95ce68ee171e65e6d49c0b609d0ccfbf12 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Thu, 4 Dec 2025 14:45:45 +0300
Subject: [PATCH v6 1/2] Add read_head_tail() helper to Utils.pm
This function reads lines from a file, from both head and tail
directions, with the size reported tuned depending on a new environment
variable named 'PG_TEST_FILE_READ_LINES', that can be used to override
the default of 50 lines.
Suggested-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/CAN55FZ1D6KXvjSs7YGsDeadqCxNF3UUhjRAfforzzP0k-cE%3DbA%40mail.gmail.com
---
src/test/perl/PostgreSQL/Test/Utils.pm | 50 ++++++++++++++++++++++++++
doc/src/sgml/regress.sgml | 8 +++++
2 files changed, 58 insertions(+)
diff --git a/src/test/perl/PostgreSQL/Test/Utils.pm b/src/test/perl/PostgreSQL/Test/Utils.pm
index 85d36a3171e2..0332d28916eb 100644
--- a/src/test/perl/PostgreSQL/Test/Utils.pm
+++ b/src/test/perl/PostgreSQL/Test/Utils.pm
@@ -68,6 +68,7 @@ our @EXPORT = qw(
slurp_file
append_to_file
string_replace_file
+ read_head_tail
check_mode_recursive
chmod_recursive
check_pg_config
@@ -590,6 +591,55 @@ sub string_replace_file
=pod
+=item read_head_tail(filename)
+
+Return lines from the head and the tail of a file. If the file is smaller
+than the number of lines requested, all its contents are returned in @head,
+leaving @tail empty.
+
+If the PG_TEST_FILE_READ_LINES environment variable is set, use it instead
+of the default of 50 lines.
+
+=cut
+
+sub read_head_tail
+{
+ my $filename = shift;
+ my (@head, @tail);
+ my $line_count = 50;
+
+ # Use PG_TEST_FILE_READ_LINES if set.
+ if (defined $ENV{PG_TEST_FILE_READ_LINES})
+ {
+ $line_count = $ENV{PG_TEST_FILE_READ_LINES};
+ }
+
+ return ([], []) if $line_count <= 0;
+
+ open my $fh, '<', $filename or die "couldn't open file: $filename\n";
+ my @lines = <$fh>;
+ close $fh;
+
+ chomp @lines;
+
+ my $total = scalar @lines;
+
+ # If the file is small enough, return all lines in @head.
+ if (2 * $line_count >= $total)
+ {
+ @head = @lines;
+ @tail = ();
+ return (\@head, \@tail);
+ }
+
+ @head = @lines[ 0 .. $line_count - 1 ];
+ @tail = @lines[ $total - $line_count .. $total - 1 ];
+
+ return (\@head, \@tail);
+}
+
+=pod
+
=item check_mode_recursive(dir, expected_dir_mode, expected_file_mode, ignore_list)
Check that all file/dir modes in a directory match the expected values,
diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml
index fd1e142d5591..d80dd46c5fdb 100644
--- a/doc/src/sgml/regress.sgml
+++ b/doc/src/sgml/regress.sgml
@@ -917,6 +917,14 @@ PG_TEST_NOCLEAN=1 make -C src/bin/pg_dump check
<varname>PG_TEST_TIMEOUT_DEFAULT</varname> to a higher number will change
the default to avoid this.
</para>
+
+ <para>
+ For certain tests, the environment variable
+ <envar>PG_TEST_FILE_READ_LINES</envar> can be set to limit the number of
+ lines read from large output files (head and tail). This is useful when
+ the test output contains a lot of unnecessary content, allowing the test
+ framework to read only a limited number of lines for its reports.
+ </para>
</sect2>
</sect1>
--
2.51.0