Update Subversion to 1.14.1 LTS. See contrib/subversion/CHANGES for a

summary of changes, or for a more thorough overview:

https://subversion.apache.org/docs/release-notes/1.14

NOTE 1: There is no need to dump and reload repositories, and the
working copy format is still the same as Subversion 1.8 through 1.13.

NOTE 2: The upstream release also contains a fix for a security issue in
mod_dav_svn (CVE-2020-17525), but since we do not build or use any
Apache modules, it is not an issue for the FreeBSD base system.

Relnotes:	yes
MFC after:	3 days
This commit is contained in:
Dimitry Andric 2021-02-13 14:38:51 +01:00
parent 95138d09d2
commit 0ff1014944
37 changed files with 668 additions and 198 deletions

View File

@ -10,6 +10,7 @@ trim_trailing_whitespace = false
[**/Makefile*] [**/Makefile*]
indent_style = tab indent_style = tab
indent_size = 8
[build-outputs.mk] [build-outputs.mk]
indent_style = tab indent_style = tab

View File

@ -4,8 +4,51 @@
# To view an issue listed as (issue #XXXX), visit: # To view an issue listed as (issue #XXXX), visit:
# https://subversion.apache.org/issue-XXXX # https://subversion.apache.org/issue-XXXX
Version 1.14.1
(10 Feb 2021, from /branches/1.14.x)
User-visible changes:
- Client-side improvements and bugfixes:
* Fix non-deterministic generation of mergeinfo (issue #4862)
* Fix merge removing a folder with non-inheritable mergeinfo (issue #4859)
* Do not suggest --help -v for commands which do not support -v (r1882157)
* Fix invalid SQL quoting in working copy upgrade system (r1879198)
* Fix problems in human-readable file size formatting (r1878909, -18, -50)
* Improve an error message from svnmucc (r1877072)
* Fix 'svn info --xml' gives wrong 'source-right' of conflict (issue #4869)
* Fix filename encoding/quoting when invoking editor on Windows (r1885953)
* Convert filename for editor from UTF-8 to the locale's encoding (r1882234)
- Server-side improvements and bugfixes:
* Fix authz doesn't combine global and repository rules (issue #4762)
* Make the hot-backup.py script work with Python 3 (r1878855, r1878859)
* Fix an uninitialized read in FSFS (r1880374)
* Make mailer.py work properly with Python 3 (r1884427 et al)
* Fix a potential NULL dereference in the config file parser (r1886019)
Developer-visible changes:
- General:
* Restore support for building with APR 1.4 (r1881958, r1882128)
* Rewrite internal test data to avoid literal trailing spaces (r1875675)
* Remove use of os.dup2() from tests for Python 3.6 on Windows (r1883337)
* Note in INSTALL that non-release mode is required for Python 2 (r1877960)
* Make gen-make.py --debug work with Python 3 (r1876906)
* Make test suite run correctly with Python 3 on Windows (r1876707 et al)
* Fix compilation errors with Visual Studio 2008 (r1877259)
* Use Doxygen comment leader for comments with doxygen syntax (r1877794)
- Bindings:
* Fix win-tests.py to load Python 3 bindings with debug config (r1884642)
* Fix C4204 errors building swig-py with Python 3.9 on Windows (r1883570)
* Fix unable to load *.pyd files with Python 3.8.x on Windows (r1883335)
* Add SWIG4 support for SWIG Python binding on Windows (r1877338)
* Fix incorrect cache in JavaHL SVNBase::createCppBoundObject (r1882115)
* Fix crash in JavaHL JNI wrapper caused by object lifetimes (r1880886)
* autogen.sh: Remove .swig_*_checked files from release tarballs (r1878413)
* Avoid version check for Python if --without-swig is used (r1876662)
* siwg-py: Fix a syntax error for Python 3.6 and later (r1885112)
* Fix several crashes and JNI warnings in javahl TunnelAgent (r1886029)
Version 1.14.0 Version 1.14.0
(6 May 2020, from /branches/1.14.x) (27 May 2020, from /branches/1.14.x)
https://svn.apache.org/repos/asf/subversion/tags/1.14.0 https://svn.apache.org/repos/asf/subversion/tags/1.14.0
User-visible changes: User-visible changes:
@ -222,6 +265,29 @@ http://svn.apache.org/repos/asf/subversion/tags/1.11.0
* Fix a potential crash in JavaHL (issue #4764) * Fix a potential crash in JavaHL (issue #4764)
Version 1.10.7
(10 Feb 2021, from /branches/1.10.x)
User-visible changes:
- Client-side bugfixes:
* Fix 'svn patch' setting mode 0600 on patched files with props (r1864440)
* Fix invalid SQL quoting in working copy upgrade system (r1879198)
* Fix non-deterministic generation of mergeinfo (issue #4862)
* Fix a crash seen when using git-svn with kwallet (r1875680)
* Fix merge removing a folder with non-inheritable mergeinfo (issue #4859)
* Fix 'svn info --xml' gives wrong 'source-right' of conflict (issue #4869)
- Server-side bugfixes:
* mod_dav_svn: install cleanup handler for FS warning logging (r1865266)
* mod_dav_svn: Fix missing Last-Modified header on 'external' GET requests (r1866425)
* Fix formatting type size mismatches in FSFS (r1865987, -8)
* Fix an undefined behavior problem in FSFS caching code (r1876054)
* Fix a potential NULL dereference in the config file parser (r1886019)
Developer-visible changes:
* Fix Requires(.private) fields in pkg-config files (r1863987, -90)
* Fix crash in JavaHL JNI wrapper caused by object lifetimes (r1880886)
* Fix an EOL issue in tests on Windows (r1881985 et al)
Version 1.10.6 Version 1.10.6
(24 Jul 2019, from /branches/1.10.x) (24 Jul 2019, from /branches/1.10.x)
https://svn.apache.org/repos/asf/subversion/tags/1.10.6 https://svn.apache.org/repos/asf/subversion/tags/1.10.6

View File

@ -3,7 +3,7 @@
A Quick Guide A Quick Guide
====================================== ======================================
$LastChangedDate: 2020-02-17 03:49:42 +0000 (Mon, 17 Feb 2020) $ $LastChangedDate: 2020-12-18 04:00:24 +0000 (Fri, 18 Dec 2020) $
Contents: Contents:
@ -206,7 +206,7 @@ I. INTRODUCTION
commands described in section II.B before installing the following. commands described in section II.B before installing the following.
1. Apache Portable Runtime 1.5 or newer (REQUIRED) 1. Apache Portable Runtime 1.4 or newer (REQUIRED)
Whenever you want to build any part of Subversion, you need the Whenever you want to build any part of Subversion, you need the
Apache Portable Runtime (APR) and the APR Utility (APR-util) Apache Portable Runtime (APR) and the APR Utility (APR-util)
@ -506,6 +506,12 @@ I. INTRODUCTION
reached end of life. All users are strongly encouraged to move reached end of life. All users are strongly encouraged to move
to Python 3. to Python 3.
Note: If you are using a Subversion distribution tarball and want
to build the Python bindings for Python 2, you should rebuild
the build environment in non-release mode by running
'sh autogen.sh' before running the ./configure script; see
section II.B for more about autogen.sh.
13. Perl 5.8 or newer (Windows only) (OPTIONAL) 13. Perl 5.8 or newer (Windows only) (OPTIONAL)
@ -832,7 +838,7 @@ II. INSTALLATION
needed to compile Apache. Note that this is the actual awk program, needed to compile Apache. Note that this is the actual awk program,
not an installer - just rename it to awk.exe and it is ready to use. not an installer - just rename it to awk.exe and it is ready to use.
* Apache apr, apr-util, and optionally apr-iconv libraries, version * Apache apr, apr-util, and optionally apr-iconv libraries, version
1.5 or later (1.2 for apr-iconv). If you are building from a Subversion 1.4 or later (1.2 for apr-iconv). If you are building from a Subversion
checkout and have not downloaded Apache 2, then get these 3 libraries checkout and have not downloaded Apache 2, then get these 3 libraries
from https://www.apache.org/dist/apr/. from https://www.apache.org/dist/apr/.
* SQLite 3.8.2 or higher from https://www.sqlite.org/download.html * SQLite 3.8.2 or higher from https://www.sqlite.org/download.html

View File

@ -1,5 +1,5 @@
Apache Subversion Apache Subversion
Copyright 2020 The Apache Software Foundation Copyright 2021 The Apache Software Foundation
This product includes software developed by many people, and distributed This product includes software developed by many people, and distributed
under Contributor License Agreements to The Apache Software Foundation under Contributor License Agreements to The Apache Software Foundation

View File

@ -178,8 +178,8 @@ if test -n "$RELEASE_MODE"; then
# Build the SWIG-related files # Build the SWIG-related files
make -f autogen-standalone.mk autogen-swig || gen_failed=1 make -f autogen-standalone.mk autogen-swig || gen_failed=1
# Remove the .swig_checked file # Remove the .swig_*checked files
rm -f .swig_checked rm -f .swig_checked .swig_pl_checked .swig_py_checked .swig_rb_checked
fi fi
if test -n "$SKIP_DEPS"; then if test -n "$SKIP_DEPS"; then

File diff suppressed because one or more lines are too long

View File

@ -53,6 +53,7 @@ private-includes =
subversion/libsvn_subr/utf8proc/utf8proc_internal.h subversion/libsvn_subr/utf8proc/utf8proc_internal.h
subversion/libsvn_subr/utf8proc/utf8proc.c subversion/libsvn_subr/utf8proc/utf8proc.c
subversion/libsvn_subr/utf8proc/utf8proc_data.c subversion/libsvn_subr/utf8proc/utf8proc_data.c
subversion/svn/filesize.c
private-built-includes = private-built-includes =
subversion/svn_private_config.h subversion/svn_private_config.h
subversion/libsvn_fs_fs/rep-cache-db.h subversion/libsvn_fs_fs/rep-cache-db.h
@ -1338,6 +1339,18 @@ install = test
libs = libsvn_client libsvn_test libsvn_wc libsvn_subr apriconv apr libs = libsvn_client libsvn_test libsvn_wc libsvn_subr apriconv apr
msvc-force-static = yes msvc-force-static = yes
# ----------------------------------------------------------------------------
# Tests for the client's internal functions
[filesize-test]
description = Test conversion of file sizes to human-readable form
type = exe
path = subversion/tests/client
sources = filesize-test.c
install = test
libs = libsvn_client libsvn_test libsvn_wc libsvn_subr apriconv apr
msvc-force-static = yes
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# These are not unit tests at all, they are small programs that exercise # These are not unit tests at all, they are small programs that exercise
# parts of the libsvn_delta API from the command line. They are stuck here # parts of the libsvn_delta API from the command line. They are stuck here
@ -1565,7 +1578,7 @@ libs = __ALL__
checksum-test compat-test config-test hashdump-test mergeinfo-test checksum-test compat-test config-test hashdump-test mergeinfo-test
opt-test packed-data-test path-test prefix-string-test opt-test packed-data-test path-test prefix-string-test
priority-queue-test root-pools-test stream-test priority-queue-test root-pools-test stream-test
string-test time-test utf-test bit-array-test string-test time-test utf-test bit-array-test filesize-test
error-test error-code-test cache-test spillbuf-test crypto-test error-test error-code-test cache-test spillbuf-test crypto-test
revision-test revision-test
subst_translate-test io-test subst_translate-test io-test

View File

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for subversion 1.14.0. # Generated by GNU Autoconf 2.69 for subversion 1.14.1.
# #
# Report bugs to <http://subversion.apache.org/>. # Report bugs to <http://subversion.apache.org/>.
# #
@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='subversion' PACKAGE_NAME='subversion'
PACKAGE_TARNAME='subversion' PACKAGE_TARNAME='subversion'
PACKAGE_VERSION='1.14.0' PACKAGE_VERSION='1.14.1'
PACKAGE_STRING='subversion 1.14.0' PACKAGE_STRING='subversion 1.14.1'
PACKAGE_BUGREPORT='http://subversion.apache.org/' PACKAGE_BUGREPORT='http://subversion.apache.org/'
PACKAGE_URL='' PACKAGE_URL=''
@ -1504,7 +1504,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures subversion 1.14.0 to adapt to many kinds of systems. \`configure' configures subversion 1.14.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1570,7 +1570,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of subversion 1.14.0:";; short | recursive ) echo "Configuration of subversion 1.14.1:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@ -1826,7 +1826,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
subversion configure 1.14.0 subversion configure 1.14.1
generated by GNU Autoconf 2.69 generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc. Copyright (C) 2012 Free Software Foundation, Inc.
@ -2370,7 +2370,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by subversion $as_me 1.14.0, which was It was created by subversion $as_me 1.14.1, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@ $ $0 $@
@ -2750,8 +2750,8 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.14.0" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.14.1" >&5
$as_echo "$as_me: Configuring Subversion 1.14.0" >&6;} $as_echo "$as_me: Configuring Subversion 1.14.1" >&6;}
abs_srcdir="`cd $srcdir && pwd`" abs_srcdir="`cd $srcdir && pwd`"
@ -4773,7 +4773,7 @@ fi
# ==== Libraries, for which we may have source to build ====================== # ==== Libraries, for which we may have source to build ======================
APR_VER_REGEXES="1\.[5-9]\. 2\." APR_VER_REGEXES="1\.[4-9]\. 2\."
APR_WANTED_REGEXES="$APR_VER_REGEXES" APR_WANTED_REGEXES="$APR_VER_REGEXES"
@ -24462,46 +24462,52 @@ $as_echo "$ac_cv_python_libs" >&6; }
fi fi
`" `"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python >= 3" >&5 if test "$SWIG" = "none"; then
SWIG_PY_ERRMSG=""
else
# Look more closely at the SWIG and Python versions to
# determine SWIG_PY_OPTS. We can skip this if we already
# have the SWIG-generated files.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python >= 3" >&5
$as_echo_n "checking for Python >= 3... " >&6; } $as_echo_n "checking for Python >= 3... " >&6; }
if ${ac_cv_python_is_py3+:} false; then : if ${ac_cv_python_is_py3+:} false; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
else else
ac_cv_python_is_py3="no" ac_cv_python_is_py3="no"
$PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \ $PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \
ac_cv_python_is_py3="yes" ac_cv_python_is_py3="yes"
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_is_py3" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_is_py3" >&5
$as_echo "$ac_cv_python_is_py3" >&6; } $as_echo "$ac_cv_python_is_py3" >&6; }
if test "$ac_cv_python_is_py3" = "yes"; then if test "$ac_cv_python_is_py3" = "yes"; then
if test "$SWIG_VERSION" -ge "300010"; then if test "$SWIG_VERSION" -ge "300010"; then
SWIG_PY_ERRMSG="" SWIG_PY_ERRMSG=""
else else
SWIG_PY_ERRMSG="SWIG version is not suitable" SWIG_PY_ERRMSG="SWIG version is not suitable"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&5
$as_echo "$as_me: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&2;} $as_echo "$as_me: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&2;}
fi fi
if test "$SWIG_VERSION" -lt "400000"; then if test "$SWIG_VERSION" -lt "400000"; then
SWIG_PY_OPTS="-python -py3 -nofastunpack -modern" SWIG_PY_OPTS="-python -py3 -nofastunpack -modern"
else
SWIG_PY_OPTS="-python -py3 -nofastunpack"
fi
else else
SWIG_PY_OPTS="-python -py3 -nofastunpack" if test "$SWIG_VERSION" -lt "400000"; then
fi SWIG_PY_OPTS="-python -classic"
else SWIG_PY_ERRMSG=""
if test "$SWIG_VERSION" -lt "400000"; then else
SWIG_PY_OPTS="-python -classic" SWIG_PY_OPTS="-python -nofastunpack"
SWIG_PY_ERRMSG="" SWIG_PY_ERRMSG="SWIG version is not suitable"
else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&5
SWIG_PY_OPTS="-python -nofastunpack"
SWIG_PY_ERRMSG="SWIG version is not suitable"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&5
$as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&2;} $as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&2;}
fi
fi fi
fi fi
fi fi
fi fi
fi fi
@ -25093,46 +25099,52 @@ $as_echo "$ac_cv_python_libs" >&6; }
fi fi
`" `"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python >= 3" >&5 if test "$SWIG" = "none"; then
SWIG_PY_ERRMSG=""
else
# Look more closely at the SWIG and Python versions to
# determine SWIG_PY_OPTS. We can skip this if we already
# have the SWIG-generated files.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python >= 3" >&5
$as_echo_n "checking for Python >= 3... " >&6; } $as_echo_n "checking for Python >= 3... " >&6; }
if ${ac_cv_python_is_py3+:} false; then : if ${ac_cv_python_is_py3+:} false; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
else else
ac_cv_python_is_py3="no" ac_cv_python_is_py3="no"
$PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \ $PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \
ac_cv_python_is_py3="yes" ac_cv_python_is_py3="yes"
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_is_py3" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_is_py3" >&5
$as_echo "$ac_cv_python_is_py3" >&6; } $as_echo "$ac_cv_python_is_py3" >&6; }
if test "$ac_cv_python_is_py3" = "yes"; then if test "$ac_cv_python_is_py3" = "yes"; then
if test "$SWIG_VERSION" -ge "300010"; then if test "$SWIG_VERSION" -ge "300010"; then
SWIG_PY_ERRMSG="" SWIG_PY_ERRMSG=""
else else
SWIG_PY_ERRMSG="SWIG version is not suitable" SWIG_PY_ERRMSG="SWIG version is not suitable"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&5
$as_echo "$as_me: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&2;} $as_echo "$as_me: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&2;}
fi fi
if test "$SWIG_VERSION" -lt "400000"; then if test "$SWIG_VERSION" -lt "400000"; then
SWIG_PY_OPTS="-python -py3 -nofastunpack -modern" SWIG_PY_OPTS="-python -py3 -nofastunpack -modern"
else
SWIG_PY_OPTS="-python -py3 -nofastunpack"
fi
else else
SWIG_PY_OPTS="-python -py3 -nofastunpack" if test "$SWIG_VERSION" -lt "400000"; then
fi SWIG_PY_OPTS="-python -classic"
else SWIG_PY_ERRMSG=""
if test "$SWIG_VERSION" -lt "400000"; then else
SWIG_PY_OPTS="-python -classic" SWIG_PY_OPTS="-python -nofastunpack"
SWIG_PY_ERRMSG="" SWIG_PY_ERRMSG="SWIG version is not suitable"
else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&5
SWIG_PY_OPTS="-python -nofastunpack"
SWIG_PY_ERRMSG="SWIG version is not suitable"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&5
$as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&2;} $as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&2;}
fi
fi fi
fi fi
fi fi
fi fi
fi fi
@ -25724,46 +25736,52 @@ $as_echo "$ac_cv_python_libs" >&6; }
fi fi
`" `"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python >= 3" >&5 if test "$SWIG" = "none"; then
SWIG_PY_ERRMSG=""
else
# Look more closely at the SWIG and Python versions to
# determine SWIG_PY_OPTS. We can skip this if we already
# have the SWIG-generated files.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python >= 3" >&5
$as_echo_n "checking for Python >= 3... " >&6; } $as_echo_n "checking for Python >= 3... " >&6; }
if ${ac_cv_python_is_py3+:} false; then : if ${ac_cv_python_is_py3+:} false; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
else else
ac_cv_python_is_py3="no" ac_cv_python_is_py3="no"
$PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \ $PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \
ac_cv_python_is_py3="yes" ac_cv_python_is_py3="yes"
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_is_py3" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_is_py3" >&5
$as_echo "$ac_cv_python_is_py3" >&6; } $as_echo "$ac_cv_python_is_py3" >&6; }
if test "$ac_cv_python_is_py3" = "yes"; then if test "$ac_cv_python_is_py3" = "yes"; then
if test "$SWIG_VERSION" -ge "300010"; then if test "$SWIG_VERSION" -ge "300010"; then
SWIG_PY_ERRMSG="" SWIG_PY_ERRMSG=""
else else
SWIG_PY_ERRMSG="SWIG version is not suitable" SWIG_PY_ERRMSG="SWIG version is not suitable"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&5
$as_echo "$as_me: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&2;} $as_echo "$as_me: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&2;}
fi fi
if test "$SWIG_VERSION" -lt "400000"; then if test "$SWIG_VERSION" -lt "400000"; then
SWIG_PY_OPTS="-python -py3 -nofastunpack -modern" SWIG_PY_OPTS="-python -py3 -nofastunpack -modern"
else
SWIG_PY_OPTS="-python -py3 -nofastunpack"
fi
else else
SWIG_PY_OPTS="-python -py3 -nofastunpack" if test "$SWIG_VERSION" -lt "400000"; then
fi SWIG_PY_OPTS="-python -classic"
else SWIG_PY_ERRMSG=""
if test "$SWIG_VERSION" -lt "400000"; then else
SWIG_PY_OPTS="-python -classic" SWIG_PY_OPTS="-python -nofastunpack"
SWIG_PY_ERRMSG="" SWIG_PY_ERRMSG="SWIG version is not suitable"
else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&5
SWIG_PY_OPTS="-python -nofastunpack"
SWIG_PY_ERRMSG="SWIG version is not suitable"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&5
$as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&2;} $as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&2;}
fi
fi fi
fi fi
fi fi
fi fi
fi fi
@ -26358,46 +26376,52 @@ $as_echo "$ac_cv_python_libs" >&6; }
fi fi
`" `"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python >= 3" >&5 if test "$SWIG" = "none"; then
SWIG_PY_ERRMSG=""
else
# Look more closely at the SWIG and Python versions to
# determine SWIG_PY_OPTS. We can skip this if we already
# have the SWIG-generated files.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python >= 3" >&5
$as_echo_n "checking for Python >= 3... " >&6; } $as_echo_n "checking for Python >= 3... " >&6; }
if ${ac_cv_python_is_py3+:} false; then : if ${ac_cv_python_is_py3+:} false; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
else else
ac_cv_python_is_py3="no" ac_cv_python_is_py3="no"
$PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \ $PYTHON -c 'import sys; sys.exit(0x3000000 > sys.hexversion)' && \
ac_cv_python_is_py3="yes" ac_cv_python_is_py3="yes"
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_is_py3" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_is_py3" >&5
$as_echo "$ac_cv_python_is_py3" >&6; } $as_echo "$ac_cv_python_is_py3" >&6; }
if test "$ac_cv_python_is_py3" = "yes"; then if test "$ac_cv_python_is_py3" = "yes"; then
if test "$SWIG_VERSION" -ge "300010"; then if test "$SWIG_VERSION" -ge "300010"; then
SWIG_PY_ERRMSG="" SWIG_PY_ERRMSG=""
else else
SWIG_PY_ERRMSG="SWIG version is not suitable" SWIG_PY_ERRMSG="SWIG version is not suitable"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&5
$as_echo "$as_me: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&2;} $as_echo "$as_me: WARNING: Subversion Python bindings for Python 3 require SWIG 3.0.10 or newer" >&2;}
fi fi
if test "$SWIG_VERSION" -lt "400000"; then if test "$SWIG_VERSION" -lt "400000"; then
SWIG_PY_OPTS="-python -py3 -nofastunpack -modern" SWIG_PY_OPTS="-python -py3 -nofastunpack -modern"
else
SWIG_PY_OPTS="-python -py3 -nofastunpack"
fi
else else
SWIG_PY_OPTS="-python -py3 -nofastunpack" if test "$SWIG_VERSION" -lt "400000"; then
fi SWIG_PY_OPTS="-python -classic"
else SWIG_PY_ERRMSG=""
if test "$SWIG_VERSION" -lt "400000"; then else
SWIG_PY_OPTS="-python -classic" SWIG_PY_OPTS="-python -nofastunpack"
SWIG_PY_ERRMSG="" SWIG_PY_ERRMSG="SWIG version is not suitable"
else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&5
SWIG_PY_OPTS="-python -nofastunpack"
SWIG_PY_ERRMSG="SWIG version is not suitable"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&5
$as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&2;} $as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.24 <= SWIG < 4.0.0" >&2;}
fi
fi fi
fi fi
fi fi
fi fi
fi fi
@ -28361,7 +28385,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by subversion $as_me 1.14.0, which was This file was extended by subversion $as_me 1.14.1, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@ -28427,7 +28451,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\ ac_cs_version="\\
subversion config.status 1.14.0 subversion config.status 1.14.1
configured by $0, generated by GNU Autoconf 2.69, configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"

