Author: brane
Date: Tue Feb 24 15:23:33 2015
New Revision: 1661981
URL: http://svn.apache.org/r1661981
Log:
On the svn-info-detail branch: Sync with trunk up to r1661975.
Added:
subversion/branches/svn-info-detail/tools/dev/wc-ng/svn-wc-db-tester.c
- copied unchanged from r1661975,
subversion/trunk/tools/dev/wc-ng/svn-wc-db-tester.c
Modified:
subversion/branches/svn-info-detail/ (props changed)
subversion/branches/svn-info-detail/CHANGES
subversion/branches/svn-info-detail/INSTALL
subversion/branches/svn-info-detail/build.conf
subversion/branches/svn-info-detail/build/generator/gen_base.py
subversion/branches/svn-info-detail/build/getversion.py
subversion/branches/svn-info-detail/build/run_tests.py
subversion/branches/svn-info-detail/build/transform_sql.py
subversion/branches/svn-info-detail/gen-make.py
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.cpp
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.h
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
subversion/branches/svn-info-detail/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
subversion/branches/svn-info-detail/subversion/bindings/swig/svn_wc.i
subversion/branches/svn-info-detail/subversion/include/private/svn_cache.h
subversion/branches/svn-info-detail/subversion/include/private/svn_sqlite.h
subversion/branches/svn-info-detail/subversion/include/private/svn_wc_private.h
subversion/branches/svn-info-detail/subversion/include/svn_client.h
subversion/branches/svn-info-detail/subversion/include/svn_repos.h
subversion/branches/svn-info-detail/subversion/include/svn_version.h
subversion/branches/svn-info-detail/subversion/include/svn_wc.h
subversion/branches/svn-info-detail/subversion/libsvn_client/add.c
subversion/branches/svn-info-detail/subversion/libsvn_client/blame.c
subversion/branches/svn-info-detail/subversion/libsvn_client/client.h
subversion/branches/svn-info-detail/subversion/libsvn_client/commit.c
subversion/branches/svn-info-detail/subversion/libsvn_client/commit_util.c
subversion/branches/svn-info-detail/subversion/libsvn_client/copy.c
subversion/branches/svn-info-detail/subversion/libsvn_client/deprecated.c
subversion/branches/svn-info-detail/subversion/libsvn_client/externals.c
subversion/branches/svn-info-detail/subversion/libsvn_client/merge.c
subversion/branches/svn-info-detail/subversion/libsvn_client/patch.c
subversion/branches/svn-info-detail/subversion/libsvn_ra/ra_loader.c
subversion/branches/svn-info-detail/subversion/libsvn_repos/commit.c
subversion/branches/svn-info-detail/subversion/libsvn_repos/load-fs-vtable.c
subversion/branches/svn-info-detail/subversion/libsvn_repos/rev_hunt.c
subversion/branches/svn-info-detail/subversion/libsvn_subr/cache-membuffer.c
subversion/branches/svn-info-detail/subversion/libsvn_subr/cache.c
subversion/branches/svn-info-detail/subversion/libsvn_subr/sqlite.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/adm_ops.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/conflicts.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/copy.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/crop.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/delete.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/diff_editor.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/entries.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/externals.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/info.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/node.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/questions.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/revision_status.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/status.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/translate.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/update_editor.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/upgrade.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc-checks.sql
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc-queries.sql
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc.h
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc_db.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc_db.h
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc_db_private.h
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc_db_update_move.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc_db_util.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/wc_db_wcroot.c
subversion/branches/svn-info-detail/subversion/libsvn_wc/workqueue.c
subversion/branches/svn-info-detail/subversion/mod_dav_svn/mod_dav_svn.c
subversion/branches/svn-info-detail/subversion/svn/blame-cmd.c
subversion/branches/svn-info-detail/subversion/svn/changelist-cmd.c
subversion/branches/svn-info-detail/subversion/svn/commit-cmd.c
subversion/branches/svn-info-detail/subversion/svn/copy-cmd.c
subversion/branches/svn-info-detail/subversion/svn/diff-cmd.c
subversion/branches/svn-info-detail/subversion/svn/status.c
subversion/branches/svn-info-detail/subversion/svn/svn.c
subversion/branches/svn-info-detail/subversion/svn/util.c
subversion/branches/svn-info-detail/subversion/tests/cmdline/README
subversion/branches/svn-info-detail/subversion/tests/cmdline/blame_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/copy_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/depth_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/externals_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/info_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/lock_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/log_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/move_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/special_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/svnadmin_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/svntest/actions.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/svntest/factory.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/svntest/main.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/svntest/sandbox.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/svntest/wc.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/switch_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/tree_conflict_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/update_tests.py
subversion/branches/svn-info-detail/subversion/tests/cmdline/upgrade_tests.py
subversion/branches/svn-info-detail/subversion/tests/libsvn_client/client-test.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_client/mtcc-test.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_subr/cache-test.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_subr/sqlite-test.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_subr/subst_translate-test.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_wc/db-test.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_wc/entries-compat.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_wc/op-depth-test.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_wc/utils.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_wc/utils.h
subversion/branches/svn-info-detail/subversion/tests/libsvn_wc/wc-queries-test.c
subversion/branches/svn-info-detail/subversion/tests/libsvn_wc/wc-test-queries.sql
subversion/branches/svn-info-detail/tools/buildbot/slaves/svn-sparc-solaris/svncheck.sh
subversion/branches/svn-info-detail/tools/client-side/bash_completion
subversion/branches/svn-info-detail/tools/dist/backport.pl
subversion/branches/svn-info-detail/tools/dist/backport_tests.py
Propchange: subversion/branches/svn-info-detail/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Feb 24 15:23:33 2015
@@ -88,3 +88,4 @@
/subversion/branches/verify-at-commit:1462039-1462408
/subversion/branches/verify-keep-going:1439280-1546110
/subversion/branches/wc-collate-path:1402685-1480384
+/subversion/trunk:1660035-1661975
Propchange: subversion/branches/svn-info-detail/
------------------------------------------------------------------------------
webviewer:revision = http://svn.apache.org/r%REVISION%
Modified: subversion/branches/svn-info-detail/CHANGES
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/CHANGES?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/CHANGES (original)
+++ subversion/branches/svn-info-detail/CHANGES Tue Feb 24 15:23:33 2015
@@ -11,7 +11,7 @@ http://svn.apache.org/repos/asf/subversi
* membuffer: virtually perfect short-term cache efficiency (r1476664 et at)
* membuffer: quadruple the maximum cacheable directory size (r1545948 et
al)
* resolve: improve interactive conflict resolution menus
- * blame: allow -r M:N with M>N
+ * blame: support showing prospective as well as previous changes
* svn auth: new subcommand to manage cached credentials and certs
* svn youngest: new remote version of svnlook youngest (issue #4299)
* new experimental filesystem fsx (faster, smaller)
Modified: subversion/branches/svn-info-detail/INSTALL
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/INSTALL?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/INSTALL (original)
+++ subversion/branches/svn-info-detail/INSTALL Tue Feb 24 15:23:33 2015
@@ -15,7 +15,7 @@ Contents:
D. Documentation
II. INSTALLATION
- A. Building from a Tarball or RPM
+ A. Building from a Tarball
B. Building the Latest Source under Unix
C. Building under Unix in Different Directories
D. Installing from a Zip or Installer File under Windows
@@ -123,7 +123,8 @@ I. INTRODUCTION
create a repository, you have the option of specifying a
storage back-end. The Berkeley DB back-end will only be
available if the BDB libraries are discovered at compile
- time.
+ time. The Berkeley DB back-end has been deprecated and
+ is not recommend.
* libsasl (OPTIONAL for client and server)
@@ -192,7 +193,7 @@ I. INTRODUCTION
commands described in section II.B before installing the following.
- 1. Apache Portable Runtime 0.9.7 or 1.X.X (REQUIRED)
+ 1. Apache Portable Runtime 1.3 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)
@@ -200,8 +201,8 @@ I. INTRODUCTION
****************************************************************
- ** IMPORTANT ISSUE ABOUT APR VERSIONS: READ THIS. **
- ** **
+ ** IMPORTANT ISSUE ABOUT APR VERSIONS: READ THIS **
+ ** IF UPGRADING FROM MUCH OLDER SUBVERSION **
****************************************************************
| |
| APR 0.9.X and 1.X are binary-incompatible. |
@@ -355,10 +356,6 @@ I. INTRODUCTION
Under Windows, you can specify the paths to these libraries by
passing the options --with-zlib and --with-openssl to gen-make.py.
- ### Is that right? In-tree build of Neon was disabled in r875974.
- This may now apply to Serf, or else gen-make.py should be
- updated to remove such options.
-
c. Using OpenSSL on the Apache server
You can also add support for these features to an Apache httpd
@@ -465,23 +462,7 @@ I. INTRODUCTION
script.
- 12. MASM 6 or newer (Windows only, OPTIONAL)
-
- The Windows build scripts for Subversion can use the Microsoft
- Macro Assembler (MASM) to build an optimized version of the ZLib
- library. Make sure that the version of MASM you use is compatible
- with the C compiler. If you're using MSVC 6, and don't have MASM 6,
- a free MASM-compatible assembler is available here:
-
- http://www.masm32.com/
-
- You only need ML.EXE and ML.ERR from this distribution.
-
- The VS.NET installation already contains MASM (but note, that
- version if MASM is not compatible with MSVC 6).
-
-
- 13. SQLite (REQUIRED)
+ 12. SQLite (REQUIRED)
Subversion 1.8 requires SQLite version 3.7.12 or above. You can meet
this dependency several ways:
@@ -497,26 +478,26 @@ I. INTRODUCTION
http://www.sqlite.org/download.html
- 14. pkg-config (Unix only, OPTIONAL)
+ 13. pkg-config (Unix only, OPTIONAL)
Subversion uses pkg-config to find appropriate options used
at build time.
- 15. D-Bus (Unix only, OPTIONAL)
+ 14. D-Bus (Unix only, OPTIONAL)
D-Bus is a message bus system. D-Bus is required for support for KWallet
and GNOME Keyring. pkg-config is needed to find D-Bus headers and
library.
- 16. Qt 4 (Unix only, OPTIONAL)
+ 15. Qt 4 (Unix only, OPTIONAL)
Qt is a cross-platform application framework. QtCore, QtDBus and QtGui
modules are required for support for KWallet. pkg-config is needed
to find Qt headers and libraries.
- 17. KDELibs 4 (Unix only, OPTIONAL)
+ 16. KDELibs 4 (Unix only, OPTIONAL)
Subversion contains optional support for storing passwords in KWallet.
KDELibs contains core KDE libraries. Subversion uses libkdecore and
libkdeui
@@ -528,13 +509,13 @@ I. INTRODUCTION
--with-kwallet=/path/to/KDE/prefix
- 18. GLib 2 (Unix only, OPTIONAL)
+ 17. GLib 2 (Unix only, OPTIONAL)
GLib is a general-purpose utility library. GLib is required for support
for GNOME Keyring. pkg-config is needed to find GLib headers and library.
- 19. GNOME Keyring (Unix only, OPTIONAL)
+ 18. GNOME Keyring (Unix only, OPTIONAL)
Subversion contains optional support for storing passwords in GNOME
Keyring.
pkg-config is needed to find GNOME Keyring headers and library. D-Bus and
@@ -542,7 +523,7 @@ I. INTRODUCTION
then pass the '--with-gnome-keyring' option to `configure`.
- 20. Ctypesgen (OPTIONAL)
+ 19. Ctypesgen (OPTIONAL)
Ctypesgen is Python wrapper generator for ctypes. It is used to generate
a part of Subversion Ctypes Python bindings (CSVN). If you want to build
@@ -553,7 +534,7 @@ I. INTRODUCTION
For more information on CSVN, see
subversion/bindings/ctypes-python/README.
- 21. libmagic (OPTIONAL)
+ 20. libmagic (OPTIONAL)
Subversion's configure script attempts to find libmagic automatically.
If it is installed in a non-standard location, then use:
@@ -574,7 +555,7 @@ I. INTRODUCTION
--with-libmagic
- 22. Googlemock (OPTIONAL)
+ 21. Googlemock (OPTIONAL)
Googlemock can be installed and built in-tree by invoking
@@ -594,7 +575,7 @@ I. INTRODUCTION
II. INSTALLATION
============
- A. Building from a Tarball or RPM
+ A. Building from a Tarball
------------------------------
1. Building from a Tarball
@@ -612,33 +593,6 @@ II. INSTALLATION
You can also run the full test suite by running 'make check'.
- 2. Building from an RPM
-
- If you are using Linux (or any OS that can use RPM) then another
- possibility is to download the binary RPM from the
- http://summersoft.fay.ar.us/pub/subversion directory.
-
- Currently only Linux on the i386 platform is supported
- using this method. You might also require additional RPMS
- (which can be found in the above mentioned directory) to use the
- subversion RPM depending on what packages you already have installed:
-
- subversion*.i386.rpm
- apache*.i386.rpm (Version 2.0.49 or greater)
- db*.i386.rpm (Version 4.0.14 or greater; version 4.3.27 or
- 4.2.52 is preferred however)
- expat (Comes with RedHat)
-
- After downloading, install it (as root user):
-
- # rpm -ivh subversion*.386.rpm (add other packages as necessary)
-
- Note: For an easy way to generate a new version of the RPM
- source and binary package from the latest source code you
- just checked out, see the packages/rpm/README file for a
- one-line build procedure.
-
-
B. Building the Latest Source under Unix
-------------------------------------
@@ -658,7 +612,6 @@ II. INSTALLATION
# rm -f /usr/local/lib/libsvn*
# rm -f /usr/local/lib/libapr*
- # rm -f /usr/local/lib/libexpat*
# rm -f /usr/local/lib/libserf*
Start the process by running "autogen.sh":
@@ -813,7 +766,7 @@ II. INSTALLATION
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
- 0.9.12 or later. Included in both the Subversion dependencies ZIP file
+ 1.3 or later. Included in both the Subversion dependencies ZIP file
and the Apache 2 source zip. If you are building from a Subversion
checkout and have not downloaded Apache 2, then get these 3 libraries
from http://www.apache.org/dist/apr/.
@@ -830,11 +783,7 @@ II. INSTALLATION
* [Optional] Apache 2 source, downloaded from
http://httpd.apache.org/download.cgi, these instructions assume
version 2.0.58. This is only needed for building the Subversion
- server Apache modules. Note that although Subversion will compile
- against Apache 2.2.3 and APR 1.2.7, there is a bug that causes
- runtime failures with Subversion on Windows. The fix is included in
- APR 1.2.8 and will be bundled in the next HTTP Server release
- (likely to be 2.2.4).
+ server Apache modules. ### FIXME Apache 2.2 or greater required.
* [Optional] Apache 2 msi install file, also from
http://httpd.apache.org/download.cgi (required for running the
tests). Only needed for testing the server dso modules and if
@@ -1164,12 +1113,6 @@ III. BUILDING A SUBVERSION SERVER
A. Setting Up Apache
-----------------
- (Following the BOOTSTRAPPING FROM RPM procedures above will install and
- build the latest Subversion server for Linux RedHat 7.1, 7.2, and PPC
- Linux systems *IF* the apache-devel-2.0.41 or greater package is already
- installed when the SUBVERSION RPM is built.)
-
-
1. Obtaining and Installing Apache 2
Subversion tries to compile against the latest released version
Modified: subversion/branches/svn-info-detail/build.conf
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/build.conf?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/build.conf (original)
+++ subversion/branches/svn-info-detail/build.conf Tue Feb 24 15:23:33 2015
@@ -1354,6 +1354,15 @@ libs = libsvn_wc libsvn_subr apriconv ap
msvc-force-static = yes
testing = skip
+[svn-wc-db-tester]
+type = exe
+path = tools/dev/wc-ng
+sources = svn-wc-db-tester.c
+install = test
+libs = libsvn_wc libsvn_subr apr
+msvc-force-static = yes
+testing = skip
+
# ----------------------------------------------------------------------------
#
# EXTERNAL TARGETS (NO BUILD NEEDED)
@@ -1513,7 +1522,7 @@ type = project
path = build/win32
libs = __ALL_TESTS__
diff diff3 diff4 fsfs-access-map svnauth
- svn-populate-node-origins-index
+ svn-populate-node-origins-index x509-parser svn-wc-db-tester
[__LIBS__]
type = project
@@ -1628,6 +1637,7 @@ libs = libsvn_wc libsvn_subr apriconv ap
install = tools
[x509-parser]
+description = Tool to verify x509 certificates
type = exe
path = tools/dev
sources = x509-parser.c
Modified: subversion/branches/svn-info-detail/build/generator/gen_base.py
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/build/generator/gen_base.py?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/build/generator/gen_base.py (original)
+++ subversion/branches/svn-info-detail/build/generator/gen_base.py Tue Feb 24
15:23:33 2015
@@ -240,12 +240,16 @@ class GeneratorBase:
os.rename(new_hdrfile, hdrfile)
def write_file_if_changed(self, fname, new_contents):
- """Rewrite the file if new_contents are different than its current content.
+ """Rewrite the file if NEW_CONTENTS are different than its current content.
If you have your windows projects open and generate the projects
it's not a small thing for windows to re-read all projects so
only update those that have changed.
+
+ Under Python >=3, NEW_CONTENTS must be a 'str', not a 'bytes'.
"""
+ if sys.version_info[0] >= 3:
+ new_contents = new_contents.encode()
try:
old_contents = open(fname, 'rb').read()
Modified: subversion/branches/svn-info-detail/build/getversion.py
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/build/getversion.py?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/build/getversion.py (original)
+++ subversion/branches/svn-info-detail/build/getversion.py Tue Feb 24 15:23:33
2015
@@ -26,6 +26,7 @@
import os
import re
import sys
+import traceback
__all__ = ['Parser', 'Result']
@@ -64,8 +65,10 @@ def svn_extractor(parser, include_file):
try:
r = p.parse(include_file)
- except IOError, e:
- usage_and_exit(str(e))
+ except IOError:
+ typ, val, tb = sys.exc_info()
+ msg = ''.join(traceback.format_exception_only(typ, val))
+ usage_and_exit(msg)
sys.stdout.write("%d.%d.%d" % (r.major, r.minor, r.patch))
@@ -75,8 +78,10 @@ def sqlite_extractor(parser, include_fil
try:
r = p.parse(include_file)
- except IOError, e:
- usage_and_exit(str(e))
+ except IOError:
+ typ, val, tb = sys.exc_info()
+ msg = ''.join(traceback.format_exception_only(typ, val))
+ usage_and_exit(msg)
major = r.version / 1000000
minor = (r.version - (major * 1000000)) / 1000
micro = (r.version - (major * 1000000) - (minor * 1000))
Modified: subversion/branches/svn-info-detail/build/run_tests.py
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/build/run_tests.py?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/build/run_tests.py (original)
+++ subversion/branches/svn-info-detail/build/run_tests.py Tue Feb 24 15:23:33
2015
@@ -45,7 +45,7 @@ separated list of test numbers; the defa
'''
# A few useful constants
-SVN_VER_MINOR = 9
+SVN_VER_MINOR = 10
import os, re, subprocess, sys, imp, threading, traceback, exceptions
from datetime import datetime
Modified: subversion/branches/svn-info-detail/build/transform_sql.py
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/build/transform_sql.py?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/build/transform_sql.py (original)
+++ subversion/branches/svn-info-detail/build/transform_sql.py Tue Feb 24
15:23:33 2015
@@ -140,7 +140,7 @@ class Processor(object):
# '/'+1 == '0'
line = re.sub(
- r'IS_STRICT_DESCENDANT_OF[(]([A-Za-z_.]+), ([?][0-9]+)[)]',
+ r'IS_STRICT_DESCENDANT_OF[(]([?]?[A-Za-z0-9_.]+),
([?]?[A-Za-z0-9_.]+)[)]',
r"(((\1) > (CASE (\2) WHEN '' THEN '' ELSE (\2) || '/' END))" +
r" AND ((\1) < CASE (\2) WHEN '' THEN X'FFFF' ELSE (\2) || '0'
END))",
line)
@@ -194,14 +194,14 @@ class Processor(object):
line)
# Another preprocessing.
- for symbol, string in self.token_map.iteritems():
+ for symbol, string in self.token_map.items():
# ### This doesn't sql-escape 'string'
line = re.sub(r'\b%s\b' % re.escape(symbol), "'%s'" % string, line)
if line.strip():
handled = False
- for regex, handler in self._directives.iteritems():
+ for regex, handler in self._directives.items():
match = regex.match(line)
if match:
handler(match)
Modified: subversion/branches/svn-info-detail/gen-make.py
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/gen-make.py?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/gen-make.py (original)
+++ subversion/branches/svn-info-detail/gen-make.py Tue Feb 24 15:23:33 2015
@@ -25,7 +25,9 @@
import os
+import traceback
import sys
+
import getopt
try:
my_getopt = getopt.gnu_getopt
@@ -266,8 +268,10 @@ if __name__ == '__main__':
])
if len(args) > 1:
_usage_exit("Too many arguments")
- except getopt.GetoptError, e:
- _usage_exit(str(e))
+ except getopt.GetoptError:
+ typ, val, tb = sys.exc_info()
+ msg = ''.join(traceback.format_exception_only(typ, val))
+ _usage_exit(msg)
conf = 'build.conf'
skip = 0
Modified:
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.cpp
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.cpp?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
---
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.cpp
(original)
+++
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.cpp
Tue Feb 24 15:23:33 2015
@@ -519,6 +519,7 @@ apr_hash_t *get_externals_to_pin(jobject
void SVNClient::copy(CopySources ©Sources, const char *destPath,
CommitMessage *message, bool copyAsChild,
bool makeParents, bool ignoreExternals,
+ bool metadataOnly,
bool pinExternals, jobject jexternalsToPin,
PropertyTable &revprops, CommitCallback *callback)
{
@@ -538,6 +539,7 @@ void SVNClient::copy(CopySources ©So
if (!JNIUtil::isJavaExceptionThrown())
SVN_JNI_ERR(svn_client_copy7(srcs, destinationPath.c_str(),
copyAsChild, makeParents, ignoreExternals,
+ metadataOnly,
pinExternals, pin_set,
revprops.hash(subPool),
CommitCallback::callback, callback,
Modified:
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
---
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.h
(original)
+++
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/SVNClient.h
Tue Feb 24 15:23:33 2015
@@ -149,7 +149,7 @@ class SVNClient :public SVNBase
PropertyTable &revprops, CommitCallback *callback);
void copy(CopySources ©Sources, const char *destPath,
CommitMessage *message, bool copyAsChild, bool makeParents,
- bool ignoreExternals, bool pinExternals,
+ bool ignoreExternals, bool metaDataOnly, bool pinExternals,
jobject jexternalsToPin,
PropertyTable &revprops, CommitCallback *callback);
void commit(Targets &targets, CommitMessage *message, svn_depth_t depth,
Modified:
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
---
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
(original)
+++
subversion/branches/svn-info-detail/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
Tue Feb 24 15:23:33 2015
@@ -559,7 +559,7 @@ JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_copy
(JNIEnv *env, jobject jthis, jobject jcopySources, jstring jdestPath,
jboolean jcopyAsChild, jboolean jmakeParents, jboolean jignoreExternals,
- jboolean jpinExternals, jobject jexternalsToPin,
+ jboolean jmetadataOnly, jboolean jpinExternals, jobject jexternalsToPin,
jobject jrevpropTable, jobject jmessage, jobject jcallback)
{
JNIEntry(SVNClient, copy);
@@ -593,7 +593,8 @@ Java_org_apache_subversion_javahl_SVNCli
CommitCallback callback(jcallback);
cl->copy(copySources, destPath, &message,
bool(jcopyAsChild), bool(jmakeParents),
- bool(jignoreExternals), bool(jpinExternals), jexternalsToPin,
+ bool(jignoreExternals), bool(jmetadataOnly),
+ bool(jpinExternals), jexternalsToPin,
revprops, jcallback ? &callback : NULL);
}
Modified:
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
---
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
(original)
+++
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
Tue Feb 24 15:23:33 2015
@@ -376,6 +376,7 @@ public interface ISVNClient
* @param makeParents Whether to create intermediate parents
* @param ignoreExternals Whether or not to process external definitions
* as part of this operation.
+ * @param metadataOnly Copy just the metadata and not the working
files/dirs
* @param pinExternals Whether or not to pin external definitions as part
* of this operation.
* @param externalsToPin The set of externals to pin.
@@ -401,7 +402,8 @@ public interface ISVNClient
*/
void copy(List<CopySource> sources, String destPath,
boolean copyAsChild, boolean makeParents,
- boolean ignoreExternals, boolean pinExternals,
+ boolean ignoreExternals, boolean metadataOnly,
+ boolean pinExternals,
Map<String, List<ExternalItem>> externalsToPin,
Map<String, String> revpropTable,
CommitMessageCallback handler, CommitCallback callback)
@@ -411,8 +413,9 @@ public interface ISVNClient
* Copy versioned paths with the history preserved.
* <p>
* Behaves like the 1.9 version with
- * <code>pinExternals<code> set to <code>false</code> and
- * <code>externalsToPin<code> set to <code>null</code>.
+ * <code>pinExternals</code> set to <code>false</code> and
+ * <code>externalsToPin</code> set to <code>null</code> and
+ * <code>metadataOnly</code> set to <code>false</code>.
*/
void copy(List<CopySource> sources, String destPath,
boolean copyAsChild, boolean makeParents,
Modified:
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
---
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
(original)
+++
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
Tue Feb 24 15:23:33 2015
@@ -142,10 +142,10 @@ public class NativeResources
private static final void init()
{
version = new Version();
- if (!version.isAtLeast(1, 9, 0))
+ if (!version.isAtLeast(1, 10, 0))
{
throw new LinkageError("Native library version must be at least " +
- "1.9.0, but is only " + version);
+ "1.10.0, but is only " + version);
}
runtimeVersion = new RuntimeVersion();
Modified:
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
---
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
(original)
+++
subversion/branches/svn-info-detail/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
Tue Feb 24 15:23:33 2015
@@ -240,7 +240,8 @@ public class SVNClient implements ISVNCl
public native void copy(List<CopySource> sources, String destPath,
boolean copyAsChild, boolean makeParents,
- boolean ignoreExternals, boolean pinExternals,
+ boolean ignoreExternals, boolean metadataOnly,
+ boolean pinExternals,
Map<String, List<ExternalItem>> externalsToPin,
Map<String, String> revpropTable,
CommitMessageCallback handler, CommitCallback
callback)
@@ -254,7 +255,7 @@ public class SVNClient implements ISVNCl
throws ClientException
{
copy(sources, destPath, copyAsChild, makeParents, ignoreExternals,
- false, null, revpropTable, handler, callback);
+ false, false, null, revpropTable, handler, callback);
}
public native void move(Set<String> srcPaths, String destPath,
Modified:
subversion/branches/svn-info-detail/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
---
subversion/branches/svn-info-detail/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
(original)
+++
subversion/branches/svn-info-detail/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
Tue Feb 24 15:23:33 2015
@@ -1060,7 +1060,7 @@ public class BasicTests extends SVNTests
}
client.copy(sources,
new File(thisTest.getWorkingCopy(), "A/B/F").getPath(),
- true, false, false, false, null, null, null, null);
+ true, false, false, false, false, null, null, null, null);
// Commit the changes, and check the state of the WC.
checkCommitRevision(thisTest,
@@ -1077,7 +1077,7 @@ public class BasicTests extends SVNTests
"A/B").getPath(), Revision.WORKING,
Revision.WORKING));
client.copy(wcSource, thisTest.getUrl() + "/parent/A/B",
- true, true, false, false, null, null,
+ true, true, false, false, false, null, null,
new ConstMsg("Copy WC to URL"), null);
// update the WC to get new folder and confirm the copy
@@ -1123,7 +1123,7 @@ public class BasicTests extends SVNTests
List<CopySource> sources = new ArrayList<CopySource>(1);
sources.add(new CopySource(thisTest.getWCPath() + "/A/B", null, null));
String target = thisTest.getWCPath() + "/A/Bcopy";
- client.copy(sources, target, true, false, false,
+ client.copy(sources, target, true, false, false, false,
true, // pinExternals
null, // externalsToPin
null, null, null);
@@ -1151,7 +1151,7 @@ public class BasicTests extends SVNTests
List<CopySource> sources = new ArrayList<CopySource>(1);
sources.add(new CopySource(thisTest.getWCPath() + "/A/B", null, null));
String target = thisTest.getUrl() + "/A/Bcopy";
- client.copy(sources, target, true, false, false,
+ client.copy(sources, target, true, false, false, false,
true, // pinExternals
null, // externalsToPin
null, new ConstMsg("Copy WC to REPO"), null);
@@ -1179,7 +1179,7 @@ public class BasicTests extends SVNTests
List<CopySource> sources = new ArrayList<CopySource>(1);
sources.add(new CopySource(thisTest.getUrl() + "/A/B", null, null));
String target = thisTest.getWCPath() + "/A/Bcopy";
- client.copy(sources, target, true, false, false,
+ client.copy(sources, target, true, false, false, false,
true, // pinExternals
null, // externalsToPin
null, null, null);
@@ -1207,7 +1207,7 @@ public class BasicTests extends SVNTests
List<CopySource> sources = new ArrayList<CopySource>(1);
sources.add(new CopySource(thisTest.getUrl() + "/A/B", null, null));
String target = thisTest.getUrl() + "/A/Bcopy";
- client.copy(sources, target, true, false, false,
+ client.copy(sources, target, true, false, false, false,
true, // pinExternals
null, // externalsToPin
null, new ConstMsg("Copy WC to REPO"), null);
@@ -1242,7 +1242,7 @@ public class BasicTests extends SVNTests
List<CopySource> sources = new ArrayList<CopySource>(1);
sources.add(new CopySource(sourceUrl, null, null));
String target = thisTest.getUrl() + "/A/Bcopy";
- client.copy(sources, target, true, false, false,
+ client.copy(sources, target, true, false, false, false,
true, // pinExternals
externalsToPin,
null, new ConstMsg("Copy WC to REPO"), null);
@@ -3175,7 +3175,7 @@ public class BasicTests extends SVNTests
srcs.add(new CopySource(thisTest.getUrl() + "/A", Revision.HEAD,
Revision.HEAD));
client.copy(srcs, thisTest.getUrl() + "/branches/A",
- true, false, false, false, null, null,
+ true, false, false, false, false, null, null,
new ConstMsg("create A branch"), null);
// update the WC (to r3) so that it has the branches folder
Modified: subversion/branches/svn-info-detail/subversion/bindings/swig/svn_wc.i
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/bindings/swig/svn_wc.i?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/bindings/swig/svn_wc.i
(original)
+++ subversion/branches/svn-info-detail/subversion/bindings/swig/svn_wc.i Tue
Feb 24 15:23:33 2015
@@ -43,6 +43,7 @@
/* ### ignore these structures because the accessors will need a pool */
%ignore svn_wc_keywords_t;
%ignore svn_wc_conflict_description2_t;
+%ignore svn_wc_conflict_result_t;
#ifdef SWIGRUBY
%ignore svn_wc_external_item_create;
Modified:
subversion/branches/svn-info-detail/subversion/include/private/svn_cache.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/include/private/svn_cache.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/include/private/svn_cache.h
(original)
+++ subversion/branches/svn-info-detail/subversion/include/private/svn_cache.h
Tue Feb 24 15:23:33 2015
@@ -542,6 +542,15 @@ svn_cache__get_global_membuffer_cache(vo
svn_cache__info_t *
svn_cache__membuffer_get_global_info(apr_pool_t *pool);
+/**
+ * Remove all current contents from CACHE.
+ *
+ * NOTE: In a multi-threaded environment, new contents may have been put
+ * into the cache by the time this function returns.
+ */
+svn_error_t *
+svn_cache__membuffer_clear(svn_membuffer_t *cache);
+
/** @} */
Modified:
subversion/branches/svn-info-detail/subversion/include/private/svn_sqlite.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/include/private/svn_sqlite.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/include/private/svn_sqlite.h
(original)
+++ subversion/branches/svn-info-detail/subversion/include/private/svn_sqlite.h
Tue Feb 24 15:23:33 2015
@@ -63,7 +63,7 @@ typedef enum svn_sqlite__mode_e {
typedef svn_error_t *(*svn_sqlite__func_t)(svn_sqlite__context_t *sctx,
int argc,
svn_sqlite__value_t *values[],
- apr_pool_t *scatch_pool);
+ void *baton);
/* Step the given statement; if it returns SQLITE_DONE, reset the statement.
Modified:
subversion/branches/svn-info-detail/subversion/include/private/svn_wc_private.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/include/private/svn_wc_private.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
---
subversion/branches/svn-info-detail/subversion/include/private/svn_wc_private.h
(original)
+++
subversion/branches/svn-info-detail/subversion/include/private/svn_wc_private.h
Tue Feb 24 15:23:33 2015
@@ -380,15 +380,13 @@ svn_wc__status2_from_3(svn_wc_status2_t
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
/**
* Set @a *children to a new array of the immediate children of the working
* node at @a dir_abspath. The elements of @a *children are (const char *)
* absolute paths.
*
- * Include children that are scheduled for deletion. Iff @a show_hidden
- * is true, also include children that are 'excluded' or 'server-excluded' or
- * 'not-present'.
+ * Include children that are scheduled for deletion, but not those that
+ * are excluded, server-excluded or not-present.
*
* Return every path that refers to a child of the working node at
* @a dir_abspath. Do not include a path just because it was a child of a
@@ -402,24 +400,20 @@ svn_error_t *
svn_wc__node_get_children_of_working_node(const apr_array_header_t **children,
svn_wc_context_t *wc_ctx,
const char *dir_abspath,
- svn_boolean_t show_hidden,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
/**
- * Like svn_wc__node_get_children_of_working_node(), except also include any
- * path that was a child of a deleted directory that existed at
- * @a dir_abspath, even if that directory is now scheduled to be replaced by
- * the working node at @a dir_abspath.
+ * Gets the immediate 'not-present' children of a node.
+ *
+ * #### Needed during 'svn cp WC URL' to handle mixed revision cases
*/
svn_error_t *
-svn_wc__node_get_children(const apr_array_header_t **children,
- svn_wc_context_t *wc_ctx,
- const char *dir_abspath,
- svn_boolean_t show_hidden,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
+svn_wc__node_get_not_present_children(const apr_array_header_t **children,
+ svn_wc_context_t *wc_ctx,
+ const char *dir_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/**
* Fetch the repository information for the working version
@@ -519,26 +513,6 @@ svn_wc__node_get_origin(svn_boolean_t *i
apr_pool_t *scratch_pool);
/**
- * Set @a *deleted_ancestor_abspath to the root of the delete operation
- * that deleted @a local_abspath. If @a local_abspath itself was deleted
- * and has no deleted ancestor, @a *deleted_ancestor_abspath will equal
- * @a local_abspath. If @a local_abspath was not deleted,
- * set @a *deleted_ancestor_abspath to @c NULL.
- *
- * A node is considered 'deleted' if it is deleted or moved-away, and is
- * not replaced.
- *
- * @a *deleted_ancestor_abspath is allocated in @a result_pool.
- * Use @a scratch_pool for all temporary allocations.
- */
-svn_error_t *
-svn_wc__node_get_deleted_ancestor(const char **deleted_ancestor_abspath,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-/**
* Set @a *not_present to TRUE when @a local_abspath has status
* svn_wc__db_status_not_present. Set @a *user_excluded to TRUE when
* @a local_abspath has status svn_wc__db_status_excluded. Set
@@ -943,15 +917,17 @@ svn_wc__get_excluded_subtrees(apr_hash_t
/* Indicate in @a *is_modified whether the working copy has local
* modifications, using context @a wc_ctx.
- * Use @a scratch_pool for temporary allocations.
*
- * This function provides a subset of the functionality of
- * svn_wc_revision_status2() and is more efficient if the caller
- * doesn't need all information returned by svn_wc_revision_status2(). */
+ * If IGNORE_UNVERSIONED, unversioned paths inside the tree rooted by
+ * LOCAL_ABSPATH are not seen as a change, otherwise they are.
+ * (svn:ignored paths are always ignored)
+ *
+ * Use @a scratch_pool for temporary allocations. */
svn_error_t *
svn_wc__has_local_mods(svn_boolean_t *is_modified,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
+ svn_boolean_t ignore_unversioned,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *scratch_pool);
Modified: subversion/branches/svn-info-detail/subversion/include/svn_client.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/include/svn_client.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/include/svn_client.h
(original)
+++ subversion/branches/svn-info-detail/subversion/include/svn_client.h Tue Feb
24 15:23:33 2015
@@ -4492,6 +4492,12 @@ typedef struct svn_client_copy_source_t
* If @a ignore_externals is set, don't process externals definitions
* as part of this operation.
*
+ * If @a metadata_only is @c TRUE and copying a file in a working copy,
+ * everything in the metadata is updated as if the node is moved, but the
+ * actual disk copy operation is not performed. This feature is useful for
+ * clients that want to keep the working copy in sync while the actual working
+ * copy is updated by some other task.
+ *
* If @a pin_externals is set, pin URLs in copied externals definitions
* to their current revision unless they were already pinned to a
* particular revision. A pinned external uses a URL which points at a
@@ -4547,6 +4553,7 @@ svn_client_copy7(const apr_array_header_
svn_boolean_t copy_as_child,
svn_boolean_t make_parents,
svn_boolean_t ignore_externals,
+ svn_boolean_t metadata_only,
svn_boolean_t pin_externals,
const apr_hash_t *externals_to_pin,
const apr_hash_t *revprop_table,
@@ -4556,11 +4563,14 @@ svn_client_copy7(const apr_array_header_
apr_pool_t *pool);
/**
- * Similar to svn_client_copy7(), but cannot pin externals.
+ * Similar to svn_client_copy7(), but doesn't support meta_data_only
+ * and cannot pin externals.
+ *
*
* @since New in 1.7.
* @deprecated Provided for backward compatibility with the 1.8 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_copy6(const apr_array_header_t *sources,
const char *dst_path,
Modified: subversion/branches/svn-info-detail/subversion/include/svn_repos.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/include/svn_repos.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/include/svn_repos.h
(original)
+++ subversion/branches/svn-info-detail/subversion/include/svn_repos.h Tue Feb
24 15:23:33 2015
@@ -1522,7 +1522,8 @@ svn_repos_replay(svn_fs_root_t *root,
* If @a commit_callback is non-NULL, then before @c close_edit returns (but
* after the commit has succeeded) @c close_edit will invoke
* @a commit_callback with a filled-in #svn_commit_info_t *, @a commit_baton,
- * and @a pool or some subpool thereof as arguments. If @a commit_callback
+ * and @a pool or some subpool thereof as arguments. The @c repos_root field
+ * of the #svn_commit_info_t is null. If @a commit_callback
* returns an error, that error will be returned from @c close_edit,
* otherwise if there was a post-commit hook failure, then that error
* will be returned with code SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED.
@@ -1534,7 +1535,7 @@ svn_repos_replay(svn_fs_root_t *root,
* NULL). Callers who supply their own transactions are responsible
* for cleaning them up (either by committing them, or aborting them).
*
- * @since New in 1.5.
+ * @since New in 1.5. Since 1.6, @a commit_callback can be null.
*
* @note Yes, @a repos_url_decoded is a <em>decoded</em> URL. We realize
* that's sorta wonky. Sorry about that.
Modified: subversion/branches/svn-info-detail/subversion/include/svn_version.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/include/svn_version.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/include/svn_version.h
(original)
+++ subversion/branches/svn-info-detail/subversion/include/svn_version.h Tue
Feb 24 15:23:33 2015
@@ -61,7 +61,7 @@ extern "C" {
* Modify when new functionality is added or new interfaces are
* defined, but all changes are backward compatible.
*/
-#define SVN_VER_MINOR 9
+#define SVN_VER_MINOR 10
/**
* Patch number.
Modified: subversion/branches/svn-info-detail/subversion/include/svn_wc.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/include/svn_wc.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/include/svn_wc.h (original)
+++ subversion/branches/svn-info-detail/subversion/include/svn_wc.h Tue Feb 24
15:23:33 2015
@@ -2185,6 +2185,14 @@ typedef struct svn_wc_conflict_result_t
NULL) in the user's working copy. */
svn_boolean_t save_merged;
+ /** If not NULL, this is the new merged property, used when choosing
+ * #svn_wc_conflict_choose_merged. This value is prefered over using
+ * merged_file.
+ *
+ * @since New in 1.9.
+ */
+ const svn_string_t *merged_value;
+
} svn_wc_conflict_result_t;
@@ -2194,7 +2202,8 @@ typedef struct svn_wc_conflict_result_t
*
* Set the @c choice field of the structure to @a choice, @c merged_file
* to @a merged_file, and @c save_merged to false. Make only a shallow
- * copy of the pointer argument @a merged_file.
+ * copy of the pointer argument @a merged_file. @a merged_file may be
+ * NULL if setting merged_file is not needed.
*
* @since New in 1.5.
*/
@@ -3826,6 +3835,13 @@ typedef struct svn_wc_status3_t
* @since New in 1.8. */
svn_boolean_t file_external;
+
+ /** The actual kind of the node in the working copy. May differ from kind
+ * on obstructions, deletes, etc. svn_node_unknown if unavailable.
+ *
+ * @since New in 1.9 */
+ svn_node_kind_t actual_kind;
+
/* NOTE! Please update svn_wc_dup_status3() when adding new fields here. */
} svn_wc_status3_t;
Modified: subversion/branches/svn-info-detail/subversion/libsvn_client/add.c
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/libsvn_client/add.c?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/libsvn_client/add.c
(original)
+++ subversion/branches/svn-info-detail/subversion/libsvn_client/add.c Tue Feb
24 15:23:33 2015
@@ -768,59 +768,6 @@ svn_client__get_all_auto_props(apr_hash_
return SVN_NO_ERROR;
}
-svn_error_t *svn_client__get_inherited_ignores(apr_array_header_t **ignores,
- const char *path_or_url,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- svn_opt_revision_t rev;
- apr_hash_t *explicit_ignores;
- apr_array_header_t *inherited_ignores;
- svn_boolean_t target_is_url = svn_path_is_url(path_or_url);
- svn_string_t *explicit_prop;
- int i;
-
- if (target_is_url)
- rev.kind = svn_opt_revision_head;
- else
- rev.kind = svn_opt_revision_working;
-
- SVN_ERR(svn_client_propget5(&explicit_ignores, &inherited_ignores,
- SVN_PROP_INHERITABLE_IGNORES, path_or_url,
- &rev, &rev, NULL, svn_depth_empty, NULL, ctx,
- scratch_pool, scratch_pool));
-
- explicit_prop = svn_hash_gets(explicit_ignores, path_or_url);
-
- if (explicit_prop)
- {
- svn_prop_inherited_item_t *new_iprop =
- apr_palloc(scratch_pool, sizeof(*new_iprop));
- new_iprop->path_or_url = path_or_url;
- new_iprop->prop_hash = apr_hash_make(scratch_pool);
- svn_hash_sets(new_iprop->prop_hash, SVN_PROP_INHERITABLE_IGNORES,
- explicit_prop);
- APR_ARRAY_PUSH(inherited_ignores,
- svn_prop_inherited_item_t *) = new_iprop;
- }
-
- *ignores = apr_array_make(result_pool, 16, sizeof(const char *));
-
- for (i = 0; i < inherited_ignores->nelts; i++)
- {
- svn_prop_inherited_item_t *elt = APR_ARRAY_IDX(
- inherited_ignores, i, svn_prop_inherited_item_t *);
- svn_string_t *ignore_val = svn_hash_gets(elt->prop_hash,
- SVN_PROP_INHERITABLE_IGNORES);
- if (ignore_val)
- svn_cstring_split_append(*ignores, ignore_val->data, "\n\r\t\v ",
- FALSE, result_pool);
- }
-
- return SVN_NO_ERROR;
-}
-
/* The main logic of the public svn_client_add5.
*
* EXISTING_PARENT_ABSPATH is the absolute path to the first existing
Modified: subversion/branches/svn-info-detail/subversion/libsvn_client/blame.c
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/libsvn_client/blame.c?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/libsvn_client/blame.c
(original)
+++ subversion/branches/svn-info-detail/subversion/libsvn_client/blame.c Tue
Feb 24 15:23:33 2015
@@ -34,6 +34,7 @@
#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "svn_props.h"
+#include "svn_hash.h"
#include "svn_sorts.h"
#include "private/svn_wc_private.h"
@@ -76,6 +77,7 @@ struct diff_baton {
/* The baton used for a file revision. Lives the entire operation */
struct file_rev_baton {
svn_revnum_t start_rev, end_rev;
+ svn_boolean_t backwards;
const char *target;
svn_client_ctx_t *ctx;
const svn_diff_file_options_t *diff_options;
@@ -96,6 +98,14 @@ struct file_rev_baton {
/* pools for files which may need to persist for more than one rev. */
apr_pool_t *filepool;
apr_pool_t *prevfilepool;
+
+ svn_boolean_t check_mime_type;
+
+ /* When blaming backwards we have to use the changes
+ on the *next* revision, as the interesting change
+ happens when we move to the previous revision */
+ svn_revnum_t last_revnum;
+ apr_hash_t *last_props;
};
/* The baton used by the txdelta window handler. Allocated per revision */
@@ -431,6 +441,26 @@ file_rev_handler(void *baton, const char
/* Clear the current pool. */
svn_pool_clear(frb->currpool);
+ if (frb->check_mime_type)
+ {
+ apr_hash_t *props = svn_prop_array_to_hash(prop_diffs, frb->currpool);
+ const char *value;
+
+ frb->check_mime_type = FALSE; /* Only check first */
+
+ value = svn_prop_get_value(props, SVN_PROP_MIME_TYPE);
+
+ if (value && svn_mime_type_is_binary(value))
+ {
+ return svn_error_createf(
+ SVN_ERR_CLIENT_IS_BINARY_FILE, NULL,
+ _("Cannot calculate blame information for binary file '%s'"),
+ (svn_path_is_url(frb->target)
+ ? frb->target
+ : svn_dirent_local_style(frb->target, pool)));
+ }
+ }
+
if (frb->ctx->notify_func2)
{
svn_wc_notify_t *notify
@@ -489,18 +519,24 @@ file_rev_handler(void *baton, const char
/* Create the rev structure. */
delta_baton->rev = apr_pcalloc(frb->mainpool, sizeof(struct rev));
- if (revnum < MIN(frb->start_rev, frb->end_rev))
+ if (frb->backwards)
{
- /* We shouldn't get more than one revision before the starting
- revision (unless of including merged revisions). */
- SVN_ERR_ASSERT((frb->last_filename == NULL)
- || frb->include_merged_revisions);
+ /* Use from last round...
+ SVN_INVALID_REVNUM on first, which is exactly
+ what we want */
+ delta_baton->rev->revision = frb->last_revnum;
+ delta_baton->rev->rev_props = frb->last_props;
- /* The file existed before start_rev; generate no blame info for
- lines from this revision (or before). */
- delta_baton->rev->revision = SVN_INVALID_REVNUM;
+ /* Store for next delta */
+ if (revnum >= MIN(frb->start_rev, frb->end_rev))
+ {
+ frb->last_revnum = revnum;
+ frb->last_props = svn_prop_hash_dup(rev_props, frb->mainpool);
+ }
+ /* Else: Not needed on last rev */
}
- else
+ else if (merged_revision
+ || (revnum >= MIN(frb->start_rev, frb->end_rev)))
{
/* 1+ for the "youngest to oldest" blame */
SVN_ERR_ASSERT(revnum <= 1 + MAX(frb->end_rev, frb->start_rev));
@@ -509,6 +545,20 @@ file_rev_handler(void *baton, const char
delta_baton->rev->revision = revnum;
delta_baton->rev->rev_props = svn_prop_hash_dup(rev_props,
frb->mainpool);
}
+ else
+ {
+ /* We shouldn't get more than one revision outside the
+ specified range (unless we alsoe receive merged revisions) */
+ SVN_ERR_ASSERT((frb->last_filename == NULL)
+ || frb->include_merged_revisions);
+
+ /* The file existed before start_rev; generate no blame info for
+ lines from this revision (or before).
+
+ This revision specifies the state as it was at the start revision */
+
+ delta_baton->rev->revision = SVN_INVALID_REVNUM;
+ }
if (frb->include_merged_revisions)
delta_baton->rev->path = apr_pstrdup(frb->mainpool, path);
@@ -626,7 +676,6 @@ svn_client_blame5(const char *target,
svn_stream_t *last_stream;
svn_stream_t *stream;
const char *target_abspath_or_url;
- svn_revnum_t youngest;
if (start->kind == svn_opt_revision_unspecified
|| end->kind == svn_opt_revision_unspecified)
@@ -669,28 +718,47 @@ svn_client_blame5(const char *target,
/* We check the mime-type of the yougest revision before getting all
the older revisions. */
- if (!ignore_mime_type)
+ if (!ignore_mime_type
+ && start_revnum < end_revnum)
{
apr_hash_t *props;
- apr_hash_index_t *hi;
+ const char *mime_type = NULL;
+
+ if (svn_path_is_url(target)
+ || start_revnum > end_revnum
+ || (end->kind != svn_opt_revision_working
+ && end->kind != svn_opt_revision_base))
+ {
+ SVN_ERR(svn_ra_get_file(ra_session, "", end_revnum, NULL, NULL,
+ &props, pool));
- SVN_ERR(svn_client_propget5(&props, NULL, SVN_PROP_MIME_TYPE,
- target_abspath_or_url, peg_revision,
- end, NULL, svn_depth_empty, NULL, ctx,
- pool, pool));
-
- /* props could be keyed on URLs or paths depending on the
- peg_revision and end values so avoid using the key. */
- hi = apr_hash_first(pool, props);
- if (hi)
+ mime_type = svn_prop_get_value(props, SVN_PROP_MIME_TYPE);
+ }
+ else
{
- svn_string_t *value;
+ const svn_string_t *value;
+
+ if (end->kind == svn_opt_revision_working)
+ SVN_ERR(svn_wc_prop_get2(&value, ctx->wc_ctx,
+ target_abspath_or_url,
+ SVN_PROP_MIME_TYPE,
+ pool, pool));
+ else
+ {
+ SVN_ERR(svn_wc_get_pristine_props(&props, ctx->wc_ctx,
+ target_abspath_or_url,
+ pool, pool));
+
+ value = props ? svn_hash_gets(props, SVN_PROP_MIME_TYPE)
+ : NULL;
+ }
- /* Should only be one value */
- SVN_ERR_ASSERT(apr_hash_count(props) == 1);
+ mime_type = value ? value->data : NULL;
+ }
- value = apr_hash_this_val(hi);
- if (value && svn_mime_type_is_binary(value->data))
+ if (mime_type)
+ {
+ if (svn_mime_type_is_binary(mime_type))
return svn_error_createf
(SVN_ERR_CLIENT_IS_BINARY_FILE, 0,
_("Cannot calculate blame information for binary file '%s'"),
@@ -719,6 +787,10 @@ svn_client_blame5(const char *target,
frb.merged_chain->avail = NULL;
frb.merged_chain->pool = pool;
}
+ frb.backwards = (frb.start_rev > frb.end_rev);
+ frb.last_revnum = SVN_INVALID_REVNUM;
+ frb.last_props = NULL;
+ frb.check_mime_type = (frb.backwards && !ignore_mime_type);
SVN_ERR(svn_ra_get_repos_root2(ra_session, &frb.repos_root_url, pool));
@@ -738,12 +810,11 @@ svn_client_blame5(const char *target,
We need to ensure that we get one revision before the start_rev,
if available so that we can know what was actually changed in the start
revision. */
- SVN_ERR(svn_ra_get_latest_revnum(ra_session, &youngest, frb.currpool));
SVN_ERR(svn_ra_get_file_revs2(ra_session, "",
- start_revnum
- - (0 < start_revnum && start_revnum <=
end_revnum ? 1 : 0)
- + (youngest > start_revnum && start_revnum >
end_revnum ? 1 : 0),
- end_revnum, include_merged_revisions,
+ frb.backwards ? start_revnum
+ : MAX(0, start_revnum-1),
+ end_revnum,
+ include_merged_revisions,
file_rev_handler, &frb, pool));
if (end->kind == svn_opt_revision_working)
Modified: subversion/branches/svn-info-detail/subversion/libsvn_client/client.h
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/libsvn_client/client.h?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/libsvn_client/client.h
(original)
+++ subversion/branches/svn-info-detail/subversion/libsvn_client/client.h Tue
Feb 24 15:23:33 2015
@@ -455,17 +455,6 @@ svn_error_t *svn_client__get_all_auto_pr
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Get a list of ignore patterns defined by the svn:global-ignores
- properties set on, or inherited by, PATH_OR_URL. Store the collected
- patterns as const char * elements in the array *IGNORES. Allocate
- *IGNORES and its contents in RESULT_POOL. Use SCRATCH_POOL for
- temporary allocations. */
-svn_error_t *svn_client__get_inherited_ignores(apr_array_header_t **ignores,
- const char *path_or_url,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
/* The main logic for client deletion from a working copy. Deletes PATH
from CTX->WC_CTX. If PATH (or any item below a directory PATH) is
modified the delete will fail and return an error unless FORCE or KEEP_LOCAL
@@ -959,11 +948,6 @@ svn_client__get_copy_committables(svn_cl
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* A qsort()-compatible sort routine for sorting an array of
- svn_client_commit_item_t *'s by their URL member. */
-int svn_client__sort_commit_item_urls(const void *a, const void *b);
-
-
/* Rewrite the COMMIT_ITEMS array to be sorted by URL. Also, discover
a common *BASE_URL for the items in the array, and rewrite those
items' URLs to be relative to that *BASE_URL.
Modified: subversion/branches/svn-info-detail/subversion/libsvn_client/commit.c
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/libsvn_client/commit.c?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/libsvn_client/commit.c
(original)
+++ subversion/branches/svn-info-detail/subversion/libsvn_client/commit.c Tue
Feb 24 15:23:33 2015
@@ -240,7 +240,9 @@ post_process_commit_item(svn_wc_committe
loop_recurse = TRUE;
remove_lock = (! keep_locks && (item->state_flags
- & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN));
+ & (SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN
+ | SVN_CLIENT_COMMIT_ITEM_ADD
+ | SVN_CLIENT_COMMIT_ITEM_DELETE)));
/* When the node was deleted (or replaced), we need to always remove the
locks, as they're invalidated on the server. We cannot honor the
@@ -537,6 +539,7 @@ svn_client_commit6(const apr_array_heade
const char *current_abspath;
const char *notify_prefix;
int depth_empty_after = -1;
+ apr_hash_t *move_youngest = NULL;
int i;
SVN_ERR_ASSERT(depth != svn_depth_unknown && depth != svn_depth_exclude);
@@ -707,62 +710,12 @@ svn_client_commit6(const apr_array_heade
if (cmt_err)
goto cleanup;
- if (moved_from_abspath && delete_op_root_abspath &&
- strcmp(moved_from_abspath, delete_op_root_abspath) == 0)
-
+ if (moved_from_abspath && delete_op_root_abspath)
{
- svn_boolean_t found_delete_half =
- (svn_hash_gets(committables->by_path, delete_op_root_abspath)
- != NULL);
+ svn_client_commit_item3_t *delete_half =
+ svn_hash_gets(committables->by_path, delete_op_root_abspath);
- if (!found_delete_half)
- {
- const char *delete_half_parent_abspath;
-
- /* The delete-half isn't in the commit target list.
- * However, it might itself be the child of a deleted node,
- * either because of another move or a deletion.
- *
- * For example, consider: mv A/B B; mv B/C C; commit;
- * C's moved-from A/B/C is a child of the deleted A/B.
- * A/B/C does not appear in the commit target list, but
- * A/B does appear.
- * (Note that moved-from information is always stored
- * relative to the BASE tree, so we have 'C moved-from
- * A/B/C', not 'C moved-from B/C'.)
- *
- * An example involving a move and a delete would be:
- * mv A/B C; rm A; commit;
- * Now C is moved-from A/B which does not appear in the
- * commit target list, but A does appear.
- */
-
- /* Scan upwards for a deletion op-root from the
- * delete-half's parent directory. */
- delete_half_parent_abspath =
- svn_dirent_dirname(delete_op_root_abspath, iterpool);
- if (strcmp(delete_op_root_abspath,
- delete_half_parent_abspath) != 0)
- {
- const char *parent_delete_op_root_abspath;
-
- cmt_err = svn_error_trace(
- svn_wc__node_get_deleted_ancestor(
- &parent_delete_op_root_abspath,
- ctx->wc_ctx, delete_half_parent_abspath,
- iterpool, iterpool));
- if (cmt_err)
- goto cleanup;
-
- if (parent_delete_op_root_abspath)
- found_delete_half =
- (svn_hash_gets(committables->by_path,
- parent_delete_op_root_abspath)
- != NULL);
- }
- }
-
- if (!found_delete_half)
+ if (!delete_half)
{
cmt_err = svn_error_createf(
SVN_ERR_ILLEGAL_TARGET, NULL,
@@ -787,6 +740,17 @@ svn_client_commit6(const apr_array_heade
goto cleanup;
}
+ else if (delete_half->revision == item->copyfrom_rev)
+ {
+ /* Ok, now we know that we perform an out-of-date check
+ on the copyfrom location. Remember this for a fixup
+ round right before committing. */
+
+ if (!move_youngest)
+ move_youngest = apr_hash_make(pool);
+
+ svn_hash_sets(move_youngest, item->path, item);
+ }
}
}
@@ -885,6 +849,37 @@ svn_client_commit6(const apr_array_heade
if (cmt_err)
goto cleanup;
+ if (move_youngest != NULL)
+ {
+ apr_hash_index_t *hi;
+ svn_revnum_t youngest;
+
+ SVN_ERR(svn_ra_get_latest_revnum(ra_session, &youngest, pool));
+
+ for (hi = apr_hash_first(iterpool, move_youngest);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ svn_client_commit_item3_t *item = apr_hash_this_val(hi);
+
+ /* We delete the original side with its original revision and will
+ receive an out-of-date error if that node changed since that
+ revision.
+
+ The copy is of that same revision and we know that this revision
+ didn't change between this revision and youngest. So we can just
+ as well commit a copy from youngest.
+
+ Note that it is still possible to see gaps between the delete and
+ copy revisions as the repository might handle multiple commits
+ at the same time (or when an out of date proxy is involved), but
+ in general it should decrease the number of gaps. */
+
+ if (item->copyfrom_rev < youngest)
+ item->copyfrom_rev = youngest;
+ }
+ }
+
cmt_err = svn_error_trace(
get_ra_editor(&editor, &edit_baton, ra_session, ctx,
log_msg, commit_items, revprop_table,
Modified:
subversion/branches/svn-info-detail/subversion/libsvn_client/commit_util.c
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/libsvn_client/commit_util.c?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/libsvn_client/commit_util.c
(original)
+++ subversion/branches/svn-info-detail/subversion/libsvn_client/commit_util.c
Tue Feb 24 15:23:33 2015
@@ -467,10 +467,12 @@ harvest_not_present_for_copy(svn_wc_cont
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
int i;
+ SVN_ERR_ASSERT(commit_relpath != NULL);
+
/* A function to retrieve not present children would be nice to have */
- SVN_ERR(svn_wc__node_get_children_of_working_node(
- &children, wc_ctx, local_abspath, TRUE,
- scratch_pool, iterpool));
+ SVN_ERR(svn_wc__node_get_not_present_children(&children, wc_ctx,
+ local_abspath,
+ scratch_pool, iterpool));
for (i = 0; i < children->nelts; i++)
{
@@ -486,13 +488,10 @@ harvest_not_present_for_copy(svn_wc_cont
this_abspath, FALSE, scratch_pool));
if (!not_present)
- continue;
+ continue; /* Node is replaced */
- if (commit_relpath == NULL)
- this_commit_relpath = NULL;
- else
- this_commit_relpath = svn_relpath_join(commit_relpath, name,
- iterpool);
+ this_commit_relpath = svn_relpath_join(commit_relpath, name,
+ iterpool);
/* We should check if we should really add a delete operation */
if (check_url_func)
@@ -1380,7 +1379,10 @@ svn_client__get_copy_committables(svn_cl
}
-int svn_client__sort_commit_item_urls(const void *a, const void *b)
+/* A svn_sort__array()/qsort()-compatible sort routine for sorting
+ an array of svn_client_commit_item_t *'s by their URL member. */
+static int
+sort_commit_item_urls(const void *a, const void *b)
{
const svn_client_commit_item3_t *item1
= *((const svn_client_commit_item3_t * const *) a);
@@ -1404,7 +1406,7 @@ svn_client__condense_commit_items(const
SVN_ERR_ASSERT(ci && ci->nelts);
/* Sort our commit items by their URLs. */
- svn_sort__array(ci, svn_client__sort_commit_item_urls);
+ svn_sort__array(ci, sort_commit_item_urls);
/* Loop through the URLs, finding the longest usable ancestor common
to all of them, and making sure there are no duplicate URLs. */
Modified: subversion/branches/svn-info-detail/subversion/libsvn_client/copy.c
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/libsvn_client/copy.c?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/libsvn_client/copy.c
(original)
+++ subversion/branches/svn-info-detail/subversion/libsvn_client/copy.c Tue Feb
24 15:23:33 2015
@@ -177,6 +177,47 @@ get_copy_pair_ancestors(const apr_array_
return SVN_NO_ERROR;
}
+/* Quote a string if it would be handled as multiple or different tokens
+ during externals parsing */
+static const char *
+maybe_quote(const char *value,
+ apr_pool_t *result_pool)
+{
+ apr_status_t status;
+ char **argv;
+
+ status = apr_tokenize_to_argv(value, &argv, result_pool);
+
+ if (!status && argv[0] && !argv[1] && strcmp(argv[0], value) == 0)
+ return apr_pstrdup(result_pool, value);
+
+ {
+ svn_stringbuf_t *sb = svn_stringbuf_create_empty(result_pool);
+ const char *c;
+
+ svn_stringbuf_appendbyte(sb, '\"');
+
+ for (c = value; *c; c++)
+ {
+ if (*c == '\\' || *c == '\"' || *c == '\'')
+ svn_stringbuf_appendbyte(sb, '\\');
+
+ svn_stringbuf_appendbyte(sb, *c);
+ }
+
+ svn_stringbuf_appendbyte(sb, '\"');
+
+#ifdef SVN_DEBUG
+ status = apr_tokenize_to_argv(sb->data, &argv, result_pool);
+
+ SVN_ERR_ASSERT_NO_RETURN(!status && argv[0] && !argv[1]
+ && !strcmp(argv[0], value));
+#endif
+
+ return sb->data;
+ }
+}
+
/* In *NEW_EXTERNALS_DESCRIPTION, return a new external description for
* use as a line in an svn:externals property, based on the external item
* ITEM and the additional parser information in INFO. Pin the external
@@ -211,7 +252,9 @@ make_external_description(const char **n
}
*new_external_description =
- apr_psprintf(pool, "%s %s%s\n", item->target_dir, rev_str,
item->url);
+ apr_psprintf(pool, "%s %s%s\n", maybe_quote(item->target_dir, pool),
+ rev_str,
+ maybe_quote(item->url, pool));
break;
case svn_wc__external_description_format_2:
@@ -239,8 +282,11 @@ make_external_description(const char **n
}
*new_external_description =
- apr_psprintf(pool, "%s%s%s %s\n", rev_str, item->url, peg_rev_str,
- item->target_dir);
+ apr_psprintf(pool, "%s%s %s\n", rev_str,
+ maybe_quote(apr_psprintf(pool, "%s%s", item->url,
+ peg_rev_str),
+ pool),
+ maybe_quote(item->target_dir, pool));
break;
default:
@@ -431,7 +477,7 @@ pin_externals_prop(svn_string_t **pinned
SVN_PROP_EXTERNALS);
SVN_ERR(svn_wc__has_local_mods(&is_modified, ctx->wc_ctx,
- external_abspath,
+ external_abspath, TRUE,
ctx->cancel_func,
ctx->cancel_baton,
iterpool));
@@ -609,6 +655,7 @@ static svn_error_t *
do_wc_to_wc_copies_with_write_lock(svn_boolean_t *timestamp_sleep,
const apr_array_header_t *copy_pairs,
const char *dst_parent,
+ svn_boolean_t metadata_only,
svn_boolean_t pin_externals,
const apr_hash_t *externals_to_pin,
svn_client_ctx_t *ctx,
@@ -650,7 +697,7 @@ do_wc_to_wc_copies_with_write_lock(svn_b
iterpool);
*timestamp_sleep = TRUE;
err = svn_wc_copy3(ctx->wc_ctx, pair->src_abspath_or_url, dst_abspath,
- FALSE /* metadata_only */,
+ metadata_only,
ctx->cancel_func, ctx->cancel_baton,
ctx->notify_func2, ctx->notify_baton2, iterpool);
if (err)
@@ -692,6 +739,7 @@ do_wc_to_wc_copies_with_write_lock(svn_b
static svn_error_t *
do_wc_to_wc_copies(svn_boolean_t *timestamp_sleep,
const apr_array_header_t *copy_pairs,
+ svn_boolean_t metadata_only,
svn_boolean_t pin_externals,
const apr_hash_t *externals_to_pin,
svn_client_ctx_t *ctx,
@@ -707,8 +755,8 @@ do_wc_to_wc_copies(svn_boolean_t *timest
SVN_WC__CALL_WITH_WRITE_LOCK(
do_wc_to_wc_copies_with_write_lock(timestamp_sleep, copy_pairs, dst_parent,
- pin_externals, externals_to_pin,
- ctx, pool),
+ metadata_only, pin_externals,
+ externals_to_pin, ctx, pool),
ctx->wc_ctx, dst_parent_abspath, FALSE, pool);
return SVN_NO_ERROR;
@@ -1328,9 +1376,7 @@ queue_externals_change_path_infos(apr_ar
info->src_url = svn_path_url_add_component2(
parent_info->src_url, dst_relpath,
result_pool);
- info->src_path = svn_relpath_join(parent_info->src_path,
- dst_relpath,
- result_pool);
+ info->src_path = NULL; /* Only needed on copied dirs */
info->dst_path = svn_relpath_join(parent_info->dst_path,
dst_relpath,
result_pool);
@@ -1631,7 +1677,7 @@ repos_to_repos_copy(const apr_array_head
}
/* More info for our INFO structure. */
- info->src_path = src_rel;
+ info->src_path = src_rel; /* May be NULL, if outside RA session scope */
info->dst_path = dst_rel;
svn_hash_sets(action_hash, info->dst_path, info);
@@ -3009,9 +3055,10 @@ try_copy(svn_boolean_t *timestamp_sleep,
else
{
/* We ignore these values, so assert the default value */
- SVN_ERR_ASSERT(allow_mixed_revisions && !metadata_only);
+ SVN_ERR_ASSERT(allow_mixed_revisions);
return svn_error_trace(do_wc_to_wc_copies(timestamp_sleep,
copy_pairs,
+ metadata_only,
pin_externals,
externals_to_pin,
ctx, pool));
@@ -3049,6 +3096,7 @@ svn_client_copy7(const apr_array_header_
svn_boolean_t copy_as_child,
svn_boolean_t make_parents,
svn_boolean_t ignore_externals,
+ svn_boolean_t metadata_only,
svn_boolean_t pin_externals,
const apr_hash_t *externals_to_pin,
const apr_hash_t *revprop_table,
@@ -3069,7 +3117,7 @@ svn_client_copy7(const apr_array_header_
sources, dst_path,
FALSE /* is_move */,
TRUE /* allow_mixed_revisions */,
- FALSE /* metadata_only */,
+ metadata_only,
make_parents,
ignore_externals,
pin_externals,
@@ -3105,7 +3153,7 @@ svn_client_copy7(const apr_array_header_
sources, dst_path,
FALSE /* is_move */,
TRUE /* allow_mixed_revisions */,
- FALSE /* metadata_only */,
+ metadata_only,
make_parents,
ignore_externals,
pin_externals,
Modified:
subversion/branches/svn-info-detail/subversion/libsvn_client/deprecated.c
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/libsvn_client/deprecated.c?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/libsvn_client/deprecated.c
(original)
+++ subversion/branches/svn-info-detail/subversion/libsvn_client/deprecated.c
Tue Feb 24 15:23:33 2015
@@ -640,7 +640,10 @@ svn_client_copy6(const apr_array_header_
{
return svn_error_trace(svn_client_copy7(sources, dst_path, copy_as_child,
make_parents, ignore_externals,
- FALSE, NULL, revprop_table,
+ FALSE /* metadata_only */,
+ FALSE /* pin_externals */,
+ NULL /* externals_to_pin */,
+ revprop_table,
commit_callback, commit_baton,
ctx, pool));
}
Modified:
subversion/branches/svn-info-detail/subversion/libsvn_client/externals.c
URL:
http://svn.apache.org/viewvc/subversion/branches/svn-info-detail/subversion/libsvn_client/externals.c?rev=1661981&r1=1661980&r2=1661981&view=diff
==============================================================================
--- subversion/branches/svn-info-detail/subversion/libsvn_client/externals.c
(original)
+++ subversion/branches/svn-info-detail/subversion/libsvn_client/externals.c
Tue Feb 24 15:23:33 2015
@@ -242,6 +242,20 @@ switch_dir_external(const char *local_ab
FALSE, FALSE, FALSE, TRUE,
FALSE, TRUE,
ra_session, ctx, subpool));
+
+ /* We just decided that this existing directory is an external,
+ so update the external registry with this information, like
+ when checking out an external */
+ SVN_ERR(svn_wc__external_register(ctx->wc_ctx,
+ defining_abspath,
+ local_abspath, svn_node_dir,
+ repos_root_url, repos_uuid,
+ svn_uri_skip_ancestor(repos_root_url,
+ url, pool),
+ external_peg_rev,
+ external_rev,
+ pool));
+
svn_pool_destroy(subpool);
goto cleanup;
}