On 20.03.2015 14:31, Stefan Fuhrmann wrote:
> On Fri, Mar 20, 2015 at 8:47 AM, Stefan Sperling <stsp_at_elego.de
> <mailto:stsp_at_elego.de>> wrote:
>
> On Fri, Mar 20, 2015 at 08:34:00AM +0100, Branko Čibej wrote:
> > I just noticed that we forgot to bump the displayed copyright year.
> > Fixed in r1667941 and nominated for backport to 1.9.x, 1.8.x and
> 1.7.x.
> > I also vetoed the 1.7.20 and 1.8.13 releases because of the
> wrong year
> > ... we really shouldn't release with wrong legalese, and we already
> > allowed 1.9.0-beta1 to slip through with that buglet.
> >
> > Sorry about not noticing this earlier, I realize we already have
> enough
> > votes tor 1.7.20 and 1.8.13; but I really think we should pull these
> > tarballs.
> >
> > -- Brane
>
> If we decide to pull these releases based on this problem, then I'm
> against making everyone re-run tests for this. Just allow people to
> diff the tarballs and submit a new signature based on that.
>
> Could we have a buildbot test for this kind of problem?
> Should our rat-report bot (which I can't seem to locate in the maze
> of buildbot right now) perhaps check for this?
>
>
> Yes, I think we should add a simple C test calling svn_version_extended.
> If the year differs from the actual, FAIL. Have a grace period from Dec 15
> to Jan 15. That test would act as a simple reminder.
>
> I'd be happy to implement it.
Don't need a C test for that, just tweak the getopt tests. Haven't
committed this yet because we might end up removing the copyright blurb
altogether.
$ svn diff
Index: Makefile.in
===================================================================
--- Makefile.in (revision 1667950)
+++ Makefile.in (working copy)
@@ -556,6 +556,9 @@
if test "$(PARALLEL)" != ""; then \
flags="--parallel $(PARALLEL) $$flags"; \
fi; \
+ if test "$(COPYRIGHT)" != ""; then \
+ flags="--copyright $(COPYRIGHT) $$flags"; \
+ fi; \
if test "$(LOG_TO_STDOUT)" != ""; then \
flags="--log-to-stdout $$flags"; \
fi; \
Index: build/run_tests.py
===================================================================
--- build/run_tests.py (revision 1667950)
+++ build/run_tests.py (working copy)
@@ -30,7 +30,7 @@
[--list] [--milestone-filter=<regex>] [--mode-filter=<type>]
[--server-minor-version=<version>] [--http-proxy=<host>:<port>]
[--httpd-version=<version>]
- [--config-file=<file>] [--ssl-cert=<file>]
+ [--copyright=<year>] [--config-file=<file>] [--ssl-cert=<file>]
[--exclusive-wc-locks] [--memcached-server=<url:port>]
<abs_srcdir> <abs_builddir>
<prog ...>
@@ -123,7 +123,8 @@
def __init__(self, abs_srcdir, abs_builddir, logfile, faillogfile,
base_url=None, fs_type=None, http_library=None,
server_minor_version=None, verbose=None,
- cleanup=None, enable_sasl=None, parallel=None, config_file=None,
+ cleanup=None, enable_sasl=None, parallel=None,
+ copyright_year=None, config_file=None,
fsfs_sharding=None, fsfs_packing=None,
list_tests=None, svn_bin=None, mode_filter=None,
milestone_filter=None, set_log_level=None, ssl_cert=None,
@@ -175,6 +176,7 @@
self.fsfs_packing = fsfs_packing
if fsfs_packing is not None and fsfs_sharding is None:
raise Exception('--fsfs-packing requires --fsfs-sharding')
+ self.copyright_year = copyright_year
self.config_file = None
if config_file is not None:
self.config_file = os.path.abspath(config_file)
@@ -506,6 +508,8 @@
svntest.main.options.parallel = num_parallel
else:
svntest.main.options.parallel = svntest.main.default_num_threads
+ if self.copyright_year is not None:
+ svntest.main.options.copyright_year = int(self.copyright_year)
if self.config_file is not None:
svntest.main.options.config_file = self.config_file
if self.verbose is not None:
@@ -721,7 +725,8 @@
'dump-load-cross-check',
'http-library=', 'server-minor-version=',
'fsfs-packing', 'fsfs-sharding=',
- 'enable-sasl', 'parallel=', 'config-file=',
+ 'enable-sasl', 'parallel=', 'copyright=',
+ 'config-file=',
'log-to-stdout', 'list', 'milestone-filter=',
'mode-filter=', 'set-log-level=', 'ssl-cert=',
'http-proxy=', 'http-proxy-username=',
@@ -737,13 +742,13 @@
base_url, fs_type, verbose, cleanup, skip_c_tests, enable_sasl, \
http_library, server_minor_version, fsfs_sharding, fsfs_packing, \
- parallel, config_file, log_to_stdout, list_tests, mode_filter, \
- milestone_filter, set_log_level, ssl_cert, http_proxy, \
+ parallel, copyright_year, config_file, log_to_stdout, list_tests, \
+ mode_filter, milestone_filter, set_log_level, ssl_cert, http_proxy, \
http_proxy_username, http_proxy_password, httpd_version, \
exclusive_wc_locks, memcached_server, dump_load_cross_check = \
None, None, None, None, None, None, None, None, None, None, \
None, None, None, None, None, None, None, None, None, None, \
- None, None, None, None, None
+ None, None, None, None, None, None
for opt, val in opts:
if opt in ['-u', '--url']:
base_url = val
@@ -769,6 +774,8 @@
enable_sasl = 1
elif opt in ['--parallel']:
parallel = val
+ elif opt in ['--copyright']:
+ copyright_year = val
elif opt in ['--config-file']:
config_file = val
elif opt in ['--log-to-stdout']:
@@ -807,8 +814,8 @@
th = TestHarness(args[0], args[1], logfile, faillogfile,
base_url, fs_type, http_library, server_minor_version,
- verbose, cleanup, enable_sasl, parallel, config_file,
- fsfs_sharding, fsfs_packing, list_tests,
+ verbose, cleanup, enable_sasl, parallel, copyright_year,
+ config_file, fsfs_sharding, fsfs_packing, list_tests,
mode_filter=mode_filter, milestone_filter=milestone_filter,
set_log_level=set_log_level, ssl_cert=ssl_cert,
http_proxy=http_proxy,
Index: subversion/tests/cmdline/getopt_tests.py
===================================================================
--- subversion/tests/cmdline/getopt_tests.py (revision 1667950)
+++ subversion/tests/cmdline/getopt_tests.py (working copy)
@@ -48,14 +48,26 @@
# Then append either _stdout or _stderr for the file descriptor to
# compare against.
+replace_copyright_re = re.compile(r'Copyright \(C\) 20\d\d'
+ ' The Apache Software Foundation\.\n')
+replace_copyright_text = 'Copyright (C) %d The Apache Software Foundation.\n'
+
def load_expected_output(basename):
"load the expected standard output and standard error"
+ def filter_expected(filename):
+ expected = []
+ for line in open(filename, 'r').readlines():
+ if replace_copyright_re.match(line):
+ line = replace_copyright_text % svntest.main.options.copyright_year
+ expected.append(line)
+ return expected
+
stdout_filename = os.path.join(getopt_output_dir, basename + '_stdout')
stderr_filename = os.path.join(getopt_output_dir, basename + '_stderr')
- exp_stdout = open(stdout_filename, 'r').readlines()
- exp_stderr = open(stderr_filename, 'r').readlines()
+ exp_stdout = filter_expected(stdout_filename)
+ exp_stderr = filter_expected(stderr_filename)
return exp_stdout, exp_stderr
@@ -92,10 +104,6 @@
# "Subversion Client, version 0.10.2 (r1729)"
(re.compile(r'version \d+\.\d+\.\d+(-[^ ]*)? \(.*\)'),
'version X.Y.Z '),
- # The copyright end date keeps changing; fix forever.
- (re.compile(r'Copyright \(C\) 20\d\d The Apache '
- 'Software Foundation\.'),
- 'Copyright (C) YYYY The Apache Software Foundation'),
# In 'svn --version --quiet', we print only the version
# number in a single line.
(re.compile(r'^\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?$'), 'X.Y.Z\n'),
Index: subversion/tests/cmdline/svntest/main.py
===================================================================
--- subversion/tests/cmdline/svntest/main.py (revision 1667950)
+++ subversion/tests/cmdline/svntest/main.py (working copy)
@@ -26,6 +26,7 @@
import sys
import os
import shutil
+import datetime
import re
import stat
import subprocess
@@ -80,6 +81,7 @@
# Global stuff
default_num_threads = 5
+default_copyright_year = datetime.datetime.now().year
# Don't try to use this before calling execute_tests()
logger = None
@@ -1618,6 +1620,8 @@
args.append('--fsfs-version=' + str(options.fsfs_version))
if options.dump_load_cross_check:
args.append('--dump-load-cross-check')
+ if options.copyright_year != default_copyright_year:
+ args.append('--copyright=' + str(options.copyright_year))
result, stdout_lines, stderr_lines = spawn_process(command, 0, False, None,
*args)
@@ -1926,6 +1930,9 @@
help='Whether to enable SASL authentication')
parser.add_option('--bin', action='store', dest='svn_bin',
help='Use the svn binaries installed in this path')
+ parser.add_option('--copyright', action='store', type='int',
+ default=default_copyright_year, dest='copyright_year',
+ help='Set the expected copyright year of the svn binaries')
parser.add_option('--use-jsvn', action='store_true',
help="Use the jsvn (SVNKit based) binaries. Can be " +
"combined with --bin to point to a specific path")
Received on 2015-03-20 14:35:17 CET