View File

@ -91,7 +91,7 @@ AC_SUBST([MKDIR])
dnl verify apr version and set apr flags dnl verify apr version and set apr flags
dnl These regular expressions should not contain "\(" and "\)". dnl These regular expressions should not contain "\(" and "\)".
APR_VER_REGEXES=["1\.[5-9]\. 2\."] APR_VER_REGEXES=["1\.[4-9]\. 2\."]
SVN_LIB_APR($APR_VER_REGEXES) SVN_LIB_APR($APR_VER_REGEXES)

View File

@ -70,7 +70,7 @@ def main(fname, gentype, verfname=None,
if ('--debug', '') in other_options: if ('--debug', '') in other_options:
for dep_type, target_dict in generator.graph.deps.items(): for dep_type, target_dict in generator.graph.deps.items():
sorted_targets = list(target_dict.keys()); sorted_targets.sort() sorted_targets = sorted(target_dict.keys(), key=str)
for target in sorted_targets: for target in sorted_targets:
print(dep_type + ": " + _objinfo(target)) print(dep_type + ": " + _objinfo(target))
for source in target_dict[target]: for source in target_dict[target]:

View File

@ -29,6 +29,7 @@
#define SVN_DEP_COMPAT_H #define SVN_DEP_COMPAT_H
#include <apr_version.h> #include <apr_version.h>
#include <apr_errno.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -193,6 +194,16 @@ extern "C" {
((major*1000000 + minor*1000 + patch) <= SVN_SQLITE_MIN_VERSION_NUMBER) ((major*1000000 + minor*1000 + patch) <= SVN_SQLITE_MIN_VERSION_NUMBER)
#endif /* SQLITE_VERSION_AT_LEAST */ #endif /* SQLITE_VERSION_AT_LEAST */
/**
* Support for 'apr_escape_shell() which was introduced in APR 1.5.
*/
#if !APR_VERSION_AT_LEAST(1,5,0)
/* from apr_escape.h */
#define APR_ESCAPE_STRING (-1)
APR_DECLARE(apr_status_t) apr_escape_shell(char *escaped, const char *str,
apr_ssize_t slen, apr_size_t *len);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@ -80,7 +80,7 @@ svn_sort__array(apr_array_header_t *array,
int (*comparison_func)(const void *, int (*comparison_func)(const void *,
const void *)); const void *));
/* Return the lowest index at which the element @a *key should be inserted into /** Return the lowest index at which the element @a *key should be inserted into
* the array @a array, according to the ordering defined by @a compare_func. * the array @a array, according to the ordering defined by @a compare_func.
* The array must already be sorted in the ordering defined by @a compare_func. * The array must already be sorted in the ordering defined by @a compare_func.
* @a compare_func is defined as for the C stdlib function bsearch(); the * @a compare_func is defined as for the C stdlib function bsearch(); the
@ -93,7 +93,7 @@ svn_sort__bsearch_lower_bound(const apr_array_header_t *array,
const void *key, const void *key,
int (*compare_func)(const void *, const void *)); int (*compare_func)(const void *, const void *));
/* Find the lowest index at which the element @a *key should be inserted into /** Find the lowest index at which the element @a *key should be inserted into
* the array @a array, according to the ordering defined by @a compare_func. * the array @a array, according to the ordering defined by @a compare_func.
* The array must already be sorted in the ordering defined by @a compare_func. * The array must already be sorted in the ordering defined by @a compare_func.
* @a compare_func is defined as for the C stdlib function bsearch(); the * @a compare_func is defined as for the C stdlib function bsearch(); the
@ -116,7 +116,7 @@ svn_sort__array_lookup(const apr_array_header_t *array,
int (*compare_func)(const void *, const void *)); int (*compare_func)(const void *, const void *));
/* Insert a shallow copy of @a *new_element into the array @a array at the index /** Insert a shallow copy of @a *new_element into the array @a array at the index
* @a insert_index, growing the array and shuffling existing elements along to * @a insert_index, growing the array and shuffling existing elements along to
* make room. * make room.
* *
@ -131,7 +131,7 @@ svn_sort__array_insert2(apr_array_header_t *array,
int insert_index); int insert_index);
/* Remove @a elements_to_delete elements starting at @a delete_index from the /** Remove @a elements_to_delete elements starting at @a delete_index from the
* array @a arr. * array @a arr.
* *
* Raise an error if the indexes to delete extends outside the array bounds * Raise an error if the indexes to delete extends outside the array bounds
@ -144,7 +144,7 @@ svn_sort__array_delete2(apr_array_header_t *arr,
int delete_index, int delete_index,
int elements_to_delete); int elements_to_delete);
/* Reverse the order of elements in @a array, in place. /** Reverse the order of elements in @a array, in place.
* *
* @note Private. For use by Subversion's own code only. * @note Private. For use by Subversion's own code only.
*/ */

