You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/11/30 11:24:23 UTC
svn commit: r1717223 [50/50] - in /subversion/branches/ra-git: ./ build/
build/ac-macros/ build/generator/ build/generator/templates/
contrib/hook-scripts/ notes/ notes/api-errata/1.9/ notes/move-tracking/
subversion/ subversion/bindings/ctypes-python/...
Modified: subversion/branches/ra-git/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dev/unix-build/Makefile.svn?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/ra-git/tools/dev/unix-build/Makefile.svn Mon Nov 30 10:24:16 2015
@@ -79,7 +79,7 @@ SERF_OLD_VER = 0.3.1
CYRUS_SASL_VER = 2.1.25
SQLITE_VER = 3080500
LIBMAGIC_VER = 5.19
-RUBY_VER = 1.8.7-p358
+RUBY_VER = 1.8.7-p374
BZ2_VER = 1.0.6
PYTHON_VER = 2.7.8
JUNIT_VER = 4.10
@@ -109,7 +109,7 @@ SHA256_${NEON_DIST} = 2962cfcb5d30f3272e
SHA256_${CYRUS_SASL_DIST} = 418c16e6240a4f9b637cbe3d62937b9675627bad27c622191d47de8686fe24fe
SHA256_${SQLITE_DIST} = 98c33abe4106e508e73fda648b2657ac9e969fe24695f543dcde68cc71f3091b
SHA256_${LIBMAGIC_DIST} = 9484b3bbda1acc7b13a4f71031a85ce10c77bd0ffec7226741a219ef587e3a7c
-SHA256_${RUBY_DIST} = 9e0856d58830e08f1e38233947d859898ae09d4780cb1a502108e41308de33cb
+SHA256_${RUBY_DIST} = 876eeeaaeeab10cbf4767833547d66d86d6717ef48fd3d89e27db8926a65276c
SHA256_${BZ2_DIST} = a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
SHA256_${PYTHON_DIST} = 74d70b914da4487aa1d97222b29e9554d042f825f26cb2b93abd20fdda56b557
SHA256_${JUNIT_DIST} = 36a747ca1e0b86f6ea88055b8723bb87030d627766da6288bf077afdeeb0f75a
@@ -154,12 +154,12 @@ APR_UTIL_URL = https://svn.apache.org/re
HTTPD_URL = https://archive.apache.org/dist/httpd/$(HTTPD_DIST)
NEON_URL = http://webdav.org/neon/$(NEON_DIST)
#SERF_URL = http://serf.googlecode.com/files/$(SERF_DIST)
-SERF_URL = https://serf.googlecode.com/svn/tags/$(SERF_VER)
-SERF_OLD_URL = https://serf.googlecode.com/svn/tags/$(SERF_OLD_VER)
+SERF_URL = https://svn.apache.org/repos/asf/serf/tags/$(SERF_VER)
+SERF_OLD_URL = https://svn.apache.org/repos/asf/serf/tags/$(SERF_OLD_VER)
SQLITE_URL = https://www.sqlite.org/2014/$(SQLITE_DIST)
CYRUS_SASL_URL = ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/$(CYRUS_SASL_DIST)
LIBMAGIC_URL = ftp://ftp.astron.com/pub/file/$(LIBMAGIC_DIST)
-RUBY_URL = http://ftp.ruby-lang.org/pub/ruby/1.8/$(RUBY_DIST)
+RUBY_URL = https://cache.ruby-lang.org/pub/ruby/1.8/$(RUBY_DIST)
BZ2_URL = http://bzip.org/$(BZ2_VER)/$(BZ2_DIST)
PYTHON_URL = https://python.org/ftp/python/$(PYTHON_VER)/$(PYTHON_DIST)
JUNIT_URL = https://downloads.sourceforge.net/project/junit/junit/$(JUNIT_VER)/$(JUNIT_DIST)
@@ -604,6 +604,8 @@ httpd-reset:
httpd-clean:
-(cd $(HTTPD_OBJDIR) && env MAKEFLAGS= make clean)
+ -rm ${HTTPD_OBJDIR}/chil-engine.diff
+ -rm ${HTTPD_OBJDIR}/ssl3.diff
# fetch distfile for httpd
$(DISTDIR)/$(HTTPD_DIST):
@@ -627,14 +629,31 @@ $(HTTPD_OBJDIR)/chil-engine.diff:
echo >>$@.tmp ' ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,'
mv -f $@.tmp $@
+$(HTTPD_OBJDIR)/ssl3.diff:
+ mkdir -p $(dir $@)
+ echo >$@.tmp '--- support/ab.c.orig Mon Sep 14 15:33:46 2015'
+ echo >>$@.tmp '+++ support/ab.c Mon Sep 14 15:34:15 2015'
+ echo >>$@.tmp '@@ -2232,8 +2232,10 @@'
+ echo >>$@.tmp ' } else if (strncasecmp(optarg, "SSL2", 4) == 0) {'
+ echo >>$@.tmp ' meth = SSLv2_client_method();'
+ echo >>$@.tmp ' #endif'
+ echo >>$@.tmp '+#ifndef OPENSSL_NO_SSL3'
+ echo >>$@.tmp ' } else if (strncasecmp(optarg, "SSL3", 4) == 0) {'
+ echo >>$@.tmp ' meth = SSLv3_client_method();'
+ echo >>$@.tmp '+#endif'
+ echo >>$@.tmp ' #ifdef HAVE_TLSV1_X'
+ echo >>$@.tmp ' } else if (strncasecmp(optarg, "TLS1.1", 6) == 0) {'
+ echo >>$@.tmp ' meth = TLSv1_1_client_method();'
+ mv -f $@.tmp $@
# retrieve httpd
$(HTTPD_OBJDIR)/.retrieved: $(DISTDIR)/$(HTTPD_DIST) \
- $(HTTPD_OBJDIR)/chil-engine.diff
+ $(HTTPD_OBJDIR)/chil-engine.diff $(HTTPD_OBJDIR)/ssl3.diff
$(call do_check_sha256,$(HTTPD_DIST))
[ -d $(HTTPD_OBJDIR) ] || mkdir -p $(HTTPD_OBJDIR)
tar -C $(SRCDIR) -zxf $(DISTDIR)/$(HTTPD_DIST)
cd $(HTTPD_SRCDIR) && patch -p0 < $(HTTPD_OBJDIR)/chil-engine.diff
+ cd $(HTTPD_SRCDIR) && patch -p0 < $(HTTPD_OBJDIR)/ssl3.diff
cp $(HTTPD_SRCDIR)/modules/ssl/ssl_toolkit_compat.h \
$(HTTPD_SRCDIR)/modules/ssl/ssl_toolkit_compat.h.orig
sed '/^#define HAVE_SSL_RAND_EGD/d' \
@@ -1060,6 +1079,11 @@ $(RUBY_OBJDIR)/.retrieved: $(DISTDIR)/$(
$(call do_check_sha256,$(RUBY_DIST))
[ -d $(RUBY_OBJDIR) ] || mkdir -p $(RUBY_OBJDIR)
tar -C $(SRCDIR) -zxf $(DISTDIR)/$(RUBY_DIST)
+ grep -v 'OSSL_SSL_METHOD_ENTRY(SSLv3' \
+ $(RUBY_SRCDIR)/ext/openssl/ossl_ssl.c > \
+ $(RUBY_SRCDIR)/ext/openssl/ossl_ssl.c.nossl3
+ mv $(RUBY_SRCDIR)/ext/openssl/ossl_ssl.c.nossl3 \
+ $(RUBY_SRCDIR)/ext/openssl/ossl_ssl.c
touch $@
ifeq ($(THREADING),yes)
@@ -1522,6 +1546,7 @@ $(SVN_OBJDIR)/.bindings-installed: $(SVN
# run svn regression tests
HTTPD_CHECK_CONF=$(PREFIX)/httpd/conf/httpd-svn-check-$(WC).conf
HTTPD_CHECK_USERS=$(PREFIX)/httpd/conf/httpd-svn-check-users
+HTTPD_CHECK_GROUPS=$(PREFIX)/httpd/conf/httpd-svn-check-groups
HTTPD_CHECK_PORT=8081
MOD_DONTDOTHAT_CONF=$(PREFIX)/httpd/conf/dontdothat
@@ -1531,13 +1556,18 @@ $(MOD_DONTDOTHAT_CONF):
echo >>$@.tmp '/ = deny'
mv -f $@.tmp $@
-$(HTTPD_CHECK_USERS):
+$(HTTPD_CHECK_GROUPS):
mkdir -p $(dir $@)
- echo > $@.tmp 'jrandom:xCGl35kV9oWCY'
- echo >>$@.tmp 'jconstant:xCGl35kV9oWCY'
- mv -f $@.tmp $@
+ printf "random: jrandom\nconstant: jconstant\n" > $@
-$(HTTPD_CHECK_CONF): $(HTTPD_CHECK_USERS) $(MOD_DONTDOTHAT_CONF)
+$(HTTPD_CHECK_CONF): $(MOD_DONTDOTHAT_CONF) $(HTTPD_CHECK_GROUPS)
+ mkdir -p $(dir $@)
+ $(PREFIX)/httpd/bin/htpasswd -bc $(HTTPD_CHECK_USERS).tmp jrandom rayjandom
+ $(PREFIX)/httpd/bin/htpasswd -b $(HTTPD_CHECK_USERS).tmp jconstant rayjandom
+ $(PREFIX)/httpd/bin/htpasswd -b $(HTTPD_CHECK_USERS).tmp __dumpster__ __loadster__
+ $(PREFIX)/httpd/bin/htpasswd -b $(HTTPD_CHECK_USERS).tmp JRANDOM rayjandom
+ $(PREFIX)/httpd/bin/htpasswd -b $(HTTPD_CHECK_USERS).tmp JCONSTANT rayjandom
+ mv -f $(HTTPD_CHECK_USERS).tmp $(HTTPD_CHECK_USERS)
echo > $@.tmp '# httpd config for make check'
echo >>$@.tmp 'ServerRoot "$(PREFIX)/httpd"'
echo >>$@.tmp 'Listen localhost:$(HTTPD_CHECK_PORT)'
@@ -1601,8 +1631,8 @@ endif
echo >>$@.tmp '# Location for tests using mod_dontdothat'
echo >>$@.tmp '<Location /ddt-test-work/repositories>'
echo >> $@.tmp 'DAV svn'
- echo >> $@.tmp 'SVNParentPath "$(SVN_WC)/subversion/tests/cmdline/svn-test-work/repositories"'
- echo >> $@.tmp 'AuthzSVNAccessFile "$(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz"'
+ echo >> $@.tmp 'SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/repositories'
+ echo >> $@.tmp 'AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
echo >> $@.tmp 'AuthType Basic'
echo >> $@.tmp 'AuthName "Subversion Repository"'
echo >> $@.tmp 'AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
@@ -1613,6 +1643,169 @@ ifeq ($(USE_HTTPV1),yes)
endif
echo >> $@.tmp 'DontDoThatConfigFile "$(MOD_DONTDOTHAT_CONF)"'
echo >> $@.tmp '</Location>'
+
+ echo >>$@.tmp '# Several locations for mod_authz_svn test follow'
+ echo >>$@.tmp '<Location /authz-test-work/anon>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' <IfModule mod_authz_core.c>'
+ echo >>$@.tmp ' Require all granted'
+ echo >>$@.tmp ' </IfModule>'
+ echo >>$@.tmp ' <IfModule !mod_authz_core.c>'
+ echo >>$@.tmp ' Allow from all'
+ echo >>$@.tmp ' </IfModule>'
+ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes)
+ echo >>$@.tmp ' SVNPathAuthz short_circuit'
+endif
+ echo >>$@.tmp '</Location>'
+ echo >>$@.tmp '<Location /authz-test-work/mixed>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' AuthType Basic'
+ echo >>$@.tmp ' AuthName "Subversion Repository"'
+ echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)'
+ echo >>$@.tmp ' Require valid-user'
+ echo >>$@.tmp ' Satisfy Any'
+ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes)
+ echo >>$@.tmp ' SVNPathAuthz short_circuit'
+endif
+ echo >>$@.tmp '</Location>'
+ echo >>$@.tmp '<Location /authz-test-work/mixed-noauthwhenanon>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' AuthType Basic'
+ echo >>$@.tmp ' AuthName "Subversion Repository"'
+ echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)'
+ echo >>$@.tmp ' Require valid-user'
+ echo >>$@.tmp ' AuthzSVNNoAuthWhenAnonymousAllowed On'
+ echo >>$@.tmp ' SVNPathAuthz On'
+ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes)
+ echo >>$@.tmp ' SVNPathAuthz short_circuit'
+endif
+ echo >>$@.tmp '</Location>'
+ echo >>$@.tmp '<Location /authz-test-work/authn>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' AuthType Basic'
+ echo >>$@.tmp ' AuthName "Subversion Repository"'
+ echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)'
+ echo >>$@.tmp ' Require valid-user'
+ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes)
+ echo >>$@.tmp ' SVNPathAuthz short_circuit'
+endif
+ echo >>$@.tmp '</Location>'
+ echo >>$@.tmp '<Location /authz-test-work/authn-anonoff>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' AuthType Basic'
+ echo >>$@.tmp ' AuthName "Subversion Repository"'
+ echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)'
+ echo >>$@.tmp ' Require valid-user'
+ echo >>$@.tmp ' AuthzSVNAnonymous Off'
+ echo >>$@.tmp ' SVNPathAuthz On'
+ echo >>$@.tmp '</Location>'
+ echo >>$@.tmp '<Location /authz-test-work/authn-lcuser>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' AuthType Basic'
+ echo >>$@.tmp ' AuthName "Subversion Repository"'
+ echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)'
+ echo >>$@.tmp ' Require valid-user'
+ echo >>$@.tmp ' AuthzForceUsernameCase Lower'
+ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes)
+ echo >>$@.tmp ' SVNPathAuthz short_circuit'
+endif
+ echo >>$@.tmp '</Location>'
+ echo >>$@.tmp '<Location /authz-test-work/authn-group>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' AuthType Basic'
+ echo >>$@.tmp ' AuthName "Subversion Repository"'
+ echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)'
+ echo >>$@.tmp ' AuthGroupFile $(HTTPD_CHECK_GROUPS)'
+ echo >>$@.tmp ' Require group random'
+ echo >>$@.tmp ' AuthzSVNAuthoritative Off'
+ echo >>$@.tmp ' SVNPathAuthz On'
+ echo >>$@.tmp '</Location>'
+ echo >>$@.tmp '<IfModule mod_authz_core.c>'
+ echo >>$@.tmp ' <Location /authz-test-work/sallrany>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $($SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' AuthType Basic'
+ echo >>$@.tmp ' AuthName "Subversion Repository"'
+ echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)'
+ echo >>$@.tmp ' AuthzSendForbiddenOnFailure On'
+ echo >>$@.tmp ' Satisfy All'
+ echo >>$@.tmp ' <RequireAny>'
+ echo >>$@.tmp ' Require valid-user'
+ echo >>$@.tmp ' Require expr req("ALLOW") == "1"'
+ echo >>$@.tmp ' </RequireAny>'
+ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes)
+ echo >>$@.tmp ' SVNPathAuthz short_circuit'
+endif
+ echo >>$@.tmp ' </Location>'
+ echo >>$@.tmp ' <Location /authz-test-work/sallrall>'
+ echo >>$@.tmp ' DAV svn'
+ echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp'
+ echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz'
+ifeq ($(USE_HTTPV1),yes)
+ echo >>$@.tmp ' SVNAdvertiseV2Protocol off'
+endif
+ echo >>$@.tmp ' SVNListParentPath On'
+ echo >>$@.tmp ' AuthType Basic'
+ echo >>$@.tmp ' AuthName "Subversion Repository"'
+ echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)'
+ echo >>$@.tmp ' AuthzSendForbiddenOnFailure On'
+ echo >>$@.tmp ' Satisfy All'
+ echo >>$@.tmp ' <RequireAll>'
+ echo >>$@.tmp ' Require valid-user'
+ echo >>$@.tmp ' Require expr req("ALLOW") == "1"'
+ echo >>$@.tmp ' </RequireAll>'
+ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes)
+ echo >>$@.tmp ' SVNPathAuthz short_circuit'
+endif
+ echo >>$@.tmp ' </Location>'
+ echo >>$@.tmp '</IfModule>'
echo >>$@.tmp 'RedirectMatch permanent ^/svn-test-work/repositories/REDIRECT-PERM-(.*)$$ /svn-test-work/repositories/$$1'
echo >>$@.tmp 'RedirectMatch ^/svn-test-work/repositories/REDIRECT-TEMP-(.*)$$ /svn-test-work/repositories/$$1'
echo >>$@.tmp 'Include "conf/$(SVN_REL_WC)*-custom.conf"'
Propchange: subversion/branches/ra-git/tools/dev/wc-ng/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Nov 30 10:24:16 2015
@@ -0,0 +1 @@
+svn-wc-db-tester
Modified: subversion/branches/ra-git/tools/dev/x509-parser.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dev/x509-parser.c?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dev/x509-parser.c (original)
+++ subversion/branches/ra-git/tools/dev/x509-parser.c Mon Nov 30 10:24:16 2015
@@ -94,7 +94,8 @@ get_der_cert_from_stream(const svn_strin
apr_pool_t *pool)
{
svn_string_t *raw;
- SVN_ERR(svn_string_from_stream(&raw, in, pool, pool));
+ SVN_ERR(svn_string_from_stream2(&raw, in, SVN__STREAM_CHUNK_SIZE,
+ pool));
*der_cert = NULL;
@@ -158,7 +159,7 @@ int main (int argc, const char *argv[])
}
else if (argc == 1)
{
- err = svn_stream_for_stdin(&in, pool);
+ err = svn_stream_for_stdin2(&in, TRUE, pool);
}
else
err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL, _("Too many arguments"));
Modified: subversion/branches/ra-git/tools/dist/backport.pl
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dist/backport.pl?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dist/backport.pl (original)
+++ subversion/branches/ra-git/tools/dist/backport.pl Mon Nov 30 10:24:16 2015
@@ -11,8 +11,10 @@ use v5.10.0; # needed for $^V
#
# As of Perl v5.20.1, the semantics of given/when provided by Perl are
# compatible with those expected by the script, so disable the warning for
-# those Perls.
-no if $^V le v5.20.1, warnings => 'experimental::smartmatch';
+# those Perls. But don't try to disable the the warning category on Perls
+# that don't know that category, since that breaks compilation.
+no if (v5.17.0 le $^V and $^V le v5.20.1),
+ warnings => 'experimental::smartmatch';
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -133,6 +135,39 @@ $SVNq = "$SVN -q ";
$SVNq =~ s/-q// if $DEBUG;
+my $BACKPORT_OPTIONS_HELP = <<EOF;
+y: Run a merge. It will not be committed.
+ WARNING: This will run 'update' and 'revert -R ./'.
+l: Show logs for the entries being nominated.
+v: Show the full entry (the prompt only shows an abridged version).
+q: Quit the "for each entry" loop. If you have entered any votes or
+ approvals, you will be prompted to commit them.
+±1: Enter a +1 or -1 vote
+ You will be prompted to commit your vote at the end.
+±0: Enter a +0 or -0 vote
+ You will be prompted to commit your vote at the end.
+a: Move the entry to the "Approved changes" section.
+ When both approving and voting on an entry, approve first: for example,
+ to enter a third +1 vote, type "a" "+" "1".
+e: Edit the entry in \$EDITOR, which is '$EDITOR'.
+ You will be prompted to commit your edits at the end.
+N: Move to the next entry. Do not prompt for the current entry again, even
+ in future runs, unless the STATUS nomination has been modified (e.g.,
+ revisions added, justification changed) in the repository.
+ (This is a local action that will not affect other people or bots.)
+ : Move to the next entry. Prompt for the current entry again in the next
+ run of backport.pl.
+ (That's a space character, ASCII 0x20.)
+?: Display this list.
+EOF
+
+my $BACKPORT_OPTIONS_MERGE_OPTIONS_HELP = <<EOF;
+y: Open a shell.
+d: View a diff.
+N: Move to the next entry.
+?: Display this list.
+EOF
+
sub backport_usage {
my $basename = basename $0;
print <<EOF;
@@ -162,30 +197,11 @@ sense of "match" is either substring (fg
In interactive mode (the default), you will be prompted once per STATUS entry.
At a prompt, you have the following options:
-y: Run a merge. It will not be committed.
- WARNING: This will run 'update' and 'revert -R ./'.
-l: Show logs for the entries being nominated.
-v: Show the full entry (the prompt only shows an abridged version).
-q: Quit the "for each nomination" loop.
-±1: Enter a +1 or -1 vote
- You will be prompted to commit your vote at the end.
-±0: Enter a +0 or -0 vote
- You will be prompted to commit your vote at the end.
-a: Move the entry to the "Approved changes" section.
- When both approving and voting on an entry, approve first: for example,
- to enter a third +1 vote, type "a" "+" "1".
-e: Edit the entry in $EDITOR.
- You will be prompted to commit your edits at the end.
-N: Move to the next entry. Cache the entry in '$STATEFILE' and do not
- prompt for it again (even across runs) until it is changed.
- : Move to the next entry, without adding the current one to the cache.
- (That's a space character, ASCII 0x20.)
+$BACKPORT_OPTIONS_HELP
After running a merge, you have the following options:
-y: Open a shell.
-d: View a diff.
-N: Move to the next entry.
+$BACKPORT_OPTIONS_MERGE_OPTIONS_HELP
To commit a merge, you have two options: either answer 'y' to the second prompt
to open a shell, and manually run 'svn commit' therein; or set \$MAY_COMMIT=1
@@ -229,7 +245,7 @@ sub nominate_usage {
print <<EOF;
nominate.pl: a tool for adding entries to STATUS.
-Usage: $0 "foo r42 bar r43 qux 45." "\$Some_justification"
+Usage: $0 "r42, r43, r45" "\$Some_justification"
Will add:
* r42, r43, r45
@@ -240,6 +256,15 @@ Will add:
+1: $availid
to STATUS. Backport branches are detected automatically.
+The revisions argument may contain arbitrary text (besides the revision
+numbers); it will be ignored. For example,
+ $0 "Committed revision 42." "\$Some_justification"
+will nominate r42.
+
+The justification can be an arbitrarily-long string; if it is wider than the
+available width, this script will wrap it for you (and allow you to review
+the result before committing).
+
The STATUS file in the current directory is used (unless argv[0] is "n", in
which case the STATUS file in the directory of argv[0] is used; the intent
is to create a symlink named "n" in the branch wc root).
@@ -415,7 +440,7 @@ fi
$SVNq up
$SVNq merge @mergeargs
if [ "`$SVN status -q | wc -l`" -eq 1 ]; then
- if [ -n "`$SVN diff | perl -lne 'print if s/^(Added|Deleted|Modified): //' | grep -vx svn:mergeinfo`" ]; then
+ if [ -z "`$SVN diff | perl -lne 'print if s/^(Added|Deleted|Modified): //' | grep -vx svn:mergeinfo`" ]; then
# This check detects STATUS entries that name non-^/subversion/ revnums.
# ### Q: What if we actually commit a mergeinfo fix to trunk and then want
# ### to backport it?
@@ -562,7 +587,7 @@ sub parse_entry {
# summary
do {
push @logsummary, shift
- } until $_[0] =~ /^\s*[][\w]+:/ or not defined $_[0];
+ } until $_[0] =~ /^\s*[A-Z][][\w]*:/ or not defined $_[0];
# votes
unshift @votes, pop until $_[-1] =~ /^\s*Votes:/ or not defined $_[-1];
@@ -749,7 +774,7 @@ sub vote {
"Approve $_->{entry}->{header}."
} @votesarray;
(@sentences == 1)
- ? $sentences[0]
+ ? "* STATUS: $sentences[0]"
: "* STATUS:\n" . join "", map " $_\n", @sentences;
};
@@ -1015,13 +1040,13 @@ sub handle_entry {
# See above for why the while(1).
QUESTION: while (1) {
my $key = $entry{digest};
- given (prompt 'Run a merge? [y,l,v,±1,±0,q,e,a, ,N] ',
+ given (prompt 'Run a merge? [y,l,v,±1,±0,q,e,a, ,N,?] ',
verbose => 1, extra => qr/[+-]/) {
when (/^y/i) {
- #validate_branch_contains_named_revisions %entry;
+ # TODO: validate_branch_contains_named_revisions %entry;
merge \%entry;
while (1) {
- given (prompt "Shall I open a subshell? [ydN] ", verbose => 1) {
+ given (prompt "Shall I open a subshell? [ydN?] ", verbose => 1) {
when (/^y/i) {
# TODO: if $MAY_COMMIT, save the log message to a file (say,
# backport.logmsg in the wcroot).
@@ -1033,6 +1058,10 @@ sub handle_entry {
or warn "diff failed ($?): $!";
next;
}
+ when (/^[?]/i) {
+ print $BACKPORT_OPTIONS_MERGE_OPTIONS_HELP;
+ next;
+ }
when (/^N/i) {
# fall through.
}
@@ -1096,6 +1125,10 @@ sub handle_entry {
when (/^\x20/) {
last PROMPT; # Fall off the end of the given/when block.
}
+ when (/^[?]/i) {
+ print $BACKPORT_OPTIONS_HELP;
+ next QUESTION;
+ }
default {
say "Please use one of the options in brackets (q to quit)!";
next QUESTION;
@@ -1231,7 +1264,7 @@ sub nominate_main {
}
my @lines;
- warn "Wrapping [$logmsg]\n";
+ warn "Wrapping [$logmsg]\n" if $DEBUG;
push @lines, wrap " * ", ' 'x3, join ', ', map "r$_", @revnums;
push @lines, wrap ' 'x3, ' 'x3, split /\n/, $logmsg;
push @lines, " Justification:";
@@ -1263,7 +1296,7 @@ sub nominate_main {
# Done!
system "$SVN diff -- $STATUS";
if (prompt "Commit this nomination? ") {
- system "$SVN commit -m 'Nominate r$revnums[0].' -- $STATUS";
+ system "$SVN commit -m '* STATUS: Nominate r$revnums[0].' -- $STATUS";
exit $?;
}
elsif (!$had_local_mods or prompt "Revert STATUS (destroying local mods)? ") {
Modified: subversion/branches/ra-git/tools/dist/backport_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dist/backport_tests.py?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dist/backport_tests.py (original)
+++ subversion/branches/ra-git/tools/dist/backport_tests.py Mon Nov 30 10:24:16 2015
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# py:encoding=utf-8
#
-# backport_tests.py: Test backport.pl
+# backport_tests.py: Test backport.pl or backport.py
#
# Subversion is a tool for revision control.
# See http://subversion.apache.org for more information.
@@ -25,6 +25,25 @@
# under the License.
######################################################################
+# We'd like to test backport.pl and backport.py the same way, and to reuse
+# the svntest Python harness. Since the latter standardizes argv parsing,
+# we can't use argv to determine whether .py or .pl should be tested. Thus,
+# we implement the tests themselves in this file, while two driver files
+# (backport_tests_pl.py and backport_tests_py.py) invoke this file set
+# to run either backport-suite implementation.
+#
+# ### Note: the two driver scripts use the same repository names in
+# ### svn-test-work. This is not ideal, but hopefully acceptable
+# ### temporarily until we switch over to backport.py and remove backport.pl.
+# ###
+# ### See svntest.testcase.FunctionTestCase.get_sandbox_name().
+try:
+ run_backport, run_conflicter
+except NameError:
+ raise Exception("Failure: %s should not be run directly, or the wrapper "
+ "does not define both run_backport() and run_conflicter()"
+ % __file__)
+
# General modules
import contextlib
import functools
@@ -58,8 +77,6 @@ Wimp = svntest.testcase.Wimp_deco
######################################################################
# Helper functions
-BACKPORT_PL = os.path.abspath(os.path.join(os.path.dirname(__file__),
- 'backport.pl'))
STATUS = 'branch/STATUS'
class BackportTest(object):
@@ -159,12 +176,15 @@ def serialize_entry(entry):
])
def serialize_STATUS(approveds,
+ candidates=[],
serialize_entry=serialize_entry):
"""Construct and return the contents of a STATUS file.
APPROVEDS is an iterable of ENTRY dicts. The dicts are defined
to have the following keys: 'revisions', a list of revision numbers (ints);
'logsummary'; and 'votes', a dict mapping ±1/±0 (int) to list of voters.
+
+ CANDIDATES is like APPROVEDS, except added to a different section of the file.
"""
strings = []
@@ -173,6 +193,8 @@ def serialize_STATUS(approveds,
strings.append("Candidate changes:\n")
strings.append("==================\n\n")
+ strings.extend(map(serialize_entry, candidates))
+
strings.append("Random new subheading:\n")
strings.append("======================\n\n")
@@ -186,22 +208,6 @@ def serialize_STATUS(approveds,
return "".join(strings)
-def run_backport(sbox, error_expected=False, extra_env=[]):
- """Run backport.pl. EXTRA_ENV is a list of key=value pairs (str) to set in
- the child's environment. ERROR_EXPECTED is propagated to run_command()."""
- # TODO: if the test is run in verbose mode, pass DEBUG=1 in the environment,
- # and pass error_expected=True to run_command() to not croak on
- # stderr output from the child (because it uses 'sh -x').
- args = [
- '/usr/bin/env',
- 'SVN=' + svntest.main.svn_binary,
- 'YES=1', 'MAY_COMMIT=1', 'AVAILID=jrandom',
- ] + list(extra_env) + [
- 'perl', BACKPORT_PL,
- ]
- with chdir(sbox.ospath('branch')):
- return svntest.main.run_command(args[0], error_expected, False, *(args[1:]))
-
def verify_backport(sbox, expected_dump_file, uuid):
"""Compare the contents of the SBOX repository with EXPECTED_DUMP_FILE.
Set the UUID of SBOX to UUID beforehand.
@@ -225,7 +231,7 @@ def verify_backport(sbox, expected_dump_
src_dump = svntest.actions.run_and_verify_dump(sbox.repo_dir)
svntest.verify.compare_dump_files(
- "Dump files", "DUMP", src_dump, dest_dump)
+ "Dump files", "DUMP", dest_dump, src_dump)
######################################################################
# Tests
@@ -376,16 +382,14 @@ def backport_conflicts_detection(sbox):
sbox.simple_commit(message="Conflicting change on iota")
# r7: nominate r4, but without the requisite --accept
- approved_entries = [
+ candidate_entries = [
make_entry([4], notes="This will conflict."),
]
- sbox.simple_append(STATUS, serialize_STATUS(approved_entries))
+ sbox.simple_append(STATUS, serialize_STATUS([], candidate_entries))
sbox.simple_commit(message='Nominate r4')
# Run it.
- exit_code, output, errput = run_backport(sbox, True,
- # Choose conflicts mode:
- ["MAY_COMMIT=0"])
+ exit_code, output, errput = run_conflicter(sbox, True)
# Verify the conflict is detected.
expected_output = svntest.verify.RegexOutput(
@@ -418,9 +422,9 @@ def backport_conflicts_detection(sbox):
sbox.simple_commit(message='Re-nominate r4')
# Detect conflicts.
- exit_code, output, errput = run_backport(sbox, extra_env=["MAY_COMMIT=0"])
+ exit_code, output, errput = run_conflicter(sbox)
- # Verify stdout. (exit_code and errput were verified by run_backport().)
+ # Verify stdout. (exit_code and errput were verified by run_conflicter().)
svntest.verify.verify_outputs(None, output, errput,
"Conflicts found.*, as expected.", [])
@@ -501,7 +505,7 @@ def backport_double_conflict(sbox):
sbox.simple_commit(message='Nominate the r4 group')
# Run it, in conflicts mode.
- exit_code, output, errput = run_backport(sbox, True, ["MAY_COMMIT=0"])
+ exit_code, output, errput = run_conflicter(sbox, True)
# Verify the failure mode: "merge conflict" error on stderr, but backport.pl
# itself exits with code 0, since conflicts were confined to Depends:-ed
@@ -541,13 +545,16 @@ def backport_double_conflict(sbox):
sbox.simple_append(STATUS, serialize_STATUS(approved_entries), truncate=True)
sbox.simple_commit(message='Re-nominate the r4 group')
- exit_code, output, errput = run_backport(sbox, True, ["MAY_COMMIT=0"])
+ exit_code, output, errput = run_conflicter(sbox, True)
+ ## An unexpected non-zero exit code is treated as a fatal error.
# [1-9]\d+ matches non-zero exit codes
- expected_errput = r'r4 .*: subshell exited with code (?:[1-9]\d+)'
+ expected_stdout = None
+ expected_errput = r'r4 .*: subshell exited with code (?:[1-9]\d+)' \
+ r"|.*subprocess.CalledProcessError.*'merge'.*exit status 1"
svntest.verify.verify_exit_code(None, exit_code, 1)
svntest.verify.verify_outputs(None, output, errput,
- svntest.verify.AnyOutput, expected_errput)
+ expected_stdout, expected_errput)
@@ -590,6 +597,55 @@ def backport_branch_with_original_revisi
#----------------------------------------------------------------------
+@BackportTest(None)
+def backport_otherproject_change(sbox):
+ "inoperative revision"
+
+ # r6: a change outside ^/subversion
+ sbox.simple_mkdir('elsewhere')
+ sbox.simple_commit()
+
+ # r7: Nominate r6 by mistake
+ approved_entries = [
+ make_entry([6])
+ ]
+ sbox.simple_append(STATUS, serialize_STATUS(approved_entries))
+ sbox.simple_commit(message='Nominate r6 by mistake')
+
+ # Run it.
+ exit_code, output, errput = run_backport(sbox, error_expected=True)
+
+ # Verify no commit occurred.
+ svntest.actions.run_and_verify_svnlook(["7\n"], [],
+ 'youngest', sbox.repo_dir)
+
+ # Verify the failure mode.
+ expected_stdout = None
+ expected_stderr = ".*only svn:mergeinfo changes.*"
+ if exit_code == 0:
+ # Can't use verify_exit_code() since the exact code used varies.
+ raise svntest.Failure("exit_code should be non-zero")
+ svntest.verify.verify_outputs(None, output, errput,
+ expected_stdout, expected_stderr)
+
+#----------------------------------------------------------------------
+@BackportTest(None)
+def backport_STATUS_mods(sbox):
+ "local mods to STATUS"
+
+ # Introduce a local mod.
+ sbox.simple_append(STATUS, "\n")
+
+ exit_code, output, errput = run_backport(sbox, error_expected=True)
+ expected_stdout = None
+ expected_stderr = ".*Local mods.*STATUS.*"
+ if exit_code == 0:
+ # Can't use verify_exit_code() since the exact code used varies.
+ raise svntest.Failure("exit_code should be non-zero")
+ svntest.verify.verify_outputs(None, output, errput,
+ expected_stdout, expected_stderr)
+
+#----------------------------------------------------------------------
########################################################################
# Run the tests
@@ -605,6 +661,8 @@ test_list = [ None,
backport_branch_contains,
backport_double_conflict,
backport_branch_with_original_revision,
+ backport_otherproject_change,
+ backport_STATUS_mods,
# When adding a new test, include the test number in the last
# 6 bytes of the UUID.
]
Propchange: subversion/branches/ra-git/tools/dist/backport_tests.py
('svn:executable' removed)
Modified: subversion/branches/ra-git/tools/dist/rat-excludes
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dist/rat-excludes?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dist/rat-excludes (original)
+++ subversion/branches/ra-git/tools/dist/rat-excludes Mon Nov 30 10:24:16 2015
@@ -32,7 +32,7 @@ subversion/bindings/ctypes-python/csvn/e
subversion/tests/cmdline/svntest/err.py
tools/buildbot/master/public_html/buildbot.css
tools/dist/rat-excludes
-tools/dist/_gnupg.py
+tools/dist/security/_gnupg.py
tools/dist/templates/*.ezt
tools/dev/iz/defect.dem
tools/dev/iz/ff2csv.command
Modified: subversion/branches/ra-git/tools/dist/release.py
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dist/release.py?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dist/release.py (original)
+++ subversion/branches/ra-git/tools/dist/release.py Mon Nov 30 10:24:16 2015
@@ -34,9 +34,6 @@
# It'd be kind of nice to use the Subversion python bindings in this script,
# but people.apache.org doesn't currently have them installed
-# Futures (Python 2.5 compatibility)
-from __future__ import with_statement
-
# Stuff we need
import os
import re
@@ -86,13 +83,13 @@ except AttributeError:
tool_versions = {
'trunk' : {
'autoconf' : '2.69',
- 'libtool' : '2.4.3',
- 'swig' : '3.0.0',
+ 'libtool' : '2.4.6',
+ 'swig' : '2.0.12',
},
'1.9' : {
'autoconf' : '2.69',
- 'libtool' : '2.4.3',
- 'swig' : '3.0.0'
+ 'libtool' : '2.4.6',
+ 'swig' : '2.0.12'
},
'1.8' : {
'autoconf' : '2.69',
@@ -356,6 +353,13 @@ class LibtoolDep(RollDep):
# system libtool (I'm looking at you, Debian).
return False
+ def build(self):
+ RollDep.build(self)
+ # autogen.sh looks for glibtoolize before libtoolize
+ bin_dir = os.path.join(get_prefix(self._base_dir), "bin")
+ os.symlink("libtoolize", os.path.join(bin_dir, "glibtoolize"))
+ os.symlink("libtool", os.path.join(bin_dir, "glibtool"))
+
class SwigDep(RollDep):
def __init__(self, base_dir, use_existing, verbose, swig_ver, sf_mirror):
@@ -421,6 +425,29 @@ def compare_changes(repos, branch, revis
logging.warning('CHANGES has unmerged revisions: %s' %
stdout.replace("\n", " "))
+
+_current_year = str(datetime.datetime.now().year)
+_copyright_re = re.compile(r'Copyright (?:\(C\) )?(?P<year>[0-9]+)'
+ r' The Apache Software Foundation',
+ re.MULTILINE)
+
+def check_copyright_year(repos, branch, revision):
+ def check_file(branch_relpath):
+ file_url = (repos + '/' + branch + '/'
+ + branch_relpath + '@' + str(revision))
+ cat_cmd = ['svn', 'cat', file_url]
+ stdout = subprocess.check_output(cat_cmd)
+ m = _copyright_re.search(stdout)
+ if m:
+ year = m.group('year')
+ else:
+ year = None
+ if year != _current_year:
+ logging.warning('Copyright year in ' + branch_relpath
+ + ' is not the current year')
+ check_file('NOTICE')
+ check_file('subversion/libsvn_subr/version.c')
+
def roll_tarballs(args):
'Create the release artifacts.'
@@ -432,6 +459,8 @@ def roll_tarballs(args):
logging.info('Rolling release %s from branch %s@%d' % (args.version,
branch, args.revnum))
+ check_copyright_year(repos, args.branch, args.revnum)
+
# Ensure we've got the appropriate rolling dependencies available
autoconf = AutoconfDep(args.base_dir, False, args.verbose,
tool_versions[args.version.branch]['autoconf'])
@@ -774,7 +803,7 @@ def get_siginfo(args, quiet=False):
try:
import gnupg
except ImportError:
- import _gnupg as gnupg
+ import security._gnupg as gnupg
gpg = gnupg.GPG()
target = get_target(args)
Modified: subversion/branches/ra-git/tools/dist/templates/rc-news.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dist/templates/rc-news.ezt?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dist/templates/rc-news.ezt (original)
+++ subversion/branches/ra-git/tools/dist/templates/rc-news.ezt Mon Nov 30 10:24:16 2015
@@ -16,7 +16,7 @@
in the [version_base] release.</p>
<p>To get this release from the nearest mirror, please visit our
- <a href="/download/#[anchor]">download page</a>.</p>
+ <a href="/download.cgi#[anchor]">download page</a>.</p>
</div> <!-- #news-[date] -->
Modified: subversion/branches/ra-git/tools/dist/templates/rc-release-ann.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dist/templates/rc-release-ann.ezt?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dist/templates/rc-release-ann.ezt (original)
+++ subversion/branches/ra-git/tools/dist/templates/rc-release-ann.ezt Mon Nov 30 10:24:16 2015
@@ -1,7 +1,7 @@
I'm happy to announce the release of Apache Subversion [version].
Please choose the mirror closest to you by visiting:
- http://subversion.apache.org/download/#[anchor]
+ http://subversion.apache.org/download.cgi#[anchor]
The SHA1 checksums are:
Modified: subversion/branches/ra-git/tools/dist/templates/stable-news.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dist/templates/stable-news.ezt?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dist/templates/stable-news.ezt (original)
+++ subversion/branches/ra-git/tools/dist/templates/stable-news.ezt Mon Nov 30 10:24:16 2015
@@ -13,7 +13,7 @@
>change log</a> for more information about this release.</p>
<p>To get this release from the nearest mirror, please visit our
- <a href="/download/#[anchor]">download page</a>.</p>
+ <a href="/download.cgi#[anchor]">download page</a>.</p>
</div> <!-- #news-[date] -->
Modified: subversion/branches/ra-git/tools/dist/templates/stable-release-ann.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/tools/dist/templates/stable-release-ann.ezt?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/tools/dist/templates/stable-release-ann.ezt (original)
+++ subversion/branches/ra-git/tools/dist/templates/stable-release-ann.ezt Mon Nov 30 10:24:16 2015
@@ -1,7 +1,7 @@
I'm happy to announce the release of Apache Subversion [version].
Please choose the mirror closest to you by visiting:
- http://subversion.apache.org/download/#[anchor]
+ http://subversion.apache.org/download.cgi#[anchor]
The SHA1 checksums are:
Modified: subversion/branches/ra-git/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/win-tests.py?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/win-tests.py (original)
+++ subversion/branches/ra-git/win-tests.py Mon Nov 30 10:24:16 2015
@@ -31,6 +31,8 @@ import os, sys, subprocess
import filecmp
import shutil
import traceback
+import logging
+import re
try:
# Python >=3.0
import configparser
@@ -59,7 +61,6 @@ def _usage_exit():
print(" -u URL, --url=URL : run ra_dav or ra_svn tests against URL;")
print(" will start svnserve for ra_svn tests")
print(" -v, --verbose : talk more")
- print(" -q, --quiet : talk less")
print(" -f, --fs-type=type : filesystem type to use (fsfs is default)")
print(" -c, --cleanup : cleanup after running a test")
print(" -t, --test=TEST : Run the TEST test (all is default); use")
@@ -83,6 +84,16 @@ def _usage_exit():
print(" --disable-http-v2 : Do not advertise support for HTTPv2 on server")
print(" --disable-bulk-updates : Disable bulk updates on HTTP server")
print(" --ssl-cert : Path to SSL server certificate to trust.")
+ print(" --https : Run Apache httpd with an https setup.")
+ print(" --http2 : Enable http2 in Apache Httpd (>= 2.4.17).")
+ print(" --global-scheduler : Enable global scheduler.")
+ print(" --exclusive-wc-locks : Enable exclusive working copy locks")
+ print(" --memcached-dir=DIR : Run memcached from dir")
+ print(" --memcached-server= : Enable usage of the specified memcached server")
+ print(" <url:port>")
+ print(" --skip-c-tests : Skip all C tests")
+ print(" --dump-load-cross-check: Run the dump load cross check after every test")
+
print(" --javahl : Run the javahl tests instead of the normal tests")
print(" --swig=language : Run the swig perl/python/ruby tests instead of")
print(" the normal tests")
@@ -101,6 +112,8 @@ def _usage_exit():
print(" --config-file : Configuration file for tests")
print(" --fsfs-sharding : Specify shard size (for fsfs)")
print(" --fsfs-packing : Run 'svnadmin pack' automatically")
+ print(" -q, --quiet : Deprecated; this is the default.")
+ print(" Use --set-log-level instead.")
sys.exit(0)
@@ -120,19 +133,23 @@ gen_obj = gen_win_dependencies.GenDepend
opts, args = my_getopt(sys.argv[1:], 'hrdvqct:pu:f:',
['release', 'debug', 'verbose', 'quiet', 'cleanup',
'test=', 'url=', 'svnserve-args=', 'fs-type=', 'asp.net-hack',
- 'httpd-dir=', 'httpd-port=', 'httpd-daemon',
+ 'httpd-dir=', 'httpd-port=', 'httpd-daemon', 'https',
'httpd-server', 'http-short-circuit', 'httpd-no-log',
'disable-http-v2', 'disable-bulk-updates', 'help',
'fsfs-packing', 'fsfs-sharding=', 'javahl', 'swig=',
- 'list', 'enable-sasl', 'bin=', 'parallel',
+ 'list', 'enable-sasl', 'bin=', 'parallel', 'http2',
+ 'global-scheduler',
'config-file=', 'server-minor-version=', 'log-level=',
'log-to-stdout', 'mode-filter=', 'milestone-filter=',
- 'ssl-cert='])
+ 'ssl-cert=', 'exclusive-wc-locks', 'memcached-server=',
+ 'skip-c-tests', 'dump-load-cross-check', 'memcached-dir=',
+ ])
if len(args) > 1:
print('Warning: non-option arguments after the first one will be ignored')
# Interpret the options and set parameters
-base_url, fs_type, verbose, quiet, cleanup = None, None, None, None, None
+base_url, fs_type, verbose, cleanup = None, None, None, None
+global_scheduler = None
repo_loc = 'local repository.'
objdir = 'Debug'
log = 'tests.log'
@@ -143,6 +160,8 @@ run_httpd = None
httpd_port = None
httpd_service = None
httpd_no_log = None
+use_ssl = False
+use_http2 = False
http_short_circuit = False
advertise_httpv2 = True
http_bulk_updates = True
@@ -162,6 +181,12 @@ mode_filter=None
tests_to_run = []
log_level = None
ssl_cert = None
+exclusive_wc_locks = None
+run_memcached = None
+memcached_server = None
+memcached_dir = None
+skip_c_tests = None
+dump_load_cross_check = None
for opt, val in opts:
if opt in ('-h', '--help'):
@@ -172,8 +197,7 @@ for opt, val in opts:
fs_type = val
elif opt in ('-v', '--verbose'):
verbose = 1
- elif opt in ('-q', '--quiet'):
- quiet = 1
+ log_level = logging.DEBUG
elif opt in ('-c', '--cleanup'):
cleanup = 1
elif opt in ('-t', '--test'):
@@ -198,6 +222,10 @@ for opt, val in opts:
httpd_service = 1
elif opt == '--httpd-no-log':
httpd_no_log = 1
+ elif opt == '--https':
+ use_ssl = 1
+ elif opt == '--http2':
+ use_http2 = 1
elif opt == '--http-short-circuit':
http_short_circuit = True
elif opt == '--disable-http-v2':
@@ -210,6 +238,8 @@ for opt, val in opts:
fsfs_packing = 1
elif opt == '--javahl':
test_javahl = 1
+ elif opt == '--global-scheduler':
+ global_scheduler = 1
elif opt == '--swig':
if val not in ['perl', 'python', 'ruby']:
sys.stderr.write('Running \'%s\' swig tests not supported (yet).\n'
@@ -225,7 +255,7 @@ for opt, val in opts:
enable_sasl = 1
base_url = "svn://localhost/"
elif opt == '--server-minor-version':
- server_minor_version = val
+ server_minor_version = int(val)
elif opt == '--bin':
svn_bin = val
elif opt in ('-p', '--parallel'):
@@ -235,9 +265,20 @@ for opt, val in opts:
elif opt == '--log-to-stdout':
log_to_stdout = 1
elif opt == '--log-level':
- log_level = val
+ log_level = getattr(logging, val, None) or int(val)
elif opt == '--ssl-cert':
ssl_cert = val
+ elif opt == '--exclusive-wc-locks':
+ exclusive_wc_locks = 1
+ elif opt == '--memcached-server':
+ memcached_server = val
+ elif opt == '--skip-c-tests':
+ skip_c_tests = 1
+ elif opt == '--dump-load-cross-check':
+ dump_load_cross_check = 1
+ elif opt == '--memcached-dir':
+ memcached_dir = val
+ run_memcached = 1
# Calculate the source and test directory names
abs_srcdir = os.path.abspath("")
@@ -265,7 +306,12 @@ if run_httpd:
if not httpd_port:
httpd_port = random.randrange(1024, 30000)
if not base_url:
- base_url = 'http://localhost:' + str(httpd_port)
+ if use_ssl:
+ scheme = 'https'
+ else:
+ scheme = 'http'
+
+ base_url = '%s://localhost:%d' % (scheme, httpd_port)
if base_url:
repo_loc = 'remote repository ' + base_url + '.'
@@ -406,7 +452,9 @@ class Svnserve:
args = [self.name] + self.args
print('Starting %s %s' % (self.kind, self.name))
- self.proc = subprocess.Popen([self.path] + args[1:])
+ env = os.environ.copy()
+ env['SVN_DBG_STACKTRACES_TO_STDERR'] = 'y'
+ self.proc = subprocess.Popen([self.path] + args[1:], env=env)
def stop(self):
if self.proc is not None:
@@ -422,8 +470,9 @@ class Svnserve:
class Httpd:
"Run httpd for DAV tests"
- def __init__(self, abs_httpd_dir, abs_objdir, abs_builddir, httpd_port,
- service, no_log, httpv2, short_circuit, bulk_updates):
+ def __init__(self, abs_httpd_dir, abs_objdir, abs_builddir, abs_srcdir,
+ httpd_port, service, use_ssl, use_http2, no_log, httpv2,
+ short_circuit, bulk_updates):
self.name = 'apache.exe'
self.httpd_port = httpd_port
self.httpd_dir = abs_httpd_dir
@@ -461,11 +510,19 @@ class Httpd:
self.dontdothat_file = os.path.join(abs_builddir,
CMDLINE_TEST_SCRIPT_NATIVE_PATH,
'svn-test-work', 'dontdothat')
+ self.certfile = os.path.join(abs_builddir,
+ CMDLINE_TEST_SCRIPT_NATIVE_PATH,
+ 'svn-test-work', 'cert.pem')
+ self.certkeyfile = os.path.join(abs_builddir,
+ CMDLINE_TEST_SCRIPT_NATIVE_PATH,
+ 'svn-test-work', 'cert-key.pem')
self.httpd_config = os.path.join(self.root, 'httpd.conf')
self.httpd_users = os.path.join(self.root, 'users')
self.httpd_mime_types = os.path.join(self.root, 'mime.types')
+ self.httpd_groups = os.path.join(self.root, 'groups')
self.abs_builddir = abs_builddir
self.abs_objdir = abs_objdir
+ self.abs_srcdir = abs_srcdir
self.service_name = 'svn-test-httpd-' + str(httpd_port)
if self.service:
@@ -477,9 +534,13 @@ class Httpd:
create_target_dir(self.root_dir)
self._create_users_file()
+ self._create_groups_file()
self._create_mime_types_file()
self._create_dontdothat_file()
+ if use_ssl:
+ self._create_cert_files()
+
# Obtain version.
version_vals = gen_obj._libraries['httpd'].version.split('.')
self.httpd_ver = float('%s.%s' % (version_vals[0], version_vals[1]))
@@ -488,9 +549,10 @@ class Httpd:
fp = open(self.httpd_config, 'w')
# Limit the number of threads (default = 64)
- fp.write('<IfModule mpm_winnt.c>\n')
- fp.write('ThreadsPerChild 16\n')
- fp.write('</IfModule>\n')
+ if not use_http2:
+ fp.write('<IfModule mpm_winnt.c>\n')
+ fp.write('ThreadsPerChild 16\n')
+ fp.write('</IfModule>\n')
# Global Environment
fp.write('ServerRoot ' + self._quote(self.root) + '\n')
@@ -508,6 +570,10 @@ class Httpd:
fp.write('LogLevel Crit\n')
# Write LoadModule for minimal system module
+ if use_ssl:
+ fp.write(self._sys_module('ssl_module', 'mod_ssl.so'))
+ if use_http2:
+ fp.write(self._sys_module('http2_module', 'mod_http2.so'))
fp.write(self._sys_module('dav_module', 'mod_dav.so'))
if self.httpd_ver >= 2.3:
fp.write(self._sys_module('access_compat_module', 'mod_access_compat.so'))
@@ -517,6 +583,8 @@ class Httpd:
if self.httpd_ver >= 2.2:
fp.write(self._sys_module('auth_basic_module', 'mod_auth_basic.so'))
fp.write(self._sys_module('authn_file_module', 'mod_authn_file.so'))
+ fp.write(self._sys_module('authz_groupfile_module', 'mod_authz_groupfile.so'))
+ fp.write(self._sys_module('authz_host_module', 'mod_authz_host.so'))
else:
fp.write(self._sys_module('auth_module', 'mod_auth.so'))
fp.write(self._sys_module('alias_module', 'mod_alias.so'))
@@ -530,6 +598,18 @@ class Httpd:
# And for mod_dontdothat
fp.write(self._svn_module('dontdothat_module', 'mod_dontdothat.so'))
+ if use_ssl:
+ fp.write('SSLEngine on\n')
+ fp.write('SSLProtocol All -SSLv2 -SSLv3\n')
+ fp.write('SSLCertificateFile %s\n' % self._quote(self.certfile))
+ fp.write('SSLCertificateKeyFile %s\n' % self._quote(self.certkeyfile))
+
+ if use_ssl and use_http2:
+ fp.write('Protocols h2 http/1.1\n')
+ elif use_http2:
+ fp.write('Protocols h2c http/1.1\n')
+ fp.write('H2Direct on\n')
+
# Don't handle .htaccess, symlinks, etc.
fp.write('<Directory />\n')
fp.write('AllowOverride None\n')
@@ -539,6 +619,7 @@ class Httpd:
# Define two locations for repositories
fp.write(self._svn_repo('repositories'))
fp.write(self._svn_repo('local_tmp'))
+ fp.write(self._svn_authz_repo())
# And two redirects for the redirect tests
fp.write('RedirectMatch permanent ^/svn-test-work/repositories/'
@@ -569,6 +650,19 @@ class Httpd:
'jrandom', 'rayjandom'])
os.spawnv(os.P_WAIT, htpasswd, ['htpasswd.exe', '-bp', self.httpd_users,
'jconstant', 'rayjandom'])
+ os.spawnv(os.P_WAIT, htpasswd, ['htpasswd.exe', '-bp', self.httpd_users,
+ '__dumpster__', '__loadster__'])
+ os.spawnv(os.P_WAIT, htpasswd, ['htpasswd.exe', '-bp', self.httpd_users,
+ 'JRANDOM', 'rayjandom'])
+ os.spawnv(os.P_WAIT, htpasswd, ['htpasswd.exe', '-bp', self.httpd_users,
+ 'JCONSTANT', 'rayjandom'])
+
+ def _create_groups_file(self):
+ "Create groups for mod_authz_svn tests"
+ fp = open(self.httpd_groups, 'w')
+ fp.write('random: jrandom\n')
+ fp.write('constant: jconstant\n')
+ fp.close()
def _create_mime_types_file(self):
"Create empty mime.types file"
@@ -588,6 +682,34 @@ class Httpd:
fp.write('/ = deny\n')
fp.close()
+ def _create_cert_files(self):
+ "Create certificate files"
+ # The unix build uses certificates encoded in davautocheck.sh
+ # Let's just read them from there
+
+ sh_path = os.path.join(self.abs_srcdir, 'subversion', 'tests', 'cmdline',
+ 'davautocheck.sh')
+ sh = open(sh_path).readlines()
+
+ def cert_extract(lines, what):
+ r = []
+ pattern = r'cat\s*\>\s*' + re.escape(what) + r'\s*\<\<([A-Z_a-z0-9]+)'
+ exit_marker = None
+ for i in lines:
+ if exit_marker:
+ if i.startswith(exit_marker):
+ return r
+ r.append(i)
+ else:
+ m = re.match(pattern, i)
+ if m:
+ exit_marker = m.groups(1)
+
+ cert_file = cert_extract(sh, '"$SSL_CERTIFICATE_FILE"')
+ cert_key = cert_extract(sh, '"$SSL_CERTIFICATE_KEY_FILE"')
+ open(self.certfile, 'w').write(''.join(cert_file))
+ open(self.certkeyfile, 'w').write(''.join(cert_key))
+
def _sys_module(self, name, path):
full_path = os.path.join(self.httpd_dir, 'modules', path)
return 'LoadModule ' + name + " " + self._quote(full_path) + '\n'
@@ -629,12 +751,163 @@ class Httpd:
' DontDoThatConfigFile ' + self._quote(self.dontdothat_file) + '\n' \
'</Location>\n'
+ def _svn_authz_repo(self):
+ local_tmp = os.path.join(self.abs_builddir,
+ CMDLINE_TEST_SCRIPT_NATIVE_PATH,
+ 'svn-test-work', 'local_tmp')
+ return \
+ '<Location /authz-test-work/anon>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' <IfModule mod_authz_core.c>' + '\n' \
+ ' Require all granted' + '\n' \
+ ' </IfModule>' + '\n' \
+ ' <IfModule !mod_authz_core.c>' + '\n' \
+ ' Allow from all' + '\n' \
+ ' </IfModule>' + '\n' \
+ ' SVNPathAuthz ' + self.path_authz_option + '\n' \
+ '</Location>' + '\n' \
+ '<Location /authz-test-work/mixed>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' Require valid-user' + '\n' \
+ ' Satisfy Any' + '\n' \
+ ' SVNPathAuthz ' + self.path_authz_option + '\n' \
+ '</Location>' + '\n' \
+ '<Location /authz-test-work/mixed-noauthwhenanon>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' Require valid-user' + '\n' \
+ ' AuthzSVNNoAuthWhenAnonymousAllowed On' + '\n' \
+ ' SVNPathAuthz On' + '\n' \
+ '</Location>' + '\n' \
+ '<Location /authz-test-work/authn>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' Require valid-user' + '\n' \
+ ' SVNPathAuthz ' + self.path_authz_option + '\n' \
+ '</Location>' + '\n' \
+ '<Location /authz-test-work/authn-anonoff>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' Require valid-user' + '\n' \
+ ' AuthzSVNAnonymous Off' + '\n' \
+ ' SVNPathAuthz On' + '\n' \
+ '</Location>' + '\n' \
+ '<Location /authz-test-work/authn-lcuser>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' Require valid-user' + '\n' \
+ ' AuthzForceUsernameCase Lower' + '\n' \
+ ' SVNPathAuthz ' + self.path_authz_option + '\n' \
+ '</Location>' + '\n' \
+ '<Location /authz-test-work/authn-lcuser>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' Require valid-user' + '\n' \
+ ' AuthzForceUsernameCase Lower' + '\n' \
+ ' SVNPathAuthz ' + self.path_authz_option + '\n' \
+ '</Location>' + '\n' \
+ '<Location /authz-test-work/authn-group>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' AuthGroupFile ' + self._quote(self.httpd_groups) + '\n' \
+ ' Require group random' + '\n' \
+ ' AuthzSVNAuthoritative Off' + '\n' \
+ ' SVNPathAuthz On' + '\n' \
+ '</Location>' + '\n' \
+ '<IfModule mod_authz_core.c>' + '\n' \
+ '<Location /authz-test-work/sallrany>' + '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' AuthzSendForbiddenOnFailure On' + '\n' \
+ ' Satisfy All' + '\n' \
+ ' <RequireAny>' + '\n' \
+ ' Require valid-user' + '\n' \
+ ' Require expr req(\'ALLOW\') == \'1\'' + '\n' \
+ ' </RequireAny>' + '\n' \
+ ' SVNPathAuthz ' + self.path_authz_option + '\n' \
+ '</Location>' + '\n' \
+ '<Location /authz-test-work/sallrall>'+ '\n' \
+ ' DAV svn' + '\n' \
+ ' SVNParentPath ' + local_tmp + '\n' \
+ ' AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
+ ' SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
+ ' SVNListParentPath On' + '\n' \
+ ' AuthType Basic' + '\n' \
+ ' AuthName "Subversion Repository"' + '\n' \
+ ' AuthUserFile ' + self._quote(self.httpd_users) + '\n' \
+ ' AuthzSendForbiddenOnFailure On' + '\n' \
+ ' Satisfy All' + '\n' \
+ ' <RequireAll>' + '\n' \
+ ' Require valid-user' + '\n' \
+ ' Require expr req(\'ALLOW\') == \'1\'' + '\n' \
+ ' </RequireAll>' + '\n' \
+ ' SVNPathAuthz ' + self.path_authz_option + '\n' \
+ '</Location>' + '\n' \
+ '</IfModule>' + '\n' \
+
def start(self):
if self.service:
self._start_service()
else:
self._start_daemon()
+ # Avoid output from starting and preparing between test results
+ sys.stderr.flush()
+ sys.stdout.flush()
+
def stop(self):
if self.service:
self._stop_service()
@@ -672,6 +945,45 @@ class Httpd:
pass
print('Httpd.stop_daemon not implemented')
+class Memcached:
+ "Run memcached for tests"
+ def __init__(self, abs_memcached_dir, memcached_server):
+ self.name = 'memcached.exe'
+
+ self.memcached_host, self.memcached_port = memcached_server.split(':')
+ self.memcached_dir = abs_memcached_dir
+
+ self.proc = None
+ self.path = os.path.join(self.memcached_dir, self.name)
+
+ self.memcached_args = [
+ self.name,
+ '-p', self.memcached_port,
+ '-l', self.memcached_host
+ ]
+
+ def __del__(self):
+ "Stop memcached when the object is deleted"
+ self.stop()
+
+ def start(self):
+ "Start memcached as daemon"
+ print('Starting %s as daemon' % self.name)
+ print(self.memcached_args)
+ self.proc = subprocess.Popen([self.path] + self.memcached_args)
+
+ def stop(self):
+ "Stop memcached"
+ if self.proc is not None:
+ try:
+ print('Stopping %s' % self.name)
+ self.proc.poll();
+ if self.proc.returncode is None:
+ self.proc.kill();
+ return
+ except AttributeError:
+ pass
+
# Move the binaries to the test directory
create_target_dir(abs_builddir)
locate_libs()
@@ -692,19 +1004,27 @@ create_target_dir(CMDLINE_TEST_SCRIPT_NA
abs_builddir = fix_case(abs_builddir)
daemon = None
+memcached = None
# Run the tests
# No need to start any servers if we are only listing the tests.
if not list_tests:
+ if run_memcached:
+ memcached = Memcached(memcached_dir, memcached_server)
+ memcached.start()
+
if run_svnserve:
daemon = Svnserve(svnserve_args, objdir, abs_objdir, abs_builddir)
if run_httpd:
- daemon = Httpd(abs_httpd_dir, abs_objdir, abs_builddir, httpd_port,
- httpd_service, httpd_no_log,
- advertise_httpv2, http_short_circuit,
+ daemon = Httpd(abs_httpd_dir, abs_objdir, abs_builddir, abs_srcdir,
+ httpd_port, httpd_service, use_ssl, use_http2,
+ httpd_no_log, advertise_httpv2, http_short_circuit,
http_bulk_updates)
+ if use_ssl and not ssl_cert:
+ ssl_cert = daemon.certfile
+
# Start service daemon, if any
if daemon:
daemon.start()
@@ -750,16 +1070,36 @@ if not test_javahl and not test_swig:
log_file = os.path.join(abs_builddir, log)
fail_log_file = os.path.join(abs_builddir, faillog)
+ if run_httpd:
+ httpd_version = gen_obj._libraries['httpd'].version
+ else:
+ httpd_version = None
+
+ opts, args = run_tests.create_parser().parse_args([])
+ opts.url = base_url
+ opts.fs_type = fs_type
+ opts.global_scheduler = global_scheduler
+ opts.http_library = 'serf'
+ opts.server_minor_version = server_minor_version
+ opts.cleanup = cleanup
+ opts.enable_sasl = enable_sasl
+ opts.parallel = parallel
+ opts.config_file = config_file
+ opts.fsfs_sharding = fsfs_sharding
+ opts.fsfs_packing = fsfs_packing
+ opts.list_tests = list_tests
+ opts.svn_bin = svn_bin
+ opts.mode_filter = mode_filter
+ opts.milestone_filter = milestone_filter
+ opts.httpd_version = httpd_version
+ opts.set_log_level = log_level
+ opts.ssl_cert = ssl_cert
+ opts.exclusive_wc_locks = exclusive_wc_locks
+ opts.memcached_server = memcached_server
+ opts.skip_c_tests = skip_c_tests
+ opts.dump_load_cross_check = dump_load_cross_check
th = run_tests.TestHarness(abs_srcdir, abs_builddir,
- log_file,
- fail_log_file,
- base_url, fs_type, 'serf',
- server_minor_version, not quiet,
- cleanup, enable_sasl, parallel, config_file,
- fsfs_sharding, fsfs_packing,
- list_tests, svn_bin, mode_filter,
- milestone_filter,
- set_log_level=log_level, ssl_cert=ssl_cert)
+ log_file, fail_log_file, opts)
old_cwd = os.getcwd()
try:
os.chdir(abs_builddir)
@@ -792,6 +1132,9 @@ elif test_javahl:
if (objdir == 'Debug'):
args = args + ('-Xcheck:jni',)
+ if cleanup:
+ args = args + ('-Dtest.cleanup=1',)
+
args = args + (
'-Dtest.rootdir=' + os.path.join(abs_builddir, 'javahl'),
'-Dtest.srcdir=' + os.path.join(abs_srcdir,
@@ -976,6 +1319,9 @@ elif test_swig == 'ruby':
if daemon:
del daemon
+if memcached:
+ del memcached
+
# Remove the execs again
for tgt in copied_execs:
try: