mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
72 lines
2.4 KiB
Perl
72 lines
2.4 KiB
Perl
|
#!/usr/bin/perl
|
||
|
|
||
|
# Script to automate some easy-to-mess-up parts of the PuTTY release
|
||
|
# procedure.
|
||
|
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
use Getopt::Long;
|
||
|
use File::Temp qw/tempdir/;
|
||
|
|
||
|
my $version = undef;
|
||
|
GetOptions("set-version=s" => \$version)
|
||
|
or &usage();
|
||
|
|
||
|
if (defined $version) {
|
||
|
0 == system "git", "diff-index", "--quiet", "--cached", "HEAD"
|
||
|
or die "index is dirty";
|
||
|
0 == system "git", "diff-files", "--quiet" or die "working tree is dirty";
|
||
|
-f "Makefile" and die "run 'make distclean' first";
|
||
|
my $builddir = tempdir(DIR => ".", CLEANUP => 1);
|
||
|
0 == system "./mkfiles.pl" or die;
|
||
|
0 == system "cd $builddir && ../configure" or die;
|
||
|
0 == system "cd $builddir && make pscp plink RELEASE=${version}" or die;
|
||
|
our $pscp_transcript = `cd $builddir && ./pscp --help`;
|
||
|
$pscp_transcript =~ s/^Unidentified build/Release ${version}/m or die;
|
||
|
$pscp_transcript =~ s/^/\\c /mg;
|
||
|
our $plink_transcript = `cd $builddir && ./plink --help`;
|
||
|
$plink_transcript =~ s/^Unidentified build/Release ${version}/m or die;
|
||
|
$plink_transcript =~ s/^/\\c /mg;
|
||
|
&transform("LATEST.VER", sub { s/^\d+\.\d+$/$version/ });
|
||
|
&transform("windows/putty.iss", sub {
|
||
|
s/^(AppVerName=PuTTY version |VersionInfoTextVersion=Release |AppVersion=|VersionInfoVersion=)\d+\.\d+/$1$version/ });
|
||
|
our $transforming = 0;
|
||
|
&transform("doc/pscp.but", sub {
|
||
|
if (/^\\c.*>pscp$/) { $transforming = 1; $_ .= $pscp_transcript; }
|
||
|
elsif (!/^\\c/) { $transforming = 0; }
|
||
|
elsif ($transforming) { $_=""; }
|
||
|
});
|
||
|
$transforming = 0;
|
||
|
&transform("doc/plink.but", sub {
|
||
|
if (/^\\c.*>plink$/) { $transforming = 1; $_ .= $plink_transcript; }
|
||
|
elsif (!/^\\c/) { $transforming = 0; }
|
||
|
elsif ($transforming) { $_=""; }
|
||
|
});
|
||
|
&transform("Buildscr", sub {
|
||
|
s!^(set Epoch )\d+!$1 . sprintf "%d", time/86400 - 1000!e });
|
||
|
0 == system ("git", "commit", "-a", "-m",
|
||
|
"Update version number for ${version} release.") or die;
|
||
|
exit 0;
|
||
|
}
|
||
|
|
||
|
&usage();
|
||
|
|
||
|
sub transform {
|
||
|
my ($filename, $proc) = @_;
|
||
|
my $file;
|
||
|
open $file, "<", $filename or die "$file: open for read: $!\n";
|
||
|
my $data = "";
|
||
|
while (<$file>) {
|
||
|
$proc->();
|
||
|
$data .= $_;
|
||
|
}
|
||
|
close $file;
|
||
|
open $file, ">", $filename or die "$file: open for write: $!\n";
|
||
|
print $file $data;
|
||
|
close $file or die "$file: close after write: $!\n";;
|
||
|
}
|
||
|
|
||
|
sub usage {
|
||
|
die "usage: release.pl --set-version=X.YZ\n";
|
||
|
}
|