mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-03-19 06:48:07 -04:00
This improves some obsolete autoconf macros and increases the minimum autoconf version from 2.60 to 2.69. Fixes bug 11369.
174 lines
5.2 KiB
Perl
Executable File
174 lines
5.2 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
use strict;
|
|
|
|
# This script expects the directory ~/samba-rsync-ftp to exist and to be a
|
|
# copy of the /home/ftp/pub/rsync dir on samba.org. It also requires a
|
|
# git checkout of rsync (feel free to use your normal rsync build dir as
|
|
# long as it doesn't have any uncommitted changes).
|
|
#
|
|
# If this is run with -ctu, it will make an updated "nightly" tar file in
|
|
# the nightly dir. It will also remove any old tar files, regenerate the
|
|
# HTML man pages in the nightly dir, and then rsync the changes to the
|
|
# samba.org server.
|
|
|
|
use Getopt::Long;
|
|
use Date::Format;
|
|
|
|
# Where the local copy of /home/ftp/pub/rsync/dev/nightly should be updated.
|
|
our $dest = $ENV{HOME} . '/samba-rsync-ftp/dev/nightly';
|
|
our $nightly_symlink = "$dest/rsync-HEAD.tar.gz";
|
|
|
|
our($make_tar, $upload, $help_opt);
|
|
&Getopt::Long::Configure('bundling');
|
|
&usage if !&GetOptions(
|
|
'make-tar|t' => \$make_tar,
|
|
'upload|u' => \$upload,
|
|
'help|h' => \$help_opt,
|
|
) || $help_opt;
|
|
|
|
our $name = time2str('rsync-HEAD-%Y%m%d-%H%M%Z', time, 'GMT');
|
|
our $ztoday = time2str('%d %b %Y', time);
|
|
our $today = $ztoday;
|
|
our $gen_target = $upload ? 'gensend' : 'gen';
|
|
|
|
die "$dest does not exist\n" unless -d $dest;
|
|
die "There is no .git dir in the current directory.\n" unless -d '.git';
|
|
die "There is no rsync checkout in the current directory.\n" unless -f 'rsyncd.conf.yo';
|
|
|
|
if ($make_tar) {
|
|
open(IN, '-|', 'git status') or die $!;
|
|
my $status = join('', <IN>);
|
|
close IN;
|
|
die "The checkout is not clean:\n", $status unless $status =~ /\nnothing to commit.+working directory clean/;
|
|
die "The checkout is not on the master branch.\n" unless $status =~ /^(?:# )?On branch master\n/;
|
|
system "make $gen_target" and die "make $gen_target failed!\n";
|
|
|
|
my @extra_files;
|
|
open(IN, '<', 'Makefile.in') or die "Couldn't open Makefile.in: $!\n";
|
|
while (<IN>) {
|
|
if (s/^GENFILES=//) {
|
|
while (s/\\$//) {
|
|
$_ .= <IN>;
|
|
}
|
|
@extra_files = split(' ', $_);
|
|
last;
|
|
}
|
|
}
|
|
close IN;
|
|
|
|
my $confversion;
|
|
open(IN, '<', 'configure.ac') or die "Unable to open configure.ac: $!\n";
|
|
while (<IN>) {
|
|
if (/^AC_INIT\(\[rsync\],\s*\[(\d.+?)\]/) {
|
|
$confversion = $1;
|
|
last;
|
|
}
|
|
}
|
|
close IN;
|
|
die "Unable to find AC_INIT with version in configure.ac\n" unless defined $confversion;
|
|
|
|
open(IN, '<', 'OLDNEWS') or die "Unable to open OLDNEWS: $!\n";
|
|
$_ = <IN>;
|
|
my($lastversion) = /(\d+\.\d+\.\d+)/;
|
|
my $last_protocol_version;
|
|
while (<IN>) {
|
|
if (my($ver,$pdate,$pver) = /^\s+\S\S\s\S\S\S\s\d\d\d\d\s+(\d+\.\d+\.\d+)\s+(\d\d \w\w\w \d\d\d\d\s+)?(\d+)$/) {
|
|
$last_protocol_version = $pver if $ver eq $lastversion;
|
|
}
|
|
}
|
|
close IN;
|
|
die "Unable to determine protocol_version for $lastversion.\n" unless defined $last_protocol_version;
|
|
|
|
my($protocol_version,$subprotocol_version);
|
|
open(IN, '<', 'rsync.h') or die "Unable to open rsync.h: $!\n";
|
|
while (<IN>) {
|
|
if (/^#define\s+PROTOCOL_VERSION\s+(\d+)/) {
|
|
$protocol_version = $1;
|
|
} elsif (/^#define\s+SUBPROTOCOL_VERSION\s+(\d+)/) {
|
|
$subprotocol_version = $1;
|
|
}
|
|
}
|
|
close IN;
|
|
die "Unable to determine the current PROTOCOL_VERSION.\n" unless defined $protocol_version;
|
|
die "Unable to determine the current SUBPROTOCOL_VERSION.\n" unless defined $subprotocol_version;
|
|
|
|
if ($confversion =~ /dev|pre/) {
|
|
if ($last_protocol_version ne $protocol_version) {
|
|
if ($subprotocol_version == 0) {
|
|
die "SUBPROTOCOL_VERSION must not be 0 for a non-final release with a changed PROTOCOL_VERSION.\n";
|
|
}
|
|
} else {
|
|
if ($subprotocol_version != 0) {
|
|
die "SUBPROTOCOL_VERSION must be 0 when the PROTOCOL_VERSION hasn't changed from the last release.\n";
|
|
}
|
|
}
|
|
} else {
|
|
if ($subprotocol_version != 0) {
|
|
die "SUBPROTOCOL_VERSION must be 0 for a final release.\n";
|
|
}
|
|
}
|
|
|
|
print "Creating $name.tar.gz\n";
|
|
system "rsync -a @extra_files $name/";
|
|
system "git archive --format=tar --prefix=$name/ HEAD | tar xf -";
|
|
system "support/git-set-file-times --prefix=$name/";
|
|
system "fakeroot tar czf $dest/$name.tar.gz $name; rm -rf $name";
|
|
|
|
unlink($nightly_symlink);
|
|
symlink("$name.tar.gz", $nightly_symlink);
|
|
}
|
|
|
|
foreach my $fn (qw( rsync.yo rsyncd.conf.yo )) {
|
|
my $yo_tmp = "$dest/$fn";
|
|
(my $html_fn = "$dest/$fn") =~ s/\.yo/.html/;
|
|
|
|
open(IN, '<', $fn) or die $!;
|
|
undef $/; $_ = <IN>; $/ = "\n";
|
|
close IN;
|
|
|
|
s/^(manpage\([^)]+\)\(\d+\)\()[^)]+(\).*)/$1$today$2/m;
|
|
#s/^(This man ?page is current for version) \S+ (of rsync)/$1 $version $2/m;
|
|
|
|
open(OUT, '>', $yo_tmp) or die $!;
|
|
print OUT $_;
|
|
close OUT;
|
|
|
|
system 'yodl2html', '-o', $html_fn, $yo_tmp;
|
|
|
|
unlink($yo_tmp);
|
|
}
|
|
|
|
chdir($dest) or die $!;
|
|
|
|
my $cnt = 0;
|
|
open(PIPE, '-|', 'ls -1t rsync-HEAD-*') or die $!;
|
|
while (<PIPE>) {
|
|
chomp;
|
|
next if $cnt++ < 10;
|
|
unlink($_);
|
|
}
|
|
close PIPE;
|
|
|
|
system 'ls -ltr';
|
|
|
|
if ($upload) {
|
|
my $opt = '';
|
|
if (defined $ENV{RSYNC_PARTIAL_DIR}) {
|
|
$opt = " -f 'R $ENV{RSYNC_PARTIAL_DIR}'";
|
|
}
|
|
system "rsync$opt -aviHP --delete-after . samba.org:/home/ftp/pub/rsync/dev/nightly";
|
|
}
|
|
|
|
exit;
|
|
|
|
sub usage
|
|
{
|
|
die <<EOT;
|
|
Usage: nightly-rsync [OPTIONS]
|
|
|
|
-t, --make-tar create a new tar file in $dest
|
|
-u, --upload upload the revised nightly dir to samba.org
|
|
-h, --help display this help
|
|
EOT
|
|
}
|