View File

@ -2244,7 +2244,7 @@ svn_ra_has_capability(svn_ra_session_t *session,
/** /**
* The capability of a server to automatically remove transaction * The capability of a server to automatically remove transaction
* properties prefixed with SVN_PROP_EPHEMERAL_PREFIX. * properties prefixed with #SVN_PROP_TXN_PREFIX.
* *
* @since New in 1.8. * @since New in 1.8.
*/ */

View File

@ -248,6 +248,35 @@ typedef struct svn_version_t svn_version_t;
/** @} */ /** @} */
/** @defgroup apr_hash_utilities APR Hash Table Helpers
* These functions enable the caller to dereference an APR hash table index
* without type casts or temporary variables.
*
* These functions are provided by APR itself from version 1.5.
* Definitions are provided here for when using older versions of APR.
* @{
*/
#if !APR_VERSION_AT_LEAST(1, 5, 0)
/** Return the key of the hash table entry indexed by @a hi. */
const void *
apr_hash_this_key(apr_hash_index_t *hi);
/** Return the key length of the hash table entry indexed by @a hi. */
apr_ssize_t
apr_hash_this_key_len(apr_hash_index_t *hi);
/** Return the value of the hash table entry indexed by @a hi. */
void *
apr_hash_this_val(apr_hash_index_t *hi);
#endif
/** @} */
/** On Windows, APR_STATUS_IS_ENOTDIR includes several kinds of /** On Windows, APR_STATUS_IS_ENOTDIR includes several kinds of
* invalid-pathname error but not ERROR_INVALID_NAME, so we include it. * invalid-pathname error but not ERROR_INVALID_NAME, so we include it.

View File

@ -70,7 +70,7 @@ extern "C" {
* *
* @since New in 1.1. * @since New in 1.1.
*/ */
#define SVN_VER_PATCH 0 #define SVN_VER_PATCH 1
/** @deprecated Provided for backward compatibility with the 1.0 API. */ /** @deprecated Provided for backward compatibility with the 1.0 API. */
@ -93,7 +93,7 @@ extern "C" {
* *
* Always change this at the same time as SVN_VER_NUMTAG. * Always change this at the same time as SVN_VER_NUMTAG.
*/ */
#define SVN_VER_TAG " (r1876290)" #define SVN_VER_TAG " (r1886195)"
/** Number tag: a string describing the version. /** Number tag: a string describing the version.
@ -117,7 +117,7 @@ extern "C" {
* file version. Its value remains 0 in the repository except in release * file version. Its value remains 0 in the repository except in release
* tags where it is the revision from which the tag was created. * tags where it is the revision from which the tag was created.
*/ */
#define SVN_VER_REVISION 1876290 #define SVN_VER_REVISION 1886195
/* Version strings composed from the above definitions. */ /* Version strings composed from the above definitions. */

View File

@ -264,7 +264,7 @@ typedef struct merge_cmd_baton_t {
/* Reference to the one-and-only CHILDREN_WITH_MERGEINFO (see global /* Reference to the one-and-only CHILDREN_WITH_MERGEINFO (see global
comment) or a similar list for single-file-merges */ comment) or a similar list for single-file-merges */
const apr_array_header_t *children_with_mergeinfo; apr_array_header_t *children_with_mergeinfo;
svn_client_ctx_t *ctx; /* Client context for callbacks, etc. */ svn_client_ctx_t *ctx; /* Client context for callbacks, etc. */
@ -1545,6 +1545,25 @@ record_update_delete(merge_cmd_baton_t *merge_b,
svn_node_kind_to_word(kind)); svn_node_kind_to_word(kind));
} }
/* Note in children_with_mergeinfo that all paths in this subtree are
* being deleted, to avoid trying to set mergeinfo on them later. */
if (merge_b->children_with_mergeinfo)
{
int i;
for (i = 0; i < merge_b->children_with_mergeinfo->nelts; i++)
{
svn_client__merge_path_t *child
= APR_ARRAY_IDX(merge_b->children_with_mergeinfo, i,
svn_client__merge_path_t *);
if (svn_dirent_is_ancestor(local_abspath, child->abspath))
{
SVN_ERR(svn_sort__array_delete2(merge_b->children_with_mergeinfo, i--, 1));
}
}
}
return SVN_NO_ERROR; return SVN_NO_ERROR;
} }
@ -5595,7 +5614,7 @@ svn_client__make_merge_conflict_error(svn_client__conflict_report_t *report,
with paths (svn_client__merge_path_t *) arranged in depth first order, with paths (svn_client__merge_path_t *) arranged in depth first order,
which have mergeinfo set on them or meet one of the other criteria which have mergeinfo set on them or meet one of the other criteria
defined in get_mergeinfo_paths(). Remove any paths absent from disk defined in get_mergeinfo_paths(). Remove any paths absent from disk
or scheduled for deletion from CHILDREN_WITH_MERGEINFO which are equal to from CHILDREN_WITH_MERGEINFO which are equal to
or are descendants of TARGET_WCPATH by setting those children to NULL. */ or are descendants of TARGET_WCPATH by setting those children to NULL. */
static svn_error_t * static svn_error_t *
remove_absent_children(const char *target_wcpath, remove_absent_children(const char *target_wcpath,
@ -5609,7 +5628,7 @@ remove_absent_children(const char *target_wcpath,
{ {
svn_client__merge_path_t *child = svn_client__merge_path_t *child =
APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *); APR_ARRAY_IDX(children_with_mergeinfo, i, svn_client__merge_path_t *);
if ((child->absent || child->scheduled_for_deletion) if (child->absent
&& svn_dirent_is_ancestor(target_wcpath, child->abspath)) && svn_dirent_is_ancestor(target_wcpath, child->abspath))
{ {
SVN_ERR(svn_sort__array_delete2(children_with_mergeinfo, i--, 1)); SVN_ERR(svn_sort__array_delete2(children_with_mergeinfo, i--, 1));
@ -7896,18 +7915,23 @@ process_children_with_new_mergeinfo(merge_cmd_baton_t *merge_b,
apr_pool_t *pool) apr_pool_t *pool)
{ {
apr_pool_t *iterpool; apr_pool_t *iterpool;
apr_hash_index_t *hi; apr_array_header_t *a;
int i;
if (!merge_b->paths_with_new_mergeinfo || merge_b->dry_run) if (!merge_b->paths_with_new_mergeinfo || merge_b->dry_run)
return SVN_NO_ERROR; return SVN_NO_ERROR;
/* Iterate over each path with explicit mergeinfo added by the merge. */ /* Iterate over each path with explicit mergeinfo added by the merge. */
/* Iterate over the paths in a parent-to-child order so that inherited
* mergeinfo is propagated consistently from each parent path to its
* children. (Issue #4862) */
a = svn_sort__hash(merge_b->paths_with_new_mergeinfo,
svn_sort_compare_items_as_paths, pool);
iterpool = svn_pool_create(pool); iterpool = svn_pool_create(pool);
for (hi = apr_hash_first(pool, merge_b->paths_with_new_mergeinfo); for (i = 0; i < a->nelts; i++)
hi;
hi = apr_hash_next(hi))
{ {
const char *abspath_with_new_mergeinfo = apr_hash_this_key(hi); svn_sort__item_t *item = &APR_ARRAY_IDX(a, i, svn_sort__item_t);
const char *abspath_with_new_mergeinfo = item->key;
svn_mergeinfo_t path_inherited_mergeinfo; svn_mergeinfo_t path_inherited_mergeinfo;
svn_mergeinfo_t path_explicit_mergeinfo; svn_mergeinfo_t path_explicit_mergeinfo;
svn_client__merge_path_t *new_child; svn_client__merge_path_t *new_child;

View File

@ -74,8 +74,6 @@ typedef struct svn_client__merge_path_t
prior to a merge. May be NULL. */ prior to a merge. May be NULL. */
svn_boolean_t inherited_mergeinfo; /* Whether PRE_MERGE_MERGEINFO was svn_boolean_t inherited_mergeinfo; /* Whether PRE_MERGE_MERGEINFO was
explicit or inherited. */ explicit or inherited. */
svn_boolean_t scheduled_for_deletion; /* ABSPATH is scheduled for
deletion. */
svn_boolean_t immediate_child_dir; /* ABSPATH is an immediate child svn_boolean_t immediate_child_dir; /* ABSPATH is an immediate child
directory of the merge target, directory of the merge target,
has no explicit mergeinfo prior has no explicit mergeinfo prior

View File

@ -453,7 +453,8 @@ mtcc_verify_create(svn_client__mtcc_t *mtcc,
if (op) if (op)
return svn_error_createf(SVN_ERR_FS_ALREADY_EXISTS, NULL, return svn_error_createf(SVN_ERR_FS_ALREADY_EXISTS, NULL,
_("Path '%s' already exists"), _("Path '%s' already exists, or was created "
"by an earlier operation"),
new_relpath); new_relpath);
SVN_ERR(mtcc_op_find(&op, NULL, new_relpath, mtcc->root_op, TRUE, TRUE, SVN_ERR(mtcc_op_find(&op, NULL, new_relpath, mtcc->root_op, TRUE, TRUE,

View File

@ -827,7 +827,7 @@ svn_fs_fs__l2p_index_append(svn_checksum_t **checksum,
&eof, local_pool)); &eof, local_pool));
/* handle new revision */ /* handle new revision */
if ((entry > 0 && proto_entry.offset == 0) || eof) if (eof || (entry > 0 && proto_entry.offset == 0))
{ {
/* dump entries, grouped into pages */ /* dump entries, grouped into pages */

View File

@ -889,9 +889,7 @@ create_user_authz(authz_full_t *authz,
/* Use a separate sub-pool to keep memory usage tight. */ /* Use a separate sub-pool to keep memory usage tight. */
apr_pool_t *subpool = svn_pool_create(scratch_pool); apr_pool_t *subpool = svn_pool_create(scratch_pool);
/* Find all ACLs for REPOSITORY. /* Find all ACLs for REPOSITORY. */
* Note that repo-specific rules replace global rules,
* even if they don't apply to the current user. */
apr_array_header_t *acls = apr_array_make(subpool, authz->acls->nelts, apr_array_header_t *acls = apr_array_make(subpool, authz->acls->nelts,
sizeof(authz_acl_t *)); sizeof(authz_acl_t *));
for (i = 0; i < authz->acls->nelts; ++i) for (i = 0; i < authz->acls->nelts; ++i)
@ -908,15 +906,36 @@ create_user_authz(authz_full_t *authz,
= APR_ARRAY_IDX(acls, acls->nelts - 1, const authz_acl_t *); = APR_ARRAY_IDX(acls, acls->nelts - 1, const authz_acl_t *);
if (svn_authz__compare_paths(&prev_acl->rule, &acl->rule) == 0) if (svn_authz__compare_paths(&prev_acl->rule, &acl->rule) == 0)
{ {
svn_boolean_t global_acl_applies;
svn_boolean_t repos_acl_applies;
/* Previous ACL is a global rule. */
SVN_ERR_ASSERT_NO_RETURN(!strcmp(prev_acl->rule.repos, SVN_ERR_ASSERT_NO_RETURN(!strcmp(prev_acl->rule.repos,
AUTHZ_ANY_REPOSITORY)); AUTHZ_ANY_REPOSITORY));
/* Current ACL is a per-repository rule. */
SVN_ERR_ASSERT_NO_RETURN(strcmp(acl->rule.repos, SVN_ERR_ASSERT_NO_RETURN(strcmp(acl->rule.repos,
AUTHZ_ANY_REPOSITORY)); AUTHZ_ANY_REPOSITORY));
apr_array_pop(acls);
}
}
APR_ARRAY_PUSH(acls, const authz_acl_t *) = acl; global_acl_applies =
svn_authz__get_acl_access(NULL, prev_acl, user, repository);
repos_acl_applies =
svn_authz__get_acl_access(NULL, acl, user, repository);
/* Prefer rules which apply to both this user and this path
* over rules which apply only to the path. In cases where
* both rules apply to user and path, always prefer the
* repository-specific rule. */
if (!global_acl_applies || repos_acl_applies)
{
apr_array_pop(acls);
APR_ARRAY_PUSH(acls, const authz_acl_t *) = acl;
}
}
else
APR_ARRAY_PUSH(acls, const authz_acl_t *) = acl;
}
else
APR_ARRAY_PUSH(acls, const authz_acl_t *) = acl;
} }
} }

View File

@ -237,6 +237,10 @@ get_repos_config(svn_stream_t **stream,
{ {
/* Search for a repository in the full path. */ /* Search for a repository in the full path. */
repos_root_dirent = svn_repos_find_root_path(dirent, scratch_pool); repos_root_dirent = svn_repos_find_root_path(dirent, scratch_pool);
if (repos_root_dirent == NULL)
return svn_error_trace(handle_missing_file(stream, checksum, access,
url, must_exist,
svn_node_none));
/* Attempt to open a repository at repos_root_dirent. */ /* Attempt to open a repository at repos_root_dirent. */
SVN_ERR(svn_repos_open3(&access->repos, repos_root_dirent, NULL, SVN_ERR(svn_repos_open3(&access->repos, repos_root_dirent, NULL,

View File

@ -0,0 +1,135 @@
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* The code in this file is copied from APR (initially from APR 1.7.0)
* to provide compatibility for building against APR < 1.5.0.
*/
#include "private/svn_dep_compat.h"
#if !APR_VERSION_AT_LEAST(1,5,0)
#include <apr_lib.h>
#include <apr_strings.h>
/* from apr_escape_test_char.h */
#define T_ESCAPE_SHELL_CMD (1)
#define T_ESCAPE_PATH_SEGMENT (2)
#define T_OS_ESCAPE_PATH (4)
#define T_ESCAPE_ECHO (8)
#define T_ESCAPE_URLENCODED (16)
#define T_ESCAPE_XML (32)
#define T_ESCAPE_LDAP_DN (64)
#define T_ESCAPE_LDAP_FILTER (128)
static const unsigned char test_char_table[256] = {
224,222,222,222,222,222,222,222,222,222,223,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,6,16,127,22,17,22,49,17,
145,145,129,80,80,0,0,18,0,0,0,0,0,0,0,0,0,0,16,87,
119,16,119,23,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,23,223,23,23,0,23,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,23,23,23,17,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222
};
/* from apr_encode_private.h */
#if APR_CHARSET_EBCDIC
#error This Subversion compatibility code for APR<1.5 does not support EBCDIC.
#else /* APR_CHARSET_EBCDIC */
#define ENCODE_TO_ASCII(ch) (ch)
#define ENCODE_TO_NATIVE(ch) (ch)
#endif /* !APR_CHARSET_EBCDIC */
/* we assume the folks using this ensure 0 <= c < 256... which means
* you need a cast to (unsigned char) first, you can't just plug a
* char in here and get it to work, because if char is signed then it
* will first be sign extended.
*/
#define TEST_CHAR(c, f) (test_char_table[(unsigned)(c)] & (f))
APR_DECLARE(apr_status_t) apr_escape_shell(char *escaped, const char *str,
apr_ssize_t slen, apr_size_t *len)
{
unsigned char *d;
const unsigned char *s;
apr_size_t size = 1;
int found = 0;
d = (unsigned char *) escaped;
s = (const unsigned char *) str;
if (s) {
if (d) {
for (; *s && slen; ++s, slen--) {
#if defined(OS2) || defined(WIN32)
/*
* Newlines to Win32/OS2 CreateProcess() are ill advised.
* Convert them to spaces since they are effectively white
* space to most applications
*/
if (*s == '\r' || *s == '\n') {
if (d) {
*d++ = ' ';
found = 1;
}
continue;
}
#endif
if (TEST_CHAR(*s, T_ESCAPE_SHELL_CMD)) {
*d++ = '\\';
size++;
found = 1;
}
*d++ = *s;
size++;
}
*d = '\0';
}
else {
for (; *s && slen; ++s, slen--) {
if (TEST_CHAR(*s, T_ESCAPE_SHELL_CMD)) {
size++;
found = 1;
}
size++;
}
}
}
if (len) {
*len = size;
}
if (!found) {
return APR_NOTFOUND;
}
return APR_SUCCESS;
}
#else /* APR_VERSION_AT_LEAST(1,5,0) */
/* Silence OSX ranlib warnings about object files with no symbols. */
#include <apr.h>
extern const apr_uint32_t svn__fake__apr_escape;
const apr_uint32_t svn__fake__apr_escape = 0xdeadbeef;
#endif /* !APR_VERSION_AT_LEAST(1,5,0) */

View File

@ -39,9 +39,15 @@
#include <apr.h> /* for STDIN_FILENO */ #include <apr.h> /* for STDIN_FILENO */
#include <apr_errno.h> /* for apr_strerror */ #include <apr_errno.h> /* for apr_strerror */
#include <apr_version.h>
#if APR_VERSION_AT_LEAST(1,5,0)
#include <apr_escape.h> #include <apr_escape.h>
#else
#include "private/svn_dep_compat.h"
#endif
#include <apr_general.h> /* for apr_initialize/apr_terminate */ #include <apr_general.h> /* for apr_initialize/apr_terminate */
#include <apr_strings.h> /* for apr_snprintf */ #include <apr_strings.h> /* for apr_snprintf */
#include <apr_env.h> /* for apr_env_get */
#include <apr_pools.h> #include <apr_pools.h>
#include <apr_signal.h> #include <apr_signal.h>
@ -1235,38 +1241,84 @@ svn_cmdline__be_interactive(svn_boolean_t non_interactive,
/* Helper for the edit_externally functions. Set *EDITOR to some path to an /* Helper for the edit_externally functions. Set *EDITOR to some path to an
editor binary. Sources to search include: the EDITOR_CMD argument editor binary, in native C string on Unix/Linux platforms and in UTF-8
(if not NULL), $SVN_EDITOR, the runtime CONFIG variable (if CONFIG string on Windows platform. Sources to search include: the EDITOR_CMD
argument (if not NULL), $SVN_EDITOR, the runtime CONFIG variable (if CONFIG
is not NULL), $VISUAL, $EDITOR. Return is not NULL), $VISUAL, $EDITOR. Return
SVN_ERR_CL_NO_EXTERNAL_EDITOR if no binary can be found. */ SVN_ERR_CL_NO_EXTERNAL_EDITOR if no binary can be found. */
static svn_error_t * static svn_error_t *
find_editor_binary(const char **editor, find_editor_binary(const char **editor,
const char *editor_cmd, const char *editor_cmd,
apr_hash_t *config) apr_hash_t *config,
apr_pool_t *pool)
{ {
const char *e; const char *e;
const char *e_cfg;
struct svn_config_t *cfg; struct svn_config_t *cfg;
apr_status_t status;
/* Use the editor specified on the command line via --editor-cmd, if any. */ /* Use the editor specified on the command line via --editor-cmd, if any. */
#ifdef WIN32
/* On Windows, editor_cmd is transcoded to the system active code page
because we use main() as a entry point without APR's (or our own) wrapper
in command line tools. */
if (editor_cmd)
{
SVN_ERR(svn_utf_cstring_to_utf8(&e, editor_cmd, pool));
}
else
{
e = NULL;
}
#else
e = editor_cmd; e = editor_cmd;
#endif
/* Otherwise look for the Subversion-specific environment variable. */ /* Otherwise look for the Subversion-specific environment variable. */
if (! e) if (! e)
e = getenv("SVN_EDITOR"); {
status = apr_env_get((char **)&e, "SVN_EDITOR", pool);
if (status || ! *e)
{
e = NULL;
}
}
/* If not found then fall back on the config file. */ /* If not found then fall back on the config file. */
if (! e) if (! e)
{ {
cfg = config ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG) : NULL; cfg = config ? svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG) : NULL;
svn_config_get(cfg, &e, SVN_CONFIG_SECTION_HELPERS, svn_config_get(cfg, &e_cfg, SVN_CONFIG_SECTION_HELPERS,
SVN_CONFIG_OPTION_EDITOR_CMD, NULL); SVN_CONFIG_OPTION_EDITOR_CMD, NULL);
#ifdef WIN32
if (e_cfg)
{
/* On Windows, we assume that config values are set in system active
code page, so we need transcode it here. */
SVN_ERR(svn_utf_cstring_to_utf8(&e, e_cfg, pool));
}
#else
e = e_cfg;
#endif
} }
/* If not found yet then try general purpose environment variables. */ /* If not found yet then try general purpose environment variables. */
if (! e) if (! e)
e = getenv("VISUAL"); {
status = apr_env_get((char**)&e, "VISUAL", pool);
if (status || ! *e)
{
e = NULL;
}
}
if (! e) if (! e)
e = getenv("EDITOR"); {
status = apr_env_get((char**)&e, "EDITOR", pool);
if (status || ! *e)
{
e = NULL;
}
}
#ifdef SVN_CLIENT_EDITOR #ifdef SVN_CLIENT_EDITOR
/* If still not found then fall back on the hard-coded default. */ /* If still not found then fall back on the hard-coded default. */
@ -1400,13 +1452,17 @@ svn_cmdline__edit_file_externally(const char *path,
apr_pool_t *pool) apr_pool_t *pool)
{ {
const char *editor, *cmd, *base_dir, *file_name, *base_dir_apr; const char *editor, *cmd, *base_dir, *file_name, *base_dir_apr;
const char *file_name_local;
#ifdef WIN32
const WCHAR *wcmd;
#endif
char *old_cwd; char *old_cwd;
int sys_err; int sys_err;
apr_status_t apr_err; apr_status_t apr_err;
svn_dirent_split(&base_dir, &file_name, path, pool); svn_dirent_split(&base_dir, &file_name, path, pool);
SVN_ERR(find_editor_binary(&editor, editor_cmd, config)); SVN_ERR(find_editor_binary(&editor, editor_cmd, config, pool));
apr_err = apr_filepath_get(&old_cwd, APR_FILEPATH_NATIVE, pool); apr_err = apr_filepath_get(&old_cwd, APR_FILEPATH_NATIVE, pool);
if (apr_err) if (apr_err)
@ -1423,10 +1479,18 @@ svn_cmdline__edit_file_externally(const char *path,
return svn_error_wrap_apr return svn_error_wrap_apr
(apr_err, _("Can't change working directory to '%s'"), base_dir); (apr_err, _("Can't change working directory to '%s'"), base_dir);
SVN_ERR(svn_path_cstring_from_utf8(&file_name_local,
escape_path(pool, file_name), pool));
/* editor is explicitly documented as being interpreted by the user's shell, /* editor is explicitly documented as being interpreted by the user's shell,
and as such should already be quoted/escaped as needed. */ and as such should already be quoted/escaped as needed. */
cmd = apr_psprintf(pool, "%s %s", editor, escape_path(pool, file_name)); #ifndef WIN32
cmd = apr_psprintf(pool, "%s %s", editor, file_name_local);
sys_err = system(cmd); sys_err = system(cmd);
#else
cmd = apr_psprintf(pool, "\"%s %s\"", editor, file_name_local);
SVN_ERR(svn_utf__win32_utf8_to_utf16(&wcmd, cmd, NULL, pool));
sys_err = _wsystem(wcmd);
#endif
apr_err = apr_filepath_set(old_cwd, pool); apr_err = apr_filepath_set(old_cwd, pool);
if (apr_err) if (apr_err)
@ -1458,6 +1522,9 @@ svn_cmdline__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
{ {
const char *editor; const char *editor;
const char *cmd; const char *cmd;
#ifdef WIN32
const WCHAR *wcmd;
#endif
apr_file_t *tmp_file; apr_file_t *tmp_file;
const char *tmpfile_name; const char *tmpfile_name;
const char *tmpfile_native; const char *tmpfile_native;
@ -1471,7 +1538,7 @@ svn_cmdline__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
int sys_err; int sys_err;
svn_boolean_t remove_file = TRUE; svn_boolean_t remove_file = TRUE;
SVN_ERR(find_editor_binary(&editor, editor_cmd, config)); SVN_ERR(find_editor_binary(&editor, editor_cmd, config, pool));
/* Convert file contents from UTF-8/LF if desired. */ /* Convert file contents from UTF-8/LF if desired. */
if (as_text) if (as_text)
@ -1581,13 +1648,18 @@ svn_cmdline__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
goto cleanup; goto cleanup;
/* Prepare the editor command line. */ /* Prepare the editor command line. */
err = svn_utf_cstring_from_utf8(&tmpfile_native, tmpfile_name, pool); err = svn_utf_cstring_from_utf8(&tmpfile_native,
escape_path(pool, tmpfile_name), pool);
if (err) if (err)
goto cleanup; goto cleanup;
/* editor is explicitly documented as being interpreted by the user's shell, /* editor is explicitly documented as being interpreted by the user's shell,
and as such should already be quoted/escaped as needed. */ and as such should already be quoted/escaped as needed. */
cmd = apr_psprintf(pool, "%s %s", editor, escape_path(pool, tmpfile_native)); #ifndef WIN32
cmd = apr_psprintf(pool, "%s %s", editor, tmpfile_native);
#else
cmd = apr_psprintf(pool, "\"%s %s\"", editor, tmpfile_native);
#endif
/* If the caller wants us to leave the file around, return the path /* If the caller wants us to leave the file around, return the path
of the file we'll use, and make a note not to destroy it. */ of the file we'll use, and make a note not to destroy it. */
@ -1598,7 +1670,12 @@ svn_cmdline__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
} }
/* Now, run the editor command line. */ /* Now, run the editor command line. */
#ifndef WIN32
sys_err = system(cmd); sys_err = system(cmd);
#else
SVN_ERR(svn_utf__win32_utf8_to_utf16(&wcmd, cmd, NULL, pool));
sys_err = _wsystem(wcmd);
#endif
if (sys_err != 0) if (sys_err != 0)
{ {
/* Extracting any meaning from sys_err is platform specific, so just /* Extracting any meaning from sys_err is platform specific, so just

View File

@ -143,3 +143,29 @@ svn_iter__break(void)
{ {
return &internal_break_error; return &internal_break_error;
} }
#if !APR_VERSION_AT_LEAST(1, 5, 0)
const void *apr_hash_this_key(apr_hash_index_t *hi)
{
const void *key;
apr_hash_this((apr_hash_index_t *)hi, &key, NULL, NULL);
return key;
}
apr_ssize_t apr_hash_this_key_len(apr_hash_index_t *hi)
{
apr_ssize_t klen;
apr_hash_this((apr_hash_index_t *)hi, NULL, &klen, NULL);
return klen;
}
void *apr_hash_this_val(apr_hash_index_t *hi)
{
void *val;
apr_hash_this((apr_hash_index_t *)hi, NULL, NULL, &val);
return val;
}
#endif

View File

@ -326,7 +326,7 @@ print_command_info3(const svn_opt_subcommand_desc3_t *cmd,
} }
} }
if (!verbose) if (!verbose && global_options && *global_options)
SVN_ERR(svn_cmdline_fputs(_("\n(Use '-v' to show global and experimental options.)\n"), SVN_ERR(svn_cmdline_fputs(_("\n(Use '-v' to show global and experimental options.)\n"),
stream, pool)); stream, pool));
if (have_options) if (have_options)

View File

@ -143,7 +143,7 @@ svn_version_extended(svn_boolean_t verbose,
info->build_time = NULL; info->build_time = NULL;
info->build_host = SVN_BUILD_HOST; info->build_host = SVN_BUILD_HOST;
info->copyright = apr_pstrdup info->copyright = apr_pstrdup
(pool, _("Copyright (C) 2020 The Apache Software Foundation.\n" (pool, _("Copyright (C) 2021 The Apache Software Foundation.\n"
"This software consists of contributions made by many people;\n" "This software consists of contributions made by many people;\n"
"see the NOTICE file for more information.\n" "see the NOTICE file for more information.\n"
"Subversion is open source software, see " "Subversion is open source software, see "

View File

@ -177,7 +177,7 @@
"CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED " \ "CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED " \
"ON NODES (wc_id, moved_to, op_depth); " \ "ON NODES (wc_id, moved_to, op_depth); " \
"CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum); " \ "CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum); " \
"UPDATE nodes SET presence = \"server-excluded\" WHERE presence = \"absent\"; " \ "UPDATE nodes SET presence = 'server-excluded' WHERE presence = 'absent'; " \
"UPDATE nodes SET file_external=1 WHERE file_external IS NOT NULL; " \ "UPDATE nodes SET file_external=1 WHERE file_external IS NOT NULL; " \
"" ""

View File

@ -636,7 +636,7 @@ ON NODES (wc_id, moved_to, op_depth);
CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum); CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum);
UPDATE nodes SET presence = "server-excluded" WHERE presence = "absent"; UPDATE nodes SET presence = 'server-excluded' WHERE presence = 'absent';
/* Just to be sure clear out file external skels from pre 1.7.0 development /* Just to be sure clear out file external skels from pre 1.7.0 development
working copies that were never updated by 1.7.0+ style clients */ working copies that were never updated by 1.7.0+ style clients */

View File

@ -2443,7 +2443,7 @@
"CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED " \ "CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED " \
"ON NODES (wc_id, moved_to, op_depth); " \ "ON NODES (wc_id, moved_to, op_depth); " \
"CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum); " \ "CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum); " \
"UPDATE nodes SET presence = \"server-excluded\" WHERE presence = \"absent\"; " \ "UPDATE nodes SET presence = 'server-excluded' WHERE presence = 'absent'; " \
"UPDATE nodes SET file_external=1 WHERE file_external IS NOT NULL; " \ "UPDATE nodes SET file_external=1 WHERE file_external IS NOT NULL; " \
"" ""

View File

@ -452,7 +452,7 @@ append_tree_conflict_info_xml(svn_stringbuf_t *str,
repos_root_url, repos_relpath, peg_rev, repos_root_url, repos_relpath, peg_rev,
node_kind, pool)); node_kind, pool));
SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath, SVN_ERR(svn_client_conflict_get_incoming_new_repos_location(&repos_relpath,
&peg_rev, &peg_rev,
&node_kind, &node_kind,
conflict, conflict,
@ -529,7 +529,7 @@ svn_cl__append_conflict_info_xml(svn_stringbuf_t *str,
repos_root_url, repos_relpath, peg_rev, repos_root_url, repos_relpath, peg_rev,
node_kind, scratch_pool)); node_kind, scratch_pool));
SVN_ERR(svn_client_conflict_get_incoming_old_repos_location( SVN_ERR(svn_client_conflict_get_incoming_new_repos_location(
&repos_relpath, &peg_rev, &node_kind, conflict, &repos_relpath, &peg_rev, &node_kind, conflict,
scratch_pool, scratch_pool)); scratch_pool, scratch_pool));
if (repos_root_url && repos_relpath) if (repos_root_url && repos_relpath)
@ -576,7 +576,7 @@ svn_cl__append_conflict_info_xml(svn_stringbuf_t *str,
repos_root_url, repos_relpath, peg_rev, repos_root_url, repos_relpath, peg_rev,
node_kind, scratch_pool)); node_kind, scratch_pool));
SVN_ERR(svn_client_conflict_get_incoming_old_repos_location( SVN_ERR(svn_client_conflict_get_incoming_new_repos_location(
&repos_relpath, &peg_rev, &node_kind, conflict, &repos_relpath, &peg_rev, &node_kind, conflict,
scratch_pool, scratch_pool)); scratch_pool, scratch_pool));
if (repos_root_url && repos_relpath) if (repos_root_url && repos_relpath)

View File

@ -88,15 +88,24 @@ format_size(double human_readable_size,
+ 1 nul terminator + 1 nul terminator
--- ---
= 5 characters of space needed in the buffer. */ = 5 characters of space needed in the buffer. */
char buffer[8]; char buffer[64];
assert(absolute_human_readable_size < 1000.0); assert(absolute_human_readable_size < 1000);
/* When the adjusted size has only one significant digit left of
the decimal point, show tenths of a unit, too. Except when
the absolute size is actually a single-digit number, because
files can't have fractional byte sizes. */
if (absolute_human_readable_size >= 10)
sprintf(buffer, "%.0f", human_readable_size);
else
{
double integral;
const double frac = modf(absolute_human_readable_size, &integral);
const int decimals = (index > 0 && (integral < 9 || frac <= .949999999));
sprintf(buffer, "%.*f", decimals, human_readable_size);
}
/* When the adjusted size has only one significant digit left of the
decimal point, show tenths of a unit, too. */
sprintf(buffer, "%.*f",
absolute_human_readable_size < 10.0 ? 1 : 0,
human_readable_size);
return apr_pstrcat(result_pool, buffer, suffix, SVN_VA_NULL); return apr_pstrcat(result_pool, buffer, suffix, SVN_VA_NULL);
} }
@ -138,8 +147,9 @@ get_base2_unit_file_size(svn_filesize_t size,
assert(index < order_size - 1); assert(index < order_size - 1);
++index; ++index;
} }
human_readable_size = (index == 0 ? (double)size human_readable_size = (index == 0 ? (double)size
: (size >> 3 * index) / 128.0 / index); : (size >> (10 * index - 10)) / 1024.0);
return format_size(human_readable_size, return format_size(human_readable_size,
long_units, order, index, result_pool); long_units, order, index, result_pool);
@ -160,7 +170,7 @@ get_base10_unit_file_size(svn_filesize_t size,
{APR_INT64_C( 999999999999), " TB", "T"}, /* tera */ {APR_INT64_C( 999999999999), " TB", "T"}, /* tera */
{APR_INT64_C( 999999999999999), " EB", "E"}, /* exa */ {APR_INT64_C( 999999999999999), " EB", "E"}, /* exa */
{APR_INT64_C(999999999999999999), " PB", "P"} /* peta */ {APR_INT64_C(999999999999999999), " PB", "P"} /* peta */
/* 18446744073709551615 is the maximum value. */ /* 9223372036854775807 is the maximum value. */
}; };
static const apr_size_t order_size = sizeof(order) / sizeof(order[0]); static const apr_size_t order_size = sizeof(order) / sizeof(order[0]);
@ -170,20 +180,29 @@ get_base10_unit_file_size(svn_filesize_t size,
/* Adjust the size to the given order of magnitude. /* Adjust the size to the given order of magnitude.
This is division by (order[index].mask + 1), which is the base-1000 This is division by (order[index].mask + 1), which is the
magnitude of the size. For large file sizes, we split the operation base-1000 magnitude of the size. We split the operation into an
into an integer and a floating-point division, so that we don't integer and a floating-point division, so that we don't
overflow the mantissa. */ overflow the mantissa. */
if (index == 0) if (index == 0)
human_readable_size = (double)size; human_readable_size = (double)size;
else if (index <= 3)
human_readable_size = (double)size / (order[index].mask + 1);
else else
{ {
/* [ Keep integer division here! ] */ const svn_filesize_t divisor = (order[index - 1].mask + 1);
const double divisor = (double)((order[index].mask + 1) / 1000000); /* [Keep integer arithmetic here!] */
human_readable_size = (size / 1000000) / divisor; human_readable_size = (size / divisor) / 1000.0;
/* [ And here! ] */ }
/* Adjust index and number for rounding. */
if (human_readable_size >= 999.5)
{
/* This assertion should never fail, because we only have one
decimal digit in the petabyte range and so the number of
petabytes can't be large enough to cause the program flow
to enter this conditional block. */
assert(index < order_size - 1);
human_readable_size /= 1000.0;
++index;
} }
return format_size(human_readable_size, return format_size(human_readable_size,

View File

@ -25,7 +25,7 @@
""" """
# $HeadURL: https://svn.apache.org/repos/asf/subversion/branches/1.14.x/win-tests.py $ # $HeadURL: https://svn.apache.org/repos/asf/subversion/branches/1.14.x/win-tests.py $
# $LastChangedRevision: 1813897 $ # $LastChangedRevision: 1884665 $
import os, sys, subprocess import os, sys, subprocess
import filecmp import filecmp
@ -1263,7 +1263,11 @@ def stop(self):
or isinstance(i, gen_base.TargetSWIGLib)) and i.lang == 'python': or isinstance(i, gen_base.TargetSWIGLib)) and i.lang == 'python':
src = os.path.join(abs_objdir, i.filename) src = os.path.join(abs_objdir, i.filename)
copy_changed_file(src, to_dir=swig_py_libsvn) basename = os.path.basename(src)
if sys.version_info[:2] >= (3, 5) \
and basename.endswith('.pyd') and objdir == 'Debug':
basename = basename[:-4] + '_d.pyd'
copy_changed_file(src, os.path.join(swig_py_libsvn, basename))
py_src = os.path.join(abs_srcdir, 'subversion', 'bindings', 'swig', 'python') py_src = os.path.join(abs_srcdir, 'subversion', 'bindings', 'swig', 'python')
@ -1285,7 +1289,8 @@ def stop(self):
if 'PYTHONPATH' in os.environ: if 'PYTHONPATH' in os.environ:
pythonpath += os.pathsep + os.environ['PYTHONPATH'] pythonpath += os.pathsep + os.environ['PYTHONPATH']
python_exe = 'python.exe' python_exe = sys.executable if objdir != 'Debug' else \
os.path.join(os.path.dirname(sys.executable), 'python_d.exe')
old_cwd = os.getcwd() old_cwd = os.getcwd()
try: try:
os.environ['PYTHONPATH'] = pythonpath os.environ['PYTHONPATH'] = pythonpath

View File

@ -8,6 +8,7 @@ INTERNALLIB= yes
LIB= svn_subr LIB= svn_subr
SRCS= adler32.c \ SRCS= adler32.c \
apr_escape.c \
atomic.c \ atomic.c \
auth.c \ auth.c \
base64.c \ base64.c \

View File

@ -122,7 +122,7 @@
#define PACKAGE_NAME "subversion" #define PACKAGE_NAME "subversion"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define PACKAGE_STRING "subversion 1.14.0" #define PACKAGE_STRING "subversion 1.14.1"
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "subversion" #define PACKAGE_TARNAME "subversion"
@ -131,7 +131,7 @@
#define PACKAGE_URL "" #define PACKAGE_URL ""
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "1.14.0" #define PACKAGE_VERSION "1.14.1"
/* Define to 1 if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1 #define STDC_HEADERS 1