[SCM] The rsync repository. - branch master updated

Rsync CVS commit messages rsync-cvs at lists.samba.org
Thu Apr 9 22:11:59 UTC 2020


The branch, master has been updated
       via  c5fabfb0 Set Copyright years and make them easier to update
      from  e2aee6c4 Switch RSYNC_PORT to -1 in check_for_hostspec().

https://git.samba.org/?p=rsync.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c5fabfb068bba9381c0f65fea60a99a62b681008
Author: Wayne Davison <wayned at samba.org>
Date:   Thu Apr 9 15:11:37 2020 -0700

    Set Copyright years and make them easier to update
    
    I replaced git-set-file-times with an improved version that I wrote
    recently (in python3). A new script uses it to figure out the
    last-modified year for each *.[ch] file and updates its copyright.
    It also puts the latest year into the latest-year.h file for the
    output of --version.

-----------------------------------------------------------------------

Summary of changes:
 Makefile.in                |   1 +
 authenticate.c             |   2 +-
 checksum.c                 |   2 +-
 cleanup.c                  |   2 +-
 clientserver.c             |   2 +-
 connection.c               |   1 +
 flist.c                    |   2 +-
 generator.c                |   2 +-
 latest-year.h              |   1 +
 lib/md5.c                  |   1 +
 loadparm.c                 |   7 ++-
 log.c                      |   2 +-
 main.c                     |   2 +-
 options.c                  |   5 +-
 progress.c                 |   2 +-
 receiver.c                 |   2 +-
 rounding.c                 |   2 +-
 rsync.c                    |   2 +-
 rsync.h                    |   2 +-
 sender.c                   |   2 +-
 support/git-set-file-times | 119 +++++++++++++++++++++++++++++----------------
 support/year-tweak         |  93 +++++++++++++++++++++++++++++++++++
 uidlist.c                  |   2 +-
 util.c                     |   2 +-
 util2.c                    |   2 +-
 25 files changed, 196 insertions(+), 66 deletions(-)
 create mode 100644 latest-year.h
 create mode 100755 support/year-tweak


Changeset truncated at 500 lines:

diff --git a/Makefile.in b/Makefile.in
index d7ddbc41..4d6eadc6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -95,6 +95,7 @@ rsync$(EXEEXT): $(OBJS)
 
 $(OBJS): $(HEADERS)
 $(CHECK_OBJS): $(HEADERS)
+options.o: latest-year.h
 
 flist.o: rounding.h
 
diff --git a/authenticate.c b/authenticate.c
index 67c417cc..169331e5 100644
--- a/authenticate.c
+++ b/authenticate.c
@@ -2,7 +2,7 @@
  * Support rsync daemon authentication.
  *
  * Copyright (C) 1998-2000 Andrew Tridgell
- * Copyright (C) 2002-2019 Wayne Davison
+ * Copyright (C) 2002-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/checksum.c b/checksum.c
index b7ea748f..a6f1cd9c 100644
--- a/checksum.c
+++ b/checksum.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1996 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
- * Copyright (C) 2004-2019 Wayne Davison
+ * Copyright (C) 2004-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/cleanup.c b/cleanup.c
index 51130caf..fbf7c60b 100644
--- a/cleanup.c
+++ b/cleanup.c
@@ -4,7 +4,7 @@
  * Copyright (C) 1996-2000 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
  * Copyright (C) 2002 Martin Pool
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/clientserver.c b/clientserver.c
index 692a4047..3970f507 100644
--- a/clientserver.c
+++ b/clientserver.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1998-2001 Andrew Tridgell <tridge at samba.org>
  * Copyright (C) 2001-2002 Martin Pool <mbp at samba.org>
- * Copyright (C) 2002-2019 Wayne Davison
+ * Copyright (C) 2002-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/connection.c b/connection.c
index 62818610..1039115c 100644
--- a/connection.c
+++ b/connection.c
@@ -2,6 +2,7 @@
  * Support the max connections option.
  *
  * Copyright (C) 1998 Andrew Tridgell
+ * Copyright (C) 2006-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/flist.c b/flist.c
index 7d7d2c0f..5a29d6e9 100644
--- a/flist.c
+++ b/flist.c
@@ -4,7 +4,7 @@
  * Copyright (C) 1996 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
  * Copyright (C) 2001, 2002 Martin Pool <mbp at samba.org>
