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