Skip to content

Commit 985bd06

Browse files
bookericherman
andcommitted
turn the script into a modulino for ease of testing
Co-authored-by: Eric Herman <[email protected]>
1 parent 85afa0f commit 985bd06

File tree

1 file changed

+54
-39
lines changed

1 file changed

+54
-39
lines changed

Porting/merge-deltas.pl

Lines changed: 54 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ sub inject_items
7575
my $from = next_header_pos( $delta, 2, $delta_pos );
7676
my $to = next_header_pos( $delta, 1, $from ) - 1;
7777

78-
# inject them at the end of the section
78+
# inject them before the next =head2 (or the end of the section)
7979
$master_pos = next_header_pos( $master, 2, $master_pos )
8080
// next_header_pos( $master, 1, $master_pos );
8181
splice @$master, $master_pos, 0, $delta->@[ $from .. $to ];
@@ -278,48 +278,17 @@ ( $tree )
278278
return join '', $handler->{$name}->( $directive, $attr, @nodes );
279279
}
280280

281-
# MAIN PROGRAM
282-
283-
# argument processing
284-
my $version = shift;
285-
die "Usage: $0 <version>\n version is required\n"
286-
unless $version;
287-
die "$version does not look like a stable Perl version\n"
288-
unless $version =~ /\A5\.[0-9]{1,2}[02468]\z/;
289-
290-
# the previous version
291-
my $previous = join '.', '5', ( split /\./, $version )[1] - 2;
292-
293-
# the version number used for delta
294-
# TODO: this should be computable
295-
my $tag_stable = $version =~ tr/.//dr;
296-
my $tag_devel = $tag_stable - 1;
297-
298281
# Note: the parser can only be used *once* per file
299-
sub tree_for ($file) {
282+
sub tree_for ($string) {
300283
my $parser = Pod::Simple::SimpleTree->new;
301284
$parser->keep_encoding_directive(1);
302285
$parser->preserve_whitespace(1);
303286
$parser->accept_targets('*'); # for & begin/end
304287
$parser->_output_is_for_JustPod(1); # for ~bracket_count
305-
$parser->parse_file($file)->root;
288+
$parser->parse_string_document($string)->root;
306289
}
307290

308-
# the current, unfinished, delta will be used to produce the final document
309-
my $main_delta = 'pod/perldelta.pod';
310-
311-
# load the template
312-
my $master = tree_for($main_delta);
313-
314-
# loop over all the development deltas
315-
for my $file_tree (
316-
map [ $_->[0], tree_for( $_->[0] ) ],
317-
sort { $b->[1] <=> $a->[1] }
318-
map [ $_, m{pod/perl$tag_devel([0-9]+)delta\.pod}g ],
319-
glob "pod/perl$tag_devel*delta.pod"
320-
)
321-
{
322-
my ( $file, $delta ) = @$file_tree;
291+
sub merge_into ( $master, $delta, $file ) {
323292

324293
# loop over the =head1 sections
325294
for my $title (
@@ -335,8 +304,54 @@ ($file)
335304
}
336305
}
337306

338-
# save the result
339-
open my $fh, '>', $main_delta
340-
or die "Can't open $main_delta for writing: $!";
341-
print $fh as_pod($master);
307+
# poor man's slurp
308+
sub slurp { return do { local @ARGV = @_; local $/; <> } }
309+
310+
# MAIN PROGRAM
311+
312+
sub main (@argv) {
313+
314+
# argument processing
315+
my $version = shift @argv;
316+
die "Usage: $0 <version>\n version is required\n"
317+
unless $version;
318+
die "$version does not look like a stable Perl version\n"
319+
unless $version =~ /\A5\.[0-9]{1,2}[02468]\z/;
320+
321+
# the previous version
322+
my $previous = join '.', '5', ( split /\./, $version )[1] - 2;
323+
324+
# the version number used for delta
325+
# TODO: this should be computable
326+
my $tag_stable = $version =~ tr/.//dr;
327+
my $tag_devel = $tag_stable - 1;
328+
329+
# the current, unfinished, delta will be used to produce the final document
330+
my $main_delta = 'pod/perldelta.pod';
331+
332+
# load the template
333+
my $master = tree_for( slurp($main_delta) );
334+
335+
# loop over all the development deltas
336+
for my $file_tree (
337+
map [ $_->[0], tree_for( slurp( $_->[0] ) ) ],
338+
sort { $b->[1] <=> $a->[1] }
339+
map [ $_, m{pod/perl$tag_devel([0-9]+)delta\.pod}g ],
340+
glob "pod/perl$tag_devel*delta.pod"
341+
)
342+
{
343+
my ( $file, $delta ) = @$file_tree;
344+
merge_into( $master, $delta, $file );
345+
}
346+
347+
# save the result
348+
open my $fh, '>', $main_delta
349+
or die "Can't open $main_delta for writing: $!";
350+
print $fh as_pod($master);
351+
352+
return 0;
353+
}
354+
355+
# make it easier to test
356+
exit main( @ARGV ) unless caller;
342357

0 commit comments

Comments
 (0)