[SCM] The rsync repository. - branch master updated
Rsync CVS commit messages
rsync-cvs at lists.samba.org
Wed Apr 22 19:44:54 UTC 2020
The branch, master has been updated
via 991ab811 Turn nightly-rsync into a python script.
via 32498242 Some more rsync-ssl improvements:
via 1c465dc3 Change the name of the rsh-ssl-rsync script.
from 2a87d78f Change the rsync-ssl helper script
https://git.samba.org/?p=rsync.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 991ab811cbc4f65f17f46a810848f1eb4e058b05
Author: Wayne Davison <wayne at opencoder.net>
Date: Wed Apr 22 12:00:08 2020 -0700
Turn nightly-rsync into a python script.
commit 3249824264f90241a8acd0bbf7aa5ab3c88442ff
Author: Wayne Davison <wayne at opencoder.net>
Date: Wed Apr 22 10:53:38 2020 -0700
Some more rsync-ssl improvements:
- Make the rsync-ssl default behavior more user friendly.
- Install rsync-ssl & rsync-ssl-rsh in the regular install rules.
- Add a manpage for rsync-ssl (which is also installed).
- Get rid of the rsync-ssl-client package in our spec file.
commit 1c465dc33a6ac7dd2c67cd7ee2a40b6ff18e4ae3
Author: Wayne Davison <wayne at opencoder.net>
Date: Wed Apr 22 10:52:01 2020 -0700
Change the name of the rsh-ssl-rsync script.
-----------------------------------------------------------------------
Summary of changes:
.gitignore | 4 +-
Makefile.in | 28 +++--
packaging/lsb/rsync.spec | 19 +--
packaging/nightly-rsync | 267 ++++++++++++++++-------------------------
packaging/pkglib.py | 57 +++++++++
packaging/release-rsync | 49 ++------
rsh-ssl-rsync => rsync-ssl-rsh | 66 ++++++----
rsync-ssl.in | 2 +-
rsync-ssl.yo | 69 +++++++++++
9 files changed, 306 insertions(+), 255 deletions(-)
rename rsh-ssl-rsync => rsync-ssl-rsh (63%)
create mode 100644 rsync-ssl.yo
Changeset truncated at 500 lines:
diff --git a/.gitignore b/.gitignore
index 519bd3bc..f601caed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,8 +15,8 @@ config.status
aclocal.m4
/proto.h
/proto.h-tstamp
-/rsync.1
-/rsyncd.conf.5
+/*.1
+/*.5
/autom4te*.cache
/confdefs.h
/conftest*
diff --git a/Makefile.in b/Makefile.in
index 3057dc33..6ce3c74c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -29,7 +29,7 @@ VERSION=@RSYNC_VERSION@
.SUFFIXES:
.SUFFIXES: .c .o
-GENFILES=configure.sh aclocal.m4 config.h.in proto.h proto.h-tstamp rsync.1 rsyncd.conf.5
+GENFILES=configure.sh aclocal.m4 config.h.in proto.h proto.h-tstamp rsync.1 rsync-ssl.1 rsyncd.conf.5
HEADERS=byteorder.h config.h errcode.h proto.h rsync.h ifuncs.h itypes.h inums.h \
lib/pool_alloc.h
LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o \
@@ -68,16 +68,14 @@ all: Makefile rsync$(EXEEXT) rsync-ssl stunnel-rsyncd.conf @MAKE_MAN@
install: all
-${MKDIR_P} ${DESTDIR}${bindir}
${INSTALLCMD} ${INSTALL_STRIP} -m 755 rsync$(EXEEXT) ${DESTDIR}${bindir}
+ ${INSTALLCMD} -m 755 rsync-ssl ${DESTDIR}${bindir}
+ ${INSTALLCMD} -m 755 rsync-ssl-rsh ${DESTDIR}${bindir}
-${MKDIR_P} ${DESTDIR}${mandir}/man1
-${MKDIR_P} ${DESTDIR}${mandir}/man5
if test -f rsync.1; then ${INSTALLMAN} -m 644 rsync.1 ${DESTDIR}${mandir}/man1; fi
+ if test -f rsync-ssl.1; then ${INSTALLMAN} -m 644 rsync-ssl.1 ${DESTDIR}${mandir}/man1; fi
if test -f rsyncd.conf.5; then ${INSTALLMAN} -m 644 rsyncd.conf.5 ${DESTDIR}${mandir}/man5; fi
-install-ssl-client: rsync-ssl
- -${MKDIR_P} ${DESTDIR}${bindir}
- ${INSTALLCMD} -m 755 rsync-ssl ${DESTDIR}${bindir}
- ${INSTALLCMD} -m 755 rsh-ssl-rsync ${DESTDIR}${bindir}
-
install-ssl-daemon: stunnel-rsyncd.conf
-${MKDIR_P} ${DESTDIR}/etc/stunnel
${INSTALLCMD} -m 644 stunnel-rsyncd.conf ${DESTDIR}/etc/stunnel/rsyncd.conf
@@ -209,16 +207,28 @@ proto.h: proto.h-tstamp
proto.h-tstamp: $(srcdir)/*.c $(srcdir)/lib/compat.c config.h
awk -f $(srcdir)/mkproto.awk $(srcdir)/*.c $(srcdir)/lib/compat.c
-man: rsync.1 rsyncd.conf.5 man-copy
+man: rsync.1 rsync-ssl.1 rsyncd.conf.5 man-copy
man-copy:
- @if test -f rsync.1; then :; elif test -f $(srcdir)/rsync.1; then echo 'Copying srcdir rsync.1'; cp -p $(srcdir)/rsync.1 .; else echo "NOTE: rsync.1 cannot be created."; fi
- @if test -f rsyncd.conf.5; then :; elif test -f $(srcdir)/rsyncd.conf.5; then echo 'Copying srcdir rsyncd.conf.5'; cp -p $(srcdir)/rsyncd.conf.5 .; else echo "NOTE: rsyncd.conf.5 cannot be created."; fi
+ @for fn in rsync.1 rsync-ssl.1 rsyncd.conf.5; do \
+ if test -f $$fn; then \
+ : ; \
+ elif test -f $(srcdir)/$$fn; then \
+ echo "Copying srcdir $$fn" ; \
+ cp -p $(srcdir)/$$fn . ; \
+ else \
+ echo "NOTE: $$fn cannot be created." ; \
+ fi ; \
+ done
rsync.1: rsync.yo
yodl2man -o rsync.1 $(srcdir)/rsync.yo
-$(srcdir)/tweak_manpage rsync.1
+rsync-ssl.1: rsync-ssl.yo
+ yodl2man -o rsync-ssl.1 $(srcdir)/rsync-ssl.yo
+ -$(srcdir)/tweak_manpage rsync-ssl.1
+
rsyncd.conf.5: rsyncd.conf.yo
yodl2man -o rsyncd.conf.5 $(srcdir)/rsyncd.conf.yo
-$(srcdir)/tweak_manpage rsyncd.conf.5
diff --git a/packaging/lsb/rsync.spec b/packaging/lsb/rsync.spec
index f527976e..65a442e8 100644
--- a/packaging/lsb/rsync.spec
+++ b/packaging/lsb/rsync.spec
@@ -13,11 +13,6 @@ URL: http://rsync.samba.org/
Prefix: %{_prefix}
BuildRoot: /var/tmp/%{name}-root
-%package ssl-client
-Summary: Provides rsync-ssl
-Group: Applications/Internet
-Requires: rsync, stunnel >= 4
-
%package ssl-daemon
Summary: An stunnel config file to support ssl rsync daemon connections.
Group: Applications/Internet
@@ -34,11 +29,6 @@ differences between the source files and the existing files in the
destination. Rsync is widely used for backups and mirroring and as an
improved copy command for everyday use.
-%description ssl-client
-Provides the rsync-ssl script that makes use of stunnel 4 to open an ssl
-connection to an rsync daemon (on port 874). This setup does NOT require
-any local stunnel daemon to be running to connect to the remote ssl rsyncd.
-
%description ssl-daemon
Provides a config file for stunnel that will (if you start your stunnel
service) cause stunnel to listen for ssl rsync-daemon connections and run
@@ -66,7 +56,7 @@ make
%install
rm -rf $RPM_BUILD_ROOT
-make install install-ssl-client install-ssl-daemon DESTDIR=$RPM_BUILD_ROOT
+make install install-ssl-daemon DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/etc/xinetd.d $RPM_BUILD_ROOT/etc/rsync-ssl/certs
install -m 644 packaging/lsb/rsync.xinetd $RPM_BUILD_ROOT/etc/xinetd.d/rsync
@@ -79,13 +69,12 @@ rm -rf $RPM_BUILD_ROOT
%doc COPYING NEWS OLDNEWS README support/ tech_report.tex
%config(noreplace) /etc/xinetd.d/rsync
%{_prefix}/bin/rsync
+%{_prefix}/bin/rsync-ssl
+%{_prefix}/bin/rsync-ssl-rsh
%{_mandir}/man1/rsync.1*
+%{_mandir}/man1/rsync-ssl.1*
%{_mandir}/man5/rsyncd.conf.5*
-%files ssl-client
-%{_prefix}/bin/rsync-ssl
-%{_prefix}/bin/rsh-ssl-rsync
-
%files ssl-daemon
%config(noreplace) /etc/stunnel/rsyncd.conf
%dir /etc/rsync-ssl/certs
diff --git a/packaging/nightly-rsync b/packaging/nightly-rsync
index 060f1a40..3e8895b9 100755
--- a/packaging/nightly-rsync
+++ b/packaging/nightly-rsync
@@ -1,174 +1,117 @@
-#!/usr/bin/perl
-use strict;
+#!/usr/bin/python3 -B
# 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
+# If this is run with -tu, 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;
+import os, sys, re, argparse, glob
+from datetime import datetime, timezone
+from getpass import getpass
+
+sys.path = ['packaging'] + sys.path
+
+from pkglib import *
# Where the local copy of /home/ftp/pub/rsync/dev/nightly should be updated.
-our $dest = $ENV{HOME} . '/samba-rsync-ftp/dev/nightly';
-our $samba_host = $ENV{SAMBA_HOST} || 'samba.org';
-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|tree) 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 --quiet --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_host\:/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
-}
+dest = os.environ['HOME'] + '/samba-rsync-ftp/dev/nightly'
+samba_host = os.environ['SAMBA_HOST']
+nightly_symlink = f"{dest}/rsync-HEAD.tar.gz"
+
+def main():
+ now = datetime.now(timezone.utc)
+ name = now.strftime('rsync-HEAD-%Y%m%d-%H%MGMT')
+ ztoday = now.strftime('%d %b %Y')
+ today = ztoday.lstrip('0')
+ gen_target = 'gensend' if args.upload else 'gen'
+
+ if not os.path.isdir(dest):
+ die("$dest does not exist")
+ if not os.path.isdir('.git'):
+ die("There is no .git dir in the current directory.")
+ if not os.path.exists('rsyncd.conf.yo'):
+ die("There is no rsync checkout in the current directory.")
+
+ if args.make_tar:
+ check_git_state('master')
+ cmd_chk(['make', gen_target])
+
+ extra_files = get_extra_files()
+
+ confversion = get_configure_version()
+
+ # All version values are strings!
+ last_version, last_protocol_version = get_OLDNEWS_version_info()
+ protocol_version, subprotocol_version = get_protocol_versions()
+
+ if 'dev' in confversion or 'pre' in confversion:
+ if last_protocol_version != protocol_version:
+ if subprotocol_version == '0':
+ die("SUBPROTOCOL_VERSION must not be 0 for a non-final release with a changed PROTOCOL_VERSION.")
+ elif subprotocol_version != '0':
+ die("SUBPROTOCOL_VERSION must be 0 when the PROTOCOL_VERSION hasn't changed from the last release.")
+ elif subprotocol_version != '0':
+ die("SUBPROTOCOL_VERSION must be 0 for a final release.")
+
+ name_slash = name + '/'
+ tar_name = f"{name}.tar.gz"
+
+ print('Creating', tar_name)
+
+ cmd_chk(['rsync', '-a', *extra_files, name_slash])
+ cmd_chk(f"git archive --format=tar --prefix={name}/ HEAD | tar xf -")
+ cmd_chk(['support/git-set-file-times', '--quiet', '--prefix', name_slash])
+ cmd_chk(['fakeroot', 'tar', 'czf', os.path.join(dest, tar_name), name])
+ cmd_chk(['rm', '-rf', name])
+
+ if os.path.lexists(nightly_symlink):
+ os.unlink(nightly_symlink)
+ os.symlink(tar_name, nightly_symlink)
+
+ for fn in sorted(glob.glob('*.yo')):
+ yo_tmp = os.path.join(dest, fn)
+ html_fn = yo_tmp.replace('.yo', '.html')
+
+ with open(fn, 'r', encoding='utf-8') as fh:
+ txt = fh.read()
+
+ txt = re.sub(r'^(manpage\([^)]+\)\(\d+\)\()[^)]+(\).*)', r'\1%s\2' % today, txt, flags=re.M)
+
+ with open(yo_tmp, 'w', encoding='utf-8') as fh:
+ fh.write(txt)
+
+ cmd_chk(['yodl2html', '-o', html_fn, yo_tmp])
+ os.unlink(yo_tmp)
+
+ os.chdir(dest)
+
+ tar_files = list(reversed(sorted(glob.glob('rsync-HEAD-*'))))
+ if len(tar_files) > 10:
+ for fn in tar_files[10:]:
+ print('Removing', fn)
+ os.unlink(fn)
+
+ cmd_run('ls -ltr'.split())
+
+ if args.upload:
+ cmd = 'rsync -aivHP --delete-after'.split()
+ partial_dir = os.environ.get('RSYNC_PARTIAL_DIR', None)
+ if partial_dir:
+ cmd.append('-fR ' + partial_dir)
+ cmd_chk([*cmd, '.', f"{samba_host}:/home/ftp/pub/rsync/dev/nightly"])
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='A helper script for "nightly" tar files.', add_help=False)
+ parser.add_argument('--make-tar', '-t', action='store_true', help=f"Create a new tar file in {dest}.")
+ parser.add_argument('--upload', '-u', action='store_true', help="Upload the revised nightly dir to {samba_host}.")
+ parser.add_argument("--help", "-h", action="help", help="Output this help message and exit.")
+ args = parser.parse_args()
+ main()
+
+# vim: sw=4 et
diff --git a/packaging/pkglib.py b/packaging/pkglib.py
index fd6359e4..cf50f1a9 100644
--- a/packaging/pkglib.py
+++ b/packaging/pkglib.py
@@ -157,4 +157,61 @@ def get_extra_files():
return extras
+
+def get_configure_version():
+ with open('configure.ac', 'r', encoding='utf-8') as fh:
+ for line in fh:
+ m = re.match(r'^AC_INIT\(\[rsync\],\s*\[(\d.+?)\]', line)
+ if m:
+ return m[1]
+ die("Unable to find AC_INIT with version in configure.ac")
+
+
+def get_OLDNEWS_version_info():
+ rel_re = re.compile(r'^\s+\S{2}\s\S{3}\s\d{4}\s+(?P<ver>\d+\.\d+\.\d+)\s+(?P<pdate>\d{2} \w{3} \d{4}\s+)?(?P<pver>\d+)$')
+ last_version = last_protocol_version = None
+ pdate = { }
+
+ with open('OLDNEWS', 'r', encoding='utf-8') as fh:
+ for line in fh:
+ if not last_version:
+ m = re.search(r'(\d+\.\d+\.\d+)', line)
+ if m:
+ last_version = m[1]
+ m = rel_re.match(line)
+ if m:
+ if m['pdate']:
+ pdate[m['ver']] = m['pdate']
+ if m['ver'] == last_version:
+ last_protocol_version = m['pver']
+ break
+
+ if not last_protocol_version:
+ die(f"Unable to determine protocol_version for {last_version}.")
+
+ return last_version, last_protocol_version
+
+
+def get_protocol_versions():
+ protocol_version = subprotocol_version = None
+
+ with open('rsync.h', 'r', encoding='utf-8') as fh:
+ for line in fh:
+ m = re.match(r'^#define\s+PROTOCOL_VERSION\s+(\d+)', line)
+ if m:
+ protocol_version = m[1]
+ continue
+ m = re.match(r'^#define\s+SUBPROTOCOL_VERSION\s+(\d+)', line)
+ if m:
+ subprotocol_version = m[1]
+ break
+
+ if not protocol_version:
+ die("Unable to determine the current PROTOCOL_VERSION.")
+
+ if not subprotocol_version:
+ die("Unable to determine the current SUBPROTOCOL_VERSION.")
+
+ return protocol_version, subprotocol_version
+
# vim: sw=4 et
diff --git a/packaging/release-rsync b/packaging/release-rsync
index 20d8ea07..b0e55387 100755
--- a/packaging/release-rsync
+++ b/packaging/release-rsync
@@ -5,7 +5,7 @@
# the git repository in the current directory will be updated, and the local
# ~/samba-rsync-ftp dir will be ready to be rsynced to samba.org.
-import os, sys, re, argparse, glob, time, shutil, atexit, signal
+import os, sys, re, argparse, glob, shutil, atexit, signal
from datetime import datetime
from getpass import getpass
@@ -21,7 +21,6 @@ MAKE_GEN_CMDS = [
'./config.status'.split(),
'make gen'.split(),
--
The rsync repository.
More information about the rsync-cvs
mailing list