X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/73abdda442d30cf8c597eaf0a24c629662eddceb..68207537326987e28d42ad3b2fe53bdb1ebcc781:/packaging/release-rsync diff --git a/packaging/release-rsync b/packaging/release-rsync index fa6761d1..6a9e6721 100755 --- a/packaging/release-rsync +++ b/packaging/release-rsync @@ -20,61 +20,107 @@ my $ztoday = time2str('%d %b %Y', time); my $today = $ztoday; $today =~ s/^0//; -my $dots = <; -chomp $version; +print $break, "\nChecking out the latest rsync into $releasedir ...\n"; + +mkdir($releasedir, 0755) or die $! unless -d $releasedir; +chdir($releasedir) or die $!; + +system 'rm -rf rsync'; + +my(%dirs, @files); +open(CVS, '-|', 'cvs checkout -P rsync') or die $!; +while () { + print $_; + next if /\.(cvs)?ignore$/; + if (m#^[UP] rsync/(.*)#) { + my $fn = $1; + my($dir) = $fn =~ m#^(.+)/#; + push(@files, $dir) if defined($dir) && !$dirs{$1}++; + push(@files, $fn); + } +} + +chdir('rsync') or die $!; + +my($version, $lastversion); +open(IN, 'configure.in') or die $!; +while () { + if (/^RSYNC_VERSION=(.*)/) { + $version = $lastversion = $1; + last; + } +} +close IN; + +$lastversion =~ s/(\d+)cvs$/ $1 - 1 /e; +$version =~ s/cvs/pre1/ || $version =~ s/pre(\d+)/ 'pre' . ($1 + 1) /e; + +print $break, "\nPlease enter the version number of this release: [$version] "; +chomp($_ = ); +if ($_ eq '.') { + $version =~ s/pre\d+//; +} elsif ($_ ne '') { + $version = $_; +} $version =~ s/[-.]*pre[-.]*/pre/; +$lastversion =~ s/(\d+)pre\d+$/ $1 - 1 /e unless $version =~ /pre/; + my $cvstag = "release-$version"; $cvstag =~ s/[.]/-/g; $cvstag =~ s/pre/-pre/; -print "Enter the previous version to produce a patch against: "; -my $lastversion = ; -chomp $lastversion; +print "Enter the previous version to produce a patch against: [$lastversion] "; +chomp($_ = ); +$lastversion = $_ if $_ ne ''; $lastversion =~ s/[-.]*pre[-.]*/pre/; -print "Please enter the RPM release number of this release (default 1): "; -my $release = ; -chomp $release; -$release = 1 if $release eq ''; +my $release = 1; +print "Please enter the RPM release number of this release: [$release] "; +chomp($_ = ); +$release = $_ if $_ ne ''; my $diffdir; +my $skipping2; if ($lastversion =~ /pre/) { if ($version !~ /pre/) { die "You should not diff a release version against a pre-release version.\n"; } $diffdir = "$dest/old-previews"; + $skipping2 = ' ** SKIPPING **'; } elsif ($version =~ /pre/) { $diffdir = $dest; + $skipping2 = ' ** SKIPPING **'; } else { $diffdir = "$dest/old-versions"; + $skipping2 = ''; } -my $tarfile = "$dest/rsync-$version.tar.gz"; - -print < "; $_ = ; -mkdir($releasedir, 0755) or die $! unless -d $releasedir; -chdir($releasedir) or die $!; - -system "rm -rf rsync rsync-$version rsync-$lastversion"; - -system "cvs checkout -P rsync"; - -chdir('rsync') or die $!; - -print $dots; - +print $break; system "./prepare-source && touch proto.h"; my @tweak_files = ( glob('packaging/*.spec'), glob('packaging/*/*.spec'), @@ -142,35 +177,43 @@ system "yodl2man -o rsyncd.conf.5 rsyncd.conf.yo"; mkdir('patches/tmp') or die $!; system "rsync -a --exclude=patches/ --exclude-from=.cvsignore . patches/tmp/cvsdir/"; -print $dots, $note; - +print "\n", $break, $note, $break; system "patches/verify-patches -un -an"; +print $break; system "cvs -q diff | egrep -v '^(===============|RCS file: |retrieving revision |Index: )' | less -p '^diff .*'"; -print < "; - $_ = ; +print " "; +$_ = ; +if ($live) { system "cvs commit -m 'Preparing for release of $version'"; system "cvs tag -F $cvstag ."; -} else { - print "\n**** Skipping cvs commit and tagging in TESTMODE ****\n"; } -print < "; $_ = ; -print $note; - -system "patches/verify-patches -pun -an"; - chdir($releasedir) or die $!; -print $dots; - -mkdir("rsync-$version", 0755) or die $!; -system "rsync -aC --exclude=.cvsignore rsync/ rsync-$version"; +print $break; +system "rm -rf rsync-$version"; +rename('rsync', "rsync-$version") or die $!; # When creating a pre-release after a normal release, there's nothing to move. if ($diffdir ne $dest) { chdir($dest) or die $!; - # We need to run this regardless of $lastversion's "pre"ness. */ + print "Shuffling old files ...\n"; + + # We need to run this regardless of $lastversion's "pre"ness. + my @moved_files; foreach my $fn (glob('rsync*pre*.tar.gz*'), glob('rsync*pre*-NEWS')) { - rename($fn, "old-previews/$fn"); + link($fn, "old-previews/$fn") or die $!; + push(@moved_files, $fn); } - system "rm -f rsync*pre*.diffs.gz*"; if ($version !~ /pre/) { foreach my $fn (glob('rsync*.tar.gz*'), glob('rsync*-NEWS')) { - rename($fn, "old-versions/$fn"); + next if $fn =~ /^rsync.*pre/; + link($fn, "old-versions/$fn") or die $!; + push(@moved_files, $fn); } foreach my $fn (glob('rsync*.diffs.gz*')) { - rename($fn, "old-patches/$fn"); + next if $fn =~ /^rsync.*pre/; + link($fn, "old-patches/$fn") or die $!; + push(@moved_files, $fn); } } + # Optimize our future upload (in the absence of --detect-renamed) by + # uploading the above hard-linked files that we are about to delete. + if ($live) { + system "rsync -avHC --include='rsync*.gz*' --include='old-*/' --exclude='*' . samba.org:/home/ftp/pub/rsync"; + } + foreach (@moved_files, glob("rsync*pre*.diffs.gz*")) { + unlink($_); + } + chdir($releasedir) or die $!; } -system "fakeroot tar czf $tarfile rsync-$version"; -system "tar xzf $diffdir/rsync-$lastversion.tar.gz"; +print "Creating $tar_file ...\n"; +system "fakeroot tar czf $tar_file rsync-$version"; +open(TAR, '|-', "fakeroot tar --files-from=- --no-recursion --mode=g-w -czf $tar_file rsync-$version") or die $!; +foreach (@files) { + print TAR "rsync-$version/$_\n"; +} +close TAR; + +print "Creating $diff_file ...\n"; +system "rm -rf rsync-$version rsync-$lastversion"; +system "tar xzf $tar_file; tar xzf $diffdir/rsync-$lastversion.tar.gz"; ## TWEAK THE VERSIONS AS DESIRED HERE ## #mkdir("rsync-$lastversion/support", 0755) or die $!; #rename("rsync-$lastversion/rsyncstats", "rsync-$lastversion/support/rsyncstats"); +unlink("rsync-$lastversion/.ignore"); ## END ## -system "diff -urN --exclude=patches rsync-$lastversion rsync-$version" - . "| gzip -9 >$dest/rsync-$lastversion-$version.diffs.gz"; +system "diff -urN --exclude=patches rsync-$lastversion rsync-$version| gzip -9 >$diff_file"; -system "rsync -a rsync/{README,NEWS,OLDNEWS,TODO} $dest"; +print "Updating the other files in $dest ...\n"; +system "rsync -a rsync-$version/{README,NEWS,OLDNEWS,TODO} $dest"; unlink("$dest/rsync-$version-NEWS"); link("$dest/NEWS", "$dest/rsync-$version-NEWS"); system "rsync -a $cvsroot/CVSROOT/rsync.updates $dest/cvs.log"; -system "yodl2html -o $dest/rsync.html rsync/rsync.yo"; -system "yodl2html -o $dest/rsyncd.conf.html rsync/rsyncd.conf.yo"; +system "yodl2html -o $dest/rsync.html rsync-$version/rsync.yo"; +system "yodl2html -o $dest/rsyncd.conf.html rsync-$version/rsyncd.conf.yo"; -system "rm -rf rsync rsync-$version rsync-$lastversion"; +system "rm -rf rsync-*"; if ($live) { chdir($dest) or die $!; @@ -237,7 +301,7 @@ if ($live) { system "gpg -ba rsync-$lastversion-$version.diffs.gz"; } -print <