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:
parent
95138d09d2
commit
0ff1014944
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
@ -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
|
||||||
|
56
contrib/subversion/configure
vendored
56
contrib/subversion/configure
vendored
@ -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,6 +24462,12 @@ $as_echo "$ac_cv_python_libs" >&6; }
|
|||||||
fi
|
fi
|
||||||
`"
|
`"
|
||||||
|
|
||||||
|
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 "$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 :
|
||||||
@ -24501,7 +24507,7 @@ $as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.2
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -25093,6 +25099,12 @@ $as_echo "$ac_cv_python_libs" >&6; }
|
|||||||
fi
|
fi
|
||||||
`"
|
`"
|
||||||
|
|
||||||
|
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 "$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 :
|
||||||
@ -25132,7 +25144,7 @@ $as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.2
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -25724,6 +25736,12 @@ $as_echo "$ac_cv_python_libs" >&6; }
|
|||||||
fi
|
fi
|
||||||
`"
|
`"
|
||||||
|
|
||||||
|
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 "$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 :
|
||||||
@ -25763,7 +25781,7 @@ $as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.2
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -26358,6 +26376,12 @@ $as_echo "$ac_cv_python_libs" >&6; }
|
|||||||
fi
|
fi
|
||||||
`"
|
`"
|
||||||
|
|
||||||
|
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 "$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 :
|
||||||
@ -26397,7 +26421,7 @@ $as_echo "$as_me: WARNING: Subversion Python bindings for Python 2 require 1.3.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\\"
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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]:
|
||||||
|
@ -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 */
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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.
|
||||||
|
@ -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. */
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
|
@ -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 */
|
||||||
|
|
||||||
|
@ -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,14 +906,35 @@ 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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;
|
APR_ARRAY_PUSH(acls, const authz_acl_t *) = acl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
135
contrib/subversion/subversion/libsvn_subr/apr_escape.c
Normal file
135
contrib/subversion/subversion/libsvn_subr/apr_escape.c
Normal 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) */
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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 "
|
||||||
|
@ -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; " \
|
||||||
""
|
""
|
||||||
|
|
||||||
|
@ -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 */
|
||||||
|
@ -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; " \
|
||||||
""
|
""
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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 \
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user