1898184e3Ssthen#!/usr/bin/perl -w
2898184e3Ssthenuse strict;
3898184e3Ssthen
4898184e3Ssthen# This needs to be able to run from a clean checkout, hence assume only system
5898184e3Ssthen# perl, which may be too old to have autodie
6898184e3Ssthen
7898184e3Ssthenrequire 'Porting/pod_lib.pl';
8898184e3Ssthen
9898184e3Ssthenmy $state = get_pod_metadata(1);
10898184e3Ssthenmy (undef, $old_major, $old_minor) = @{$state->{delta_version}};
11898184e3Ssthen# For now, hard code it for the simple ones...
12898184e3Ssthenmy $new_major = $old_major;
13898184e3Ssthenmy $new_minor = $old_minor + 1;
14898184e3Ssthen# These two are just for "If you are upgrading from earlier releases..." in
15898184e3Ssthen# the perldelta template.
16898184e3Ssthenmy $was_major = $old_major;
17898184e3Ssthenmy $was_minor = $old_minor - 1;
18898184e3Ssthen# I may have missed some corner cases here:
19898184e3Ssthenif ($was_minor < 0) {
20898184e3Ssthen    $was_minor = 0;
21898184e3Ssthen    --$was_major;
22898184e3Ssthen}
23898184e3Ssthenmy $newdelta_filename = "perl5$new_major${new_minor}delta.pod";
24898184e3Ssthen
25898184e3Ssthen{
26898184e3Ssthen    # For now, just tell the user what to add, as it's safer.
27898184e3Ssthen    my %add;
28898184e3Ssthen
29898184e3Ssthen    sub git_add_new {
30898184e3Ssthen        push @{$add{new}}, shift;
31898184e3Ssthen    }
32898184e3Ssthen
33898184e3Ssthen    sub git_add_modified {
34898184e3Ssthen        push @{$add{modified}}, shift;
35898184e3Ssthen    }
36898184e3Ssthen
37898184e3Ssthen    sub notify_success {
38898184e3Ssthen        return unless %add;
39898184e3Ssthen        print "Please run:\n";
40898184e3Ssthen        foreach (qw(new modified)) {
41898184e3Ssthen            print "    git add @{$add{$_}}\n" if $add{$_};
42898184e3Ssthen        }
43898184e3Ssthen        print "\nBefore committing please check that the build works and make test_porting passes\n";
44898184e3Ssthen    }
45898184e3Ssthen}
46898184e3Ssthen
47898184e3Ssthenmy $filename = 'pod/.gitignore';
48898184e3Ssthenmy $gitignore = slurp_or_die($filename);
49898184e3Ssthen
50898184e3Ssthen$gitignore =~ s{^/$state->{delta_target}$}
51898184e3Ssthen               {/$newdelta_filename}m
52898184e3Ssthen    or die "Can't find /$state->{delta_target} in $filename";
53898184e3Ssthen
54898184e3Ssthenwrite_or_die($filename, $gitignore);
55898184e3Ssthengit_add_modified($filename);
56898184e3Ssthen
57898184e3Ssthenmy $olddelta = slurp_or_die('pod/perldelta.pod');
58898184e3Ssthen
59898184e3Ssthen$olddelta =~ s{^(perl)(delta - what is new for perl v5.$old_major.$old_minor)$}
60898184e3Ssthen              {$1 . "5$old_major$old_minor" . $2}me
61898184e3Ssthen    or die "Can't find expected NAME contents in $olddelta";
62898184e3Ssthen
63898184e3Ssthenmy $olddeltaname = "pod/perl5$old_major${old_minor}delta.pod";
64*6fb12b70Safresh1# in a built tree, $olddeltaname is a symlink to perldelta.pod, make sure
65*6fb12b70Safresh1# we don't write through it
66*6fb12b70Safresh1unlink($olddeltaname);
67898184e3Ssthenwrite_or_die($olddeltaname, $olddelta);
68898184e3Ssthengit_add_new($olddeltaname);
69898184e3Ssthen
70898184e3Ssthen$filename = 'Porting/perldelta_template.pod';
71898184e3Ssthenmy $newdelta = slurp_or_die($filename);
72898184e3Ssthen
73898184e3Ssthenforeach([rXXX => $was_major],
74898184e3Ssthen        [sXXX => $old_major],
75898184e3Ssthen        [tXXX => $new_major],
76898184e3Ssthen        [aXXX => $was_minor],
77898184e3Ssthen        [bXXX => $old_minor],
78898184e3Ssthen        [cXXX => $new_minor],
79898184e3Ssthen        ['5XXX' => 5 . $old_major . $old_minor]) {
80898184e3Ssthen    my ($token, $value) = @$_;
81898184e3Ssthen    $newdelta =~ s/$token/$value/g
82898184e3Ssthen        or die "Can't find '$token' in $filename";
83898184e3Ssthen}
84898184e3Ssthen
85898184e3Ssthenwrite_or_die('pod/perldelta.pod', $newdelta);
86898184e3Ssthengit_add_modified('pod/perldelta.pod');
87898184e3Ssthen
88898184e3Ssthen$filename = 'pod/perl.pod';
89898184e3Ssthenmy $pod_master = slurp_or_die($filename);
90898184e3Ssthen
91898184e3Ssthen$pod_master =~ s{^(\s*perl5)($was_major$was_minor)(delta\s+Perl changes in version )(5\.\d+\.\d+)(.*)}
92898184e3Ssthen    {$1 . $old_major . $old_minor .$3 . "5.$old_major.$old_minor" . $5 . "\n" .
93898184e3Ssthen         "$1$2$3$4$5"}me
9491f110e0Safresh1    or warn "Couldn't find perldelta line (for perl5$was_major${was_minor}delta) in $filename";
95898184e3Ssthen
96898184e3Ssthenwrite_or_die($filename, $pod_master);
97898184e3Ssthengit_add_modified($filename);
98898184e3Ssthen
99898184e3Ssthenmy $command = "$^X Porting/pod_rules.pl";
100898184e3Ssthensystem $command
101898184e3Ssthen    and die "Could not run '$command', \$? = $?";
102898184e3Ssthengit_add_modified(map {chomp $_; $_} `$^X Porting/pod_rules.pl --showfiles`);
103898184e3Ssthen
104898184e3Ssthennotify_success();
105898184e3Ssthen
106898184e3Ssthen# Local variables:
107898184e3Ssthen# cperl-indent-level: 4
108898184e3Ssthen# indent-tabs-mode: nil
109898184e3Ssthen# End:
110898184e3Ssthen#
111898184e3Ssthen# ex: set ts=8 sts=4 sw=4 et:
112