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*]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
[build-outputs.mk]
|
||||
indent_style = tab
|
||||
|
@ -4,8 +4,51 @@
|
||||
# To view an issue listed as (issue #XXXX), visit:
|
||||
# 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
|
||||
(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
|
||||
|
||||
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)
|
||||
|
||||
|
||||
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
|
||||
(24 Jul 2019, from /branches/1.10.x)
|
||||
https://svn.apache.org/repos/asf/subversion/tags/1.10.6
|
||||
|
@ -3,7 +3,7 @@
|
||||
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:
|
||||
@ -206,7 +206,7 @@ I. INTRODUCTION
|
||||
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
|
||||
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
|
||||
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)
|
||||
|
||||
@ -832,7 +838,7 @@ II. INSTALLATION
|
||||
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.
|
||||
* 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
|
||||
from https://www.apache.org/dist/apr/.
|
||||
* SQLite 3.8.2 or higher from https://www.sqlite.org/download.html
|
||||
|
@ -1,5 +1,5 @@
|
||||
Apache Subversion
|
||||
Copyright 2020 The Apache Software Foundation
|
||||
Copyright 2021 The Apache Software Foundation
|
||||
|
||||
This product includes software developed by many people, and distributed
|
||||
under Contributor License Agreements to The Apache Software Foundation
|
||||
|
@ -178,8 +178,8 @@ if test -n "$RELEASE_MODE"; then
|
||||
# Build the SWIG-related files
|
||||
make -f autogen-standalone.mk autogen-swig || gen_failed=1
|
||||
|
||||
# Remove the .swig_checked file
|
||||
rm -f .swig_checked
|
||||
# Remove the .swig_*checked files
|
||||
rm -f .swig_checked .swig_pl_checked .swig_py_checked .swig_rb_checked
|
||||
fi
|
||||
|
||||
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.c
|
||||
subversion/libsvn_subr/utf8proc/utf8proc_data.c
|
||||
subversion/svn/filesize.c
|
||||
private-built-includes =
|
||||
subversion/svn_private_config.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
|
||||
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
|
||||
# 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
|
||||
opt-test packed-data-test path-test prefix-string-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
|
||||
revision-test
|
||||
subst_translate-test io-test
|
||||
|
56
contrib/subversion/configure
vendored
56
contrib/subversion/configure
vendored
@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# 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/>.
|
||||
#
|
||||
@ -590,8 +590,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='subversion'
|
||||
PACKAGE_TARNAME='subversion'
|
||||
PACKAGE_VERSION='1.14.0'
|
||||
PACKAGE_STRING='subversion 1.14.0'
|
||||
PACKAGE_VERSION='1.14.1'
|
||||
PACKAGE_STRING='subversion 1.14.1'
|
||||
PACKAGE_BUGREPORT='http://subversion.apache.org/'
|
||||
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.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
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]...
|
||||
|
||||
@ -1570,7 +1570,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of subversion 1.14.0:";;
|
||||
short | recursive ) echo "Configuration of subversion 1.14.1:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@ -1826,7 +1826,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
subversion configure 1.14.0
|
||||
subversion configure 1.14.1
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@ -2370,7 +2370,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
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
|
||||
|
||||
$ $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: Configuring Subversion 1.14.0" >&6;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.14.1" >&5
|
||||
$as_echo "$as_me: Configuring Subversion 1.14.1" >&6;}
|
||||
|
||||
abs_srcdir="`cd $srcdir && pwd`"
|
||||
|
||||
@ -4773,7 +4773,7 @@ fi
|
||||
# ==== 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"
|
||||
@ -24462,6 +24462,12 @@ $as_echo "$ac_cv_python_libs" >&6; }
|
||||
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_n "checking for Python >= 3... " >&6; }
|
||||
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
|
||||
|
||||
@ -25093,6 +25099,12 @@ $as_echo "$ac_cv_python_libs" >&6; }
|
||||
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_n "checking for Python >= 3... " >&6; }
|
||||
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
|
||||
|
||||
@ -25724,6 +25736,12 @@ $as_echo "$ac_cv_python_libs" >&6; }
|
||||
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_n "checking for Python >= 3... " >&6; }
|
||||
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
|
||||
|
||||
@ -26358,6 +26376,12 @@ $as_echo "$ac_cv_python_libs" >&6; }
|
||||
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_n "checking for Python >= 3... " >&6; }
|
||||
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
|
||||
|
||||
@ -28361,7 +28385,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
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
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@ -28427,7 +28451,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
subversion config.status 1.14.0
|
||||
subversion config.status 1.14.1
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
@ -91,7 +91,7 @@ AC_SUBST([MKDIR])
|
||||
dnl verify apr version and set apr flags
|
||||
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)
|
||||
|
||||
|
@ -70,7 +70,7 @@ def main(fname, gentype, verfname=None,
|
||||
|
||||
if ('--debug', '') in other_options:
|
||||
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:
|
||||
print(dep_type + ": " + _objinfo(target))
|
||||
for source in target_dict[target]:
|
||||
|
@ -29,6 +29,7 @@
|
||||
#define SVN_DEP_COMPAT_H
|
||||
|
||||
#include <apr_version.h>
|
||||
#include <apr_errno.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -193,6 +194,16 @@ extern "C" {
|
||||
((major*1000000 + minor*1000 + patch) <= SVN_SQLITE_MIN_VERSION_NUMBER)
|
||||
#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
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
@ -80,7 +80,7 @@ svn_sort__array(apr_array_header_t *array,
|
||||
int (*comparison_func)(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 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
|
||||
@ -93,7 +93,7 @@ svn_sort__bsearch_lower_bound(const apr_array_header_t *array,
|
||||
const void *key,
|
||||
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 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
|
||||
@ -116,7 +116,7 @@ svn_sort__array_lookup(const apr_array_header_t *array,
|
||||
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
|
||||
* make room.
|
||||
*
|
||||
@ -131,7 +131,7 @@ svn_sort__array_insert2(apr_array_header_t *array,
|
||||
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.
|
||||
*
|
||||
* 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 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.
|
||||
*/
|
||||
|
@ -2244,7 +2244,7 @@ svn_ra_has_capability(svn_ra_session_t *session,
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
@ -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
|
||||
* invalid-pathname error but not ERROR_INVALID_NAME, so we include it.
|
||||
|
@ -70,7 +70,7 @@ extern "C" {
|
||||
*
|
||||
* @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. */
|
||||
@ -93,7 +93,7 @@ extern "C" {
|
||||
*
|
||||
* 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.
|
||||
@ -117,7 +117,7 @@ extern "C" {
|
||||
* file version. Its value remains 0 in the repository except in release
|
||||
* 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. */
|
||||
|
@ -264,7 +264,7 @@ typedef struct merge_cmd_baton_t {
|
||||
|
||||
/* Reference to the one-and-only CHILDREN_WITH_MERGEINFO (see global
|
||||
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. */
|
||||
|
||||
@ -1545,6 +1545,25 @@ record_update_delete(merge_cmd_baton_t *merge_b,
|
||||
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;
|
||||
}
|
||||
|
||||
@ -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,
|
||||
which have mergeinfo set on them or meet one of the other criteria
|
||||
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. */
|
||||
static svn_error_t *
|
||||
remove_absent_children(const char *target_wcpath,
|
||||
@ -5609,7 +5628,7 @@ remove_absent_children(const char *target_wcpath,
|
||||
{
|
||||
svn_client__merge_path_t *child =
|
||||
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_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 *iterpool;
|
||||
apr_hash_index_t *hi;
|
||||
apr_array_header_t *a;
|
||||
int i;
|
||||
|
||||
if (!merge_b->paths_with_new_mergeinfo || merge_b->dry_run)
|
||||
return SVN_NO_ERROR;
|
||||
|
||||
/* 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);
|
||||
for (hi = apr_hash_first(pool, merge_b->paths_with_new_mergeinfo);
|
||||
hi;
|
||||
hi = apr_hash_next(hi))
|
||||
for (i = 0; i < a->nelts; i++)
|
||||
{
|
||||
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_explicit_mergeinfo;
|
||||
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. */
|
||||
svn_boolean_t inherited_mergeinfo; /* Whether PRE_MERGE_MERGEINFO was
|
||||
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
|
||||
directory of the merge target,
|
||||
has no explicit mergeinfo prior
|
||||
|
@ -453,7 +453,8 @@ mtcc_verify_create(svn_client__mtcc_t *mtcc,
|
||||
|
||||
if (op)
|
||||
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);
|
||||
|
||||
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));
|
||||
|
||||
/* handle new revision */
|
||||
if ((entry > 0 && proto_entry.offset == 0) || eof)
|
||||
if (eof || (entry > 0 && proto_entry.offset == 0))
|
||||
{
|
||||
/* 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. */
|
||||
apr_pool_t *subpool = svn_pool_create(scratch_pool);
|
||||
|
||||
/* Find all ACLs for REPOSITORY.
|
||||
* Note that repo-specific rules replace global rules,
|
||||
* even if they don't apply to the current user. */
|
||||
/* Find all ACLs for REPOSITORY. */
|
||||
apr_array_header_t *acls = apr_array_make(subpool, authz->acls->nelts,
|
||||
sizeof(authz_acl_t *));
|
||||
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 *);
|
||||
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,
|
||||
AUTHZ_ANY_REPOSITORY));
|
||||
/* Current ACL is a per-repository rule. */
|
||||
SVN_ERR_ASSERT_NO_RETURN(strcmp(acl->rule.repos,
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -237,6 +237,10 @@ get_repos_config(svn_stream_t **stream,
|
||||
{
|
||||
/* Search for a repository in the full path. */
|
||||
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. */
|
||||
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_errno.h> /* for apr_strerror */
|
||||
#include <apr_version.h>
|
||||
#if APR_VERSION_AT_LEAST(1,5,0)
|
||||
#include <apr_escape.h>
|
||||
#else
|
||||
#include "private/svn_dep_compat.h"
|
||||
#endif
|
||||
#include <apr_general.h> /* for apr_initialize/apr_terminate */
|
||||
#include <apr_strings.h> /* for apr_snprintf */
|
||||
#include <apr_env.h> /* for apr_env_get */
|
||||
#include <apr_pools.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
|
||||
editor binary. Sources to search include: the EDITOR_CMD argument
|
||||
(if not NULL), $SVN_EDITOR, the runtime CONFIG variable (if CONFIG
|
||||
editor binary, in native C string on Unix/Linux platforms and in UTF-8
|
||||
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
|
||||
SVN_ERR_CL_NO_EXTERNAL_EDITOR if no binary can be found. */
|
||||
static svn_error_t *
|
||||
find_editor_binary(const char **editor,
|
||||
const char *editor_cmd,
|
||||
apr_hash_t *config)
|
||||
apr_hash_t *config,
|
||||
apr_pool_t *pool)
|
||||
{
|
||||
const char *e;
|
||||
const char *e_cfg;
|
||||
struct svn_config_t *cfg;
|
||||
apr_status_t status;
|
||||
|
||||
/* 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;
|
||||
#endif
|
||||
|
||||
/* Otherwise look for the Subversion-specific environment variable. */
|
||||
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 (! e)
|
||||
{
|
||||
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);
|
||||
#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 (! e)
|
||||
e = getenv("VISUAL");
|
||||
{
|
||||
status = apr_env_get((char**)&e, "VISUAL", pool);
|
||||
if (status || ! *e)
|
||||
{
|
||||
e = NULL;
|
||||
}
|
||||
}
|
||||
if (! e)
|
||||
e = getenv("EDITOR");
|
||||
{
|
||||
status = apr_env_get((char**)&e, "EDITOR", pool);
|
||||
if (status || ! *e)
|
||||
{
|
||||
e = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SVN_CLIENT_EDITOR
|
||||
/* 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)
|
||||
{
|
||||
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;
|
||||
int sys_err;
|
||||
apr_status_t apr_err;
|
||||
|
||||
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);
|
||||
if (apr_err)
|
||||
@ -1423,10 +1479,18 @@ svn_cmdline__edit_file_externally(const char *path,
|
||||
return svn_error_wrap_apr
|
||||
(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,
|
||||
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);
|
||||
#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);
|
||||
if (apr_err)
|
||||
@ -1458,6 +1522,9 @@ svn_cmdline__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
|
||||
{
|
||||
const char *editor;
|
||||
const char *cmd;
|
||||
#ifdef WIN32
|
||||
const WCHAR *wcmd;
|
||||
#endif
|
||||
apr_file_t *tmp_file;
|
||||
const char *tmpfile_name;
|
||||
const char *tmpfile_native;
|
||||
@ -1471,7 +1538,7 @@ svn_cmdline__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
|
||||
int sys_err;
|
||||
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. */
|
||||
if (as_text)
|
||||
@ -1581,13 +1648,18 @@ svn_cmdline__edit_string_externally(svn_string_t **edited_contents /* UTF-8! */,
|
||||
goto cleanup;
|
||||
|
||||
/* 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)
|
||||
goto cleanup;
|
||||
|
||||
/* editor is explicitly documented as being interpreted by the user's shell,
|
||||
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
|
||||
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. */
|
||||
#ifndef WIN32
|
||||
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)
|
||||
{
|
||||
/* Extracting any meaning from sys_err is platform specific, so just
|
||||
|
@ -143,3 +143,29 @@ svn_iter__break(void)
|
||||
{
|
||||
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"),
|
||||
stream, pool));
|
||||
if (have_options)
|
||||
|
@ -143,7 +143,7 @@ svn_version_extended(svn_boolean_t verbose,
|
||||
info->build_time = NULL;
|
||||
info->build_host = SVN_BUILD_HOST;
|
||||
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"
|
||||
"see the NOTICE file for more information.\n"
|
||||
"Subversion is open source software, see "
|
||||
|
@ -177,7 +177,7 @@
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED " \
|
||||
"ON NODES (wc_id, moved_to, op_depth); " \
|
||||
"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; " \
|
||||
""
|
||||
|
||||
|
@ -636,7 +636,7 @@ ON NODES (wc_id, moved_to, op_depth);
|
||||
|
||||
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
|
||||
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 " \
|
||||
"ON NODES (wc_id, moved_to, op_depth); " \
|
||||
"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; " \
|
||||
""
|
||||
|
||||
|
@ -452,7 +452,7 @@ append_tree_conflict_info_xml(svn_stringbuf_t *str,
|
||||
repos_root_url, repos_relpath, peg_rev,
|
||||
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,
|
||||
&node_kind,
|
||||
conflict,
|
||||
@ -529,7 +529,7 @@ svn_cl__append_conflict_info_xml(svn_stringbuf_t *str,
|
||||
repos_root_url, repos_relpath, peg_rev,
|
||||
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,
|
||||
scratch_pool, scratch_pool));
|
||||
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,
|
||||
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,
|
||||
scratch_pool, scratch_pool));
|
||||
if (repos_root_url && repos_relpath)
|
||||
|
@ -88,15 +88,24 @@ format_size(double human_readable_size,
|
||||
+ 1 nul terminator
|
||||
---
|
||||
= 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);
|
||||
}
|
||||
|
||||
@ -138,8 +147,9 @@ get_base2_unit_file_size(svn_filesize_t size,
|
||||
assert(index < order_size - 1);
|
||||
++index;
|
||||
}
|
||||
|
||||
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,
|
||||
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( 999999999999999), " EB", "E"}, /* exa */
|
||||
{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]);
|
||||
|
||||
@ -170,20 +180,29 @@ get_base10_unit_file_size(svn_filesize_t size,
|
||||
|
||||
/* Adjust the size to the given order of magnitude.
|
||||
|
||||
This is division by (order[index].mask + 1), which is the base-1000
|
||||
magnitude of the size. For large file sizes, we split the operation
|
||||
into an integer and a floating-point division, so that we don't
|
||||
This is division by (order[index].mask + 1), which is the
|
||||
base-1000 magnitude of the size. We split the operation into an
|
||||
integer and a floating-point division, so that we don't
|
||||
overflow the mantissa. */
|
||||
if (index == 0)
|
||||
human_readable_size = (double)size;
|
||||
else if (index <= 3)
|
||||
human_readable_size = (double)size / (order[index].mask + 1);
|
||||
else
|
||||
{
|
||||
/* [ Keep integer division here! ] */
|
||||
const double divisor = (double)((order[index].mask + 1) / 1000000);
|
||||
human_readable_size = (size / 1000000) / divisor;
|
||||
/* [ And here! ] */
|
||||
const svn_filesize_t divisor = (order[index - 1].mask + 1);
|
||||
/* [Keep integer arithmetic here!] */
|
||||
human_readable_size = (size / divisor) / 1000.0;
|
||||
}
|
||||
|
||||
/* 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,
|
||||
|
@ -25,7 +25,7 @@
|
||||
"""
|
||||
|
||||
# $HeadURL: https://svn.apache.org/repos/asf/subversion/branches/1.14.x/win-tests.py $
|
||||
# $LastChangedRevision: 1813897 $
|
||||
# $LastChangedRevision: 1884665 $
|
||||
|
||||
import os, sys, subprocess
|
||||
import filecmp
|
||||
@ -1263,7 +1263,11 @@ def stop(self):
|
||||
or isinstance(i, gen_base.TargetSWIGLib)) and i.lang == 'python':
|
||||
|
||||
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')
|
||||
|
||||
@ -1285,7 +1289,8 @@ def stop(self):
|
||||
if 'PYTHONPATH' in os.environ:
|
||||
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()
|
||||
try:
|
||||
os.environ['PYTHONPATH'] = pythonpath
|
||||
|
@ -8,6 +8,7 @@ INTERNALLIB= yes
|
||||
LIB= svn_subr
|
||||
|
||||
SRCS= adler32.c \
|
||||
apr_escape.c \
|
||||
atomic.c \
|
||||
auth.c \
|
||||
base64.c \
|
||||
|
@ -122,7 +122,7 @@
|
||||
#define PACKAGE_NAME "subversion"
|
||||
|
||||
/* 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 PACKAGE_TARNAME "subversion"
|
||||
@ -131,7 +131,7 @@
|
||||
#define PACKAGE_URL ""
|
||||
|
||||
/* 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 STDC_HEADERS 1
|
||||
|
Loading…
Reference in New Issue
Block a user