- * Copyright (C) 2002-2019 Wayne Davison
+ * Copyright (C) 2002-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/generator.c b/generator.c
index 12ad037d..1955bc81 100644
--- a/generator.c
+++ b/generator.c
@@ -4,7 +4,7 @@
  * Copyright (C) 1996-2000 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
  * Copyright (C) 2002 Martin Pool <mbp at samba.org>
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/latest-year.h b/latest-year.h
new file mode 100644
index 00000000..ddbf2b5e
--- /dev/null
+++ b/latest-year.h
@@ -0,0 +1 @@
+#define LATEST_YEAR "2020"
diff --git a/lib/md5.c b/lib/md5.c
index 4baa9638..c979d10c 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -2,6 +2,7 @@
  * RFC 1321 compliant MD5 implementation
  *
  * Copyright (C) 2001-2003 Christophe Devine
+ * Copyright (C) 2007-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/loadparm.c b/loadparm.c
index 534e7b63..eaa15d7d 100644
--- a/loadparm.c
+++ b/loadparm.c
@@ -11,13 +11,12 @@
  *
  * You should have received a copy of the GNU General Public License along
  * with this program; if not, visit the http://fsf.org website.
- */
-
-/* This is based on loadparm.c from Samba, written by Andrew Tridgell
+ *
+ * This is based on loadparm.c from Samba, written by Andrew Tridgell
  * and Karl Auer.  Some of the changes are:
  *
  * Copyright (C) 2001, 2002 Martin Pool <mbp at samba.org>
- * Copyright (C) 2003-2019 Wayne Davison <wayned at samba.org>
+ * Copyright (C) 2003-2020 Wayne Davison
  */
 
 /* Load parameters.
diff --git a/log.c b/log.c
index b9bab811..3c6b1b9b 100644
--- a/log.c
+++ b/log.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1998-2001 Andrew Tridgell <tridge at samba.org>
  * Copyright (C) 2000-2001 Martin Pool <mbp at samba.org>
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/main.c b/main.c
index 9af9e5d3..3b37796d 100644
--- a/main.c
+++ b/main.c
@@ -4,7 +4,7 @@
  * Copyright (C) 1996-2001 Andrew Tridgell <tridge at samba.org>
  * Copyright (C) 1996 Paul Mackerras
  * Copyright (C) 2001, 2002 Martin Pool <mbp at samba.org>
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/options.c b/options.c
index 99d3627a..4ec8d4c8 100644
--- a/options.c
+++ b/options.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1998-2001 Andrew Tridgell <tridge at samba.org>
  * Copyright (C) 2000, 2001, 2002 Martin Pool <mbp at samba.org>
- * Copyright (C) 2002-2019 Wayne Davison
+ * Copyright (C) 2002-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
 
 #include "rsync.h"
 #include "itypes.h"
+#include "latest-year.h"
 #include <popt.h>
 #include <zlib.h>
 
@@ -614,7 +615,7 @@ static void print_rsync_version(enum logcode f)
 
 	rprintf(f, "%s  version %s  protocol version %d%s\n",
 		RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-	rprintf(f, "Copyright (C) 1996-2019 by Andrew Tridgell, Wayne Davison, and others.\n");
+	rprintf(f, "Copyright (C) 1996-" LATEST_YEAR " by Andrew Tridgell, Wayne Davison, and others.\n");
 	rprintf(f, "Web site: http://rsync.samba.org/\n");
 	rprintf(f, "Capabilities:\n");
 	rprintf(f, "    %d-bit files, %d-bit inums, %d-bit timestamps, %d-bit long ints,\n",
diff --git a/progress.c b/progress.c
index d1cf8caa..21763611 100644
--- a/progress.c
+++ b/progress.c
@@ -4,7 +4,7 @@
  * Copyright (C) 1996-2000 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
  * Copyright (C) 2001, 2002 Martin Pool <mbp at samba.org>
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/receiver.c b/receiver.c
index adfa8047..afc8932c 100644
--- a/receiver.c
+++ b/receiver.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1996-2000 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/rounding.c b/rounding.c
index c4c29b31..bf2ecd31 100644
--- a/rounding.c
+++ b/rounding.c
@@ -1,7 +1,7 @@
 /*
  * A pre-compilation helper program to aid in the creation of rounding.h.
  *
- * Copyright (C) 2007-2019 Wayne Davison
+ * Copyright (C) 2007-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/rsync.c b/rsync.c
index b8d9acb9..f4af4945 100644
--- a/rsync.c
+++ b/rsync.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1996 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/rsync.h b/rsync.h
index b1d16b37..3f239f06 100644
--- a/rsync.h
+++ b/rsync.h
@@ -2,7 +2,7 @@
  * Copyright (C) 1996, 2000 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
  * Copyright (C) 2001, 2002 Martin Pool <mbp at samba.org>
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/sender.c b/sender.c
index 27c511ef..4f34cded 100644
--- a/sender.c
+++ b/sender.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1996 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras
- * Copyright (C) 2003-2019 Wayne Davison
+ * Copyright (C) 2003-2020 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/support/git-set-file-times b/support/git-set-file-times
index 53550b74..6fe641a3 100755
--- a/support/git-set-file-times
+++ b/support/git-set-file-times
@@ -1,43 +1,76 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-
-# Sets mtime and atime of files to the latest commit time in git.
-#
-# This is useful after the first clone of the rsync repository BEFORE you
-# do any building.  It is also safe if you have done a "make distclean".
-
-my %ls;
-my $commit_time;
-my $prefix = @ARGV && $ARGV[0] =~ s/^--prefix=// ? shift : '';
-
-my $top_dir = `git rev-parse --show-toplevel`;
-exit 1 unless $top_dir;
-chomp($top_dir);
-
-chdir $top_dir or die "Failed to chdir to $top_dir\: $!\n";
-
-$/ = "\0";
-open FH, '-|', qw( git ls-files -z ) or die "Failed to fork: $!";
-while (<FH>) {
-    chomp;
-    $ls{$_} = $_;
-}
-close FH;
-
-$/ = "\n";
-open FH, '-|', qw( git log -r --name-only --no-color --pretty=raw -z ), @ARGV or die "Failed to fork: $!";
-while (<FH>) {
-    chomp;
-    if (/^committer .*? (\d+) (?:[\-\+]\d+)$/) {
-	$commit_time = $1;
-    } elsif (s/\0\0commit [a-f0-9]{40}$// || s/\0$//) {
-	my @files = delete @ls{split(/\0/, $_)};
-	@files = grep { defined $_ } @files;
-	next unless @files;
-	map { s/^/$prefix/ } @files;
-	utime $commit_time, $commit_time, @files;
-    }
-    last unless %ls;
-}
-close FH;
+#!/usr/bin/python3
+
+import os, re, argparse, subprocess
+from datetime import datetime
+
+NULL_COMMIT_RE = re.compile(r'\0\0commit [a-f0-9]{40}$|\0$')
+
+def main():
+    if not args.git_dir:
+        cmd = 'git rev-parse --show-toplevel 2>/dev/null || echo .'
+        top_dir = subprocess.check_output(cmd, shell=True).decode('utf-8').strip()
+        args.git_dir = os.path.join(top_dir, '.git')
+        if not args.prefix:
+            os.chdir(top_dir)
+
+    git = [ 'git', '--git-dir=' + args.git_dir ]
+
+    if args.tree:
+        cmd = git + 'ls-tree -z -r --name-only'.split() + [ args.tree ]
+    else:
+        cmd = git + 'ls-files -z'.split()
+
+    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+    out = proc.communicate()[0].decode('utf-8')
+    ls = set(out.split('\0'))
+    ls.discard('')
+
+    cmd = git + 'log -r --name-only --no-color --pretty=raw --no-renames -z'.split()
+    if args.tree:
+        cmd.append(args.tree)
+    cmd += ['--'] + args.files
+
+    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+    for line in proc.stdout:
+        line = line.decode('utf-8').strip()
+        m = re.match(r'^committer .*? (\d+) [-+]\d+$', line)
+        if m:
+            commit_time = int(m[1])
+        elif NULL_COMMIT_RE.search(line):
+            line = NULL_COMMIT_RE.sub('', line)
+            files = set(fn for fn in line.split('\0') if fn in ls)
+            if not files:
+                continue
+            for fn in files:
+                if args.prefix:
+                    fn = args.prefix + fn
+                mtime = os.lstat(fn).st_mtime
+                if args.list:
+                    if args.list > 1:
+                        ts = str(commit_time).rjust(10)
+                    else:
+                        ts = datetime.utcfromtimestamp(commit_time).strftime("%Y-%m-%d %H:%M:%S")
+                    chg = '.' if mtime == commit_time else '*'
+                    print(chg, ts, fn)
+                elif mtime != commit_time:
+                    if not args.quiet:
+                        print(f"Setting {fn}")
+                    os.utime(fn, (commit_time, commit_time), follow_symlinks = False)
+            ls -= files
+            if not ls:
+                break
+    proc.communicate()
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description="Set the times of the current git checkout to their last-changed time.")
+    parser.add_argument('--git-dir', metavar='GIT_DIR', help="The git dir to query (defaults to affecting the current git checkout).")
+    parser.add_argument('--tree', metavar='TREE-ISH', help="The tree-ish to query (defaults to the current branch).")
+    parser.add_argument('--prefix', metavar='PREFIX_STR', help="Prepend the PREFIX_STR to each filename we tweak.")
+    parser.add_argument('--quiet', '-q', action='store_true', help="Don't output the changed-file information.")
+    parser.add_argument('--list', '-l', action='count', help="List the files and their dates instead of changing them. Repeat for Unix Time instead of human reable.")
+    parser.add_argument('files', metavar='FILE', nargs='*', help="Specify a subset of checked-out files to tweak.")
+    args = parser.parse_args()
+    main()
+
+# vim: sw=4 et
diff --git a/support/year-tweak b/support/year-tweak
new file mode 100755
index 00000000..aff72aa4
--- /dev/null
+++ b/support/year-tweak
@@ -0,0 +1,93 @@
+#!/usr/bin/python3
+
+# This uses the output from "support/git-set-file-times --list" to discern
+# the last-modified year of each *.c & *.h file and updates the copyright
+# year if it isn't set right.
+
+import sys, os, re, argparse, subprocess
+from datetime import datetime
+
+MAINTAINER_NAME = 'Wayne Davison'
+MAINTAINER_SUF = ' ' + MAINTAINER_NAME + "\n"
+
+def main():
+    latest_year = '2000'
+
+    proc = subprocess.Popen('support/git-set-file-times --list'.split(), stdout=subprocess.PIPE, encoding='utf-8')
+    for line in proc.stdout:
+        m = re.match(r'^\S\s+(?P<year>\d\d\d\d)\S+\s+\S+\s+(?P<fn>.+)', line)
+        if not m:
+            print("Failed to parse line from git-set-file-times:", line)
+            sys.exit(1)
+        m = argparse.Namespace(**m.groupdict())
+        if m.year > latest_year:
+            latest_year = m.year
+        if not re.search(r'\.(c|h|[1-9])$', m.fn) or m.fn.startswith('zlib/'):
+            continue
+        maybe_edit_copyright_year(m.fn, m.year)
+    proc.communicate()
+
+    fn = 'latest-year.h'
+    with open(fn, 'r', encoding='utf-8') as fh:
+        old_txt = fh.read()
+
+    txt = f'#define LATEST_YEAR "{latest_year}"\n'
+    if txt != old_txt:
+        print(f"Updating {fn} with year {latest_year}")
+        with open(fn, 'w', encoding='utf-8') as fh:
+            fh.write(txt)
+
+
+def maybe_edit_copyright_year(fn, year):
+    opening_lines = [ ]
+    copyright_line = None
+
+    with open(fn, 'r', encoding='utf-8') as fh:
+        for line in fh:
+            opening_lines.append(line)
+            if not re.search(r'\S', line):
+                break
+            m = re.match(r'^(?P<pre>.*Copyright\s+\S+\s+)(?P<year>\d\d\d\d(?:-\d\d\d\d)?(,\s+\d\d\d\d)*)(?P<suf>.+)', line)
+            if not m:
+                continue
+            copyright_line = argparse.Namespace(**m.groupdict())
+            copyright_line.lineno = len(opening_lines)
+            copyright_line.is_maintainer_line = MAINTAINER_NAME in copyright_line.suf
+            copyright_line.txt = line
+            if copyright_line.is_maintainer_line:
+                break
+
+        if not copyright_line:
+            return
+
+        if copyright_line.is_maintainer_line:
+            cyears = copyright_line.year.split('-')
+            if year == cyears[0]:
+                cyears = [ year ]
+            else:
+                cyears = [ cyears[0], year ]
+            txt = copyright_line.pre + '-'.join(cyears) + MAINTAINER_SUF
+            if txt == copyright_line.txt:
+                return
+            opening_lines[copyright_line.lineno - 1] = txt
+        else:
+            if fn.startswith('lib/'):
+                return
+            txt = copyright_line.pre + year + MAINTAINER_SUF
+            opening_lines[copyright_line.lineno - 1] += txt
+
+        remaining_txt = fh.read()
+
+    print(f"Updating {fn} with year {year}")
+
+    with open(fn, 'w', encoding='utf-8') as fh:
+        fh.write(''.join(opening_lines))
+        fh.write(remaining_txt)
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description="Grab the year of last mod for our c & h files and make sure the Copyright comment is up-to-date.")
+    args = parser.parse_args()
+    main()
+
+# vim: sw=4 et
diff --git a/uidlist.c b/uidlist.c


-- 
The rsync repository.



More information about the rsync-cvs mailing list