You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2011/07/28 23:59:01 UTC

svn commit: r1152016 [1/5] - in /subversion/branches/revprop-packing: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ notes/ subversion/bindings/swig/ subversion/bindings/swig/perl/native/t/ subversion/include/ subversion/include/priv...

Author: danielsh
Date: Thu Jul 28 21:58:49 2011
New Revision: 1152016

URL: http://svn.apache.org/viewvc?rev=1152016&view=rev
Log:
On the revprop-packing branch, sync from trunk.

Added:
    subversion/branches/revprop-packing/subversion/libsvn_subr/gpg_agent.c
      - copied unchanged from r1151666, subversion/trunk/subversion/libsvn_subr/gpg_agent.c
    subversion/branches/revprop-packing/tools/client-side/detach.py
      - copied unchanged from r1151666, subversion/trunk/tools/client-side/detach.py
    subversion/branches/revprop-packing/tools/dist/gnupg.py
      - copied unchanged from r1151666, subversion/trunk/tools/dist/gnupg.py
Removed:
    subversion/branches/revprop-packing/tools/dist/getsigs.py
Modified:
    subversion/branches/revprop-packing/   (props changed)
    subversion/branches/revprop-packing/CHANGES
    subversion/branches/revprop-packing/INSTALL
    subversion/branches/revprop-packing/Makefile.in
    subversion/branches/revprop-packing/build.conf
    subversion/branches/revprop-packing/build/ac-macros/apache.m4
    subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4
    subversion/branches/revprop-packing/build/generator/extractor.py
    subversion/branches/revprop-packing/build/generator/gen_win.py
    subversion/branches/revprop-packing/build/generator/swig/__init__.py
    subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py
    subversion/branches/revprop-packing/build/run_tests.py
    subversion/branches/revprop-packing/configure.ac
    subversion/branches/revprop-packing/notes/knobs
    subversion/branches/revprop-packing/notes/moves
    subversion/branches/revprop-packing/subversion/bindings/swig/core.i
    subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t
    subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h
    subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h
    subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h   (contents, props changed)
    subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h
    subversion/branches/revprop-packing/subversion/include/svn_auth.h
    subversion/branches/revprop-packing/subversion/include/svn_config.h
    subversion/branches/revprop-packing/subversion/include/svn_error.h
    subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h
    subversion/branches/revprop-packing/subversion/libsvn_client/blame.c
    subversion/branches/revprop-packing/subversion/libsvn_client/client.h
    subversion/branches/revprop-packing/subversion/libsvn_client/commit.c
    subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c
    subversion/branches/revprop-packing/subversion/libsvn_client/diff.c
    subversion/branches/revprop-packing/subversion/libsvn_client/externals.c
    subversion/branches/revprop-packing/subversion/libsvn_client/merge.c
    subversion/branches/revprop-packing/subversion/libsvn_client/mergeinfo.c
    subversion/branches/revprop-packing/subversion/libsvn_client/mergeinfo.h
    subversion/branches/revprop-packing/subversion/libsvn_client/repos_diff.c
    subversion/branches/revprop-packing/subversion/libsvn_fs/fs-loader.c
    subversion/branches/revprop-packing/subversion/libsvn_fs_fs/fs_fs.c
    subversion/branches/revprop-packing/subversion/libsvn_fs_fs/rep-cache.c
    subversion/branches/revprop-packing/subversion/libsvn_fs_fs/rep-cache.h
    subversion/branches/revprop-packing/subversion/libsvn_ra_local/ra_plugin.c
    subversion/branches/revprop-packing/subversion/libsvn_ra_neon/log.c
    subversion/branches/revprop-packing/subversion/libsvn_ra_serf/getlocationsegments.c
    subversion/branches/revprop-packing/subversion/libsvn_ra_serf/log.c
    subversion/branches/revprop-packing/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/revprop-packing/subversion/libsvn_ra_serf/replay.c
    subversion/branches/revprop-packing/subversion/libsvn_ra_serf/serf.c
    subversion/branches/revprop-packing/subversion/libsvn_ra_serf/update.c
    subversion/branches/revprop-packing/subversion/libsvn_ra_serf/util.c
    subversion/branches/revprop-packing/subversion/libsvn_repos/commit.c
    subversion/branches/revprop-packing/subversion/libsvn_repos/hooks.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/auth.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/cmdline.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/config_file.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/deprecated.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/dso.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/io.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/mergeinfo.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/simple_providers.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/subst.c
    subversion/branches/revprop-packing/subversion/libsvn_subr/svn_string.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/adm_crawler.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/adm_files.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/adm_ops.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/conflicts.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/copy.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/diff_editor.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/diff_local.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/entries.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/info.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/lock.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/node.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/props.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/status.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/update_editor.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/wc-queries.sql
    subversion/branches/revprop-packing/subversion/libsvn_wc/wc_db.c
    subversion/branches/revprop-packing/subversion/libsvn_wc/wc_db.h
    subversion/branches/revprop-packing/subversion/mod_authz_svn/mod_authz_svn.c
    subversion/branches/revprop-packing/subversion/mod_dav_svn/repos.c
    subversion/branches/revprop-packing/subversion/mod_dav_svn/util.c
    subversion/branches/revprop-packing/subversion/po/de.po
    subversion/branches/revprop-packing/subversion/po/zh_CN.po
    subversion/branches/revprop-packing/subversion/svn/main.c
    subversion/branches/revprop-packing/subversion/svn/notify.c
    subversion/branches/revprop-packing/subversion/svn/resolve-cmd.c
    subversion/branches/revprop-packing/subversion/svndumpfilter/main.c
    subversion/branches/revprop-packing/subversion/svnsync/main.c
    subversion/branches/revprop-packing/subversion/tests/cmdline/externals_tests.py
    subversion/branches/revprop-packing/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
    subversion/branches/revprop-packing/subversion/tests/cmdline/info_tests.py
    subversion/branches/revprop-packing/subversion/tests/cmdline/lock_tests.py
    subversion/branches/revprop-packing/subversion/tests/cmdline/log_tests.py
    subversion/branches/revprop-packing/subversion/tests/cmdline/special_tests.py
    subversion/branches/revprop-packing/subversion/tests/cmdline/svnadmin_tests.py
    subversion/branches/revprop-packing/subversion/tests/cmdline/svntest/actions.py
    subversion/branches/revprop-packing/subversion/tests/libsvn_client/client-test.c
    subversion/branches/revprop-packing/subversion/tests/libsvn_diff/parse-diff-test.c
    subversion/branches/revprop-packing/subversion/tests/libsvn_subr/auth-test.c
    subversion/branches/revprop-packing/subversion/tests/libsvn_wc/db-test.c
    subversion/branches/revprop-packing/subversion/tests/libsvn_wc/op-depth-test.c
    subversion/branches/revprop-packing/tools/dist/backport.pl
    subversion/branches/revprop-packing/tools/dist/collect_sigs.py
    subversion/branches/revprop-packing/tools/dist/release.py
    subversion/branches/revprop-packing/tools/dist/templates/rc-news.ezt
    subversion/branches/revprop-packing/tools/server-side/svnpredumpfilter.py

Propchange: subversion/branches/revprop-packing/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 28 21:58:49 2011
@@ -11,6 +11,7 @@
 /subversion/branches/fs-rep-sharing:869036-873803
 /subversion/branches/fsfs-pack:873717-874575
 /subversion/branches/gnome-keyring:870558-871410
+/subversion/branches/gpg-agent-password-store:1005036-1150766
 /subversion/branches/http-protocol-v2:874395-876041
 /subversion/branches/in-memory-cache:869829-871452
 /subversion/branches/integrate-cache-item-serialization:1068724-1068739
@@ -52,4 +53,4 @@
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
 /subversion/branches/uris-as-urls:1060426-1064427
-/subversion/trunk:1143817-1148765,1151667,1151672,1151680,1151916,1151948,1151954,1151957
+/subversion/trunk:1143817-1152007

Modified: subversion/branches/revprop-packing/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/CHANGES?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/CHANGES (original)
+++ subversion/branches/revprop-packing/CHANGES Thu Jul 28 21:58:49 2011
@@ -1,3 +1,12 @@
+Version 1.8.0
+(?? ??? 2011, from /branches/1.8.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.8.0
+
+ Developer-visible changes:
+  - API changes:
+    * fix inconsistent handling of log revs without changed paths (issue #3694)
+
+
 Version 1.7.0
 (?? ??? 2011, from /branches/1.7.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.7.0

Modified: subversion/branches/revprop-packing/INSTALL
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/INSTALL?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/INSTALL (original)
+++ subversion/branches/revprop-packing/INSTALL Thu Jul 28 21:58:49 2011
@@ -505,7 +505,7 @@ I.    INTRODUCTION
       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.org/
+          http://www.masm32.com/
 
       You only need ML.EXE and ML.ERR from this distribution.
 
@@ -758,7 +758,7 @@ II.   INSTALLATION
 
           $ svn co https://svn.apache.org/repos/asf/subversion/trunk svn
           $ cd svn
-          $ # get neon/apr as required
+          $ # get any dependencies to be built in-tree, if required
           $ chmod +x autogen.sh
           $ ./autogen.sh
           $ mkdir ../obj

Modified: subversion/branches/revprop-packing/Makefile.in
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/Makefile.in?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/Makefile.in (original)
+++ subversion/branches/revprop-packing/Makefile.in Thu Jul 28 21:58:49 2011
@@ -47,6 +47,7 @@ SVN_APR_LIBS = @SVN_APR_LIBS@
 SVN_APRUTIL_LIBS = @SVN_APRUTIL_LIBS@
 SVN_APR_MEMCACHE_LIBS = @SVN_APR_MEMCACHE_LIBS@
 SVN_DB_LIBS = @SVN_DB_LIBS@
+SVN_GPG_AGENT_LIBS = @SVN_GPG_AGENT_LIBS@
 SVN_GNOME_KEYRING_LIBS = @SVN_GNOME_KEYRING_LIBS@
 SVN_GSSAPI_LIBS = @SVN_GSSAPI_LIBS@
 SVN_KWALLET_LIBS = @SVN_KWALLET_LIBS@
@@ -66,6 +67,7 @@ fsmod_libdir = @libdir@
 ramod_libdir = @libdir@
 bdb_libdir = @libdir@
 gnome_keyring_libdir = @libdir@
+gpg_agent_libdir = @libdir@
 gssapi_libdir = @libdir@
 kwallet_libdir = @libdir@
 neon_libdir = @libdir@
@@ -235,6 +237,7 @@ INSTALL_FSMOD_LIB = $(INSTALL_LIB)
 INSTALL_RAMOD_LIB = $(INSTALL_LIB)
 INSTALL_APR_MEMCACHE_LIB = $(INSTALL_LIB)
 INSTALL_BDB_LIB = $(INSTALL_LIB)
+INSTALL_GPG_AGENT_LIB = $(INSTALL_LIB)
 INSTALL_GNOME_KEYRING_LIB = $(INSTALL_LIB)
 INSTALL_GSSAPI_LIB = $(INSTALL_LIB)
 INSTALL_KWALLET_LIB = $(INSTALL_LIB)
@@ -530,6 +533,11 @@ check-clean:
 	       subversion/tests/libsvn_subr/z                  \
 	       subversion/tests/libsvn_wc/fake-wc              \
 	       subversion/tests/libsvn_client/test-patch*      \
+	       subversion/tests/libsvn_client/test-*/          \
+	       subversion/tests/libsvn_diff/B2                 \
+	       subversion/tests/libsvn_diff/T1                 \
+	       subversion/tests/libsvn_diff/T2                 \
+	       subversion/tests/libsvn_diff/T3                 \
 	       subversion/tests/svnserveautocheck.pid          \
 	       tests.log fails.log
 

Modified: subversion/branches/revprop-packing/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build.conf?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build.conf (original)
+++ subversion/branches/revprop-packing/build.conf Thu Jul 28 21:58:49 2011
@@ -180,7 +180,7 @@ description = Subversion GNOME Keyring L
 type = lib
 install = gnome-keyring-lib
 path = subversion/libsvn_auth_gnome_keyring
-libs = apr gnome-keyring libsvn_subr
+libs = libsvn_subr apr gnome-keyring
 
 # Support for KWallet
 [libsvn_auth_kwallet]
@@ -188,7 +188,7 @@ description = Subversion KWallet Library
 type = lib
 install = kwallet-lib
 path = subversion/libsvn_auth_kwallet
-libs = apr kwallet libsvn_subr
+libs = libsvn_subr apr kwallet
 link-cmd = $(LINK_CXX_LIB)
 
 # Library needed by all subversion clients

Modified: subversion/branches/revprop-packing/build/ac-macros/apache.m4
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/ac-macros/apache.m4?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/ac-macros/apache.m4 (original)
+++ subversion/branches/revprop-packing/build/ac-macros/apache.m4 Thu Jul 28 21:58:49 2011
@@ -146,7 +146,7 @@ if test -n "$APXS" && test "$APXS" != "n
         APACHE_LDFLAGS="-shrext .so"
         ;;
     esac
-else
+elif test x"$APXS" != x"no"; then
     echo "=================================================================="
     echo "WARNING: skipping the build of mod_dav_svn"
     echo "         try using --with-apxs"

Modified: subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4 (original)
+++ subversion/branches/revprop-packing/build/ac-macros/berkeley-db.m4 Thu Jul 28 21:58:49 2011
@@ -36,7 +36,7 @@ dnl   search is skipped.
 AC_DEFUN(SVN_LIB_BERKELEY_DB,
 [
   db_version=$1.$2.$3
-  dnl  Process the `with-berkeley-db' switch.  We set `status' to one
+  dnl  Process the `with-berkeley-db' switch.  We set `bdb_status' to one
   dnl  of the following values:
   dnl    `required' --- the user specified that they did want to use
   dnl        Berkeley DB, so abort the configuration if we cannot find it.
@@ -55,7 +55,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
                           used by APR-UTIL.])],
   [
     if test "$withval" = "no"; then
-      status=skip
+      bdb_status=skip
     elif test "$withval" = "yes"; then
       apu_db_version="`$apu_config --db-version`"
       if test $? -ne 0; then
@@ -70,7 +70,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
                         APR-UTIL with the appropiate options.])
         fi
         
-        status=required
+        bdb_status=required
 
       elif test "$apu_found" != "reconfig"; then
         if test "$apu_db_version" -lt 4; then
@@ -78,7 +78,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
                         possible to use the specified Berkeley DB: $withval])
         fi
 
-        status=required
+        bdb_status=required
       fi
     else
       if echo "$withval" | $EGREP ":.*:.*:" > /dev/null; then
@@ -97,7 +97,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
         done
         SVN_DB_LIBS="${SVN_DB_LIBS## }"
 
-        status=required
+        bdb_status=required
       else
         AC_MSG_ERROR([Invalid syntax of argument of --with-berkeley-db option])
       fi
@@ -114,15 +114,15 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
       AC_MSG_WARN([Detected older version of APR-UTIL, trying to determine
                    whether apr-util is linked against Berkeley DB
                    $db_version])
-      status=try-link
+      bdb_status=try-link
     elif test "$apu_db_version" -lt "4"; then
-      status=skip
+      bdb_status=skip
     else
-      status=try-link
+      bdb_status=try-link
     fi
   ])
 
-  if test "$status" = "skip"; then
+  if test "$bdb_status" = "skip"; then
     svn_lib_berkeley_db=no
   else
     AC_MSG_CHECKING([for availability of Berkeley DB])
@@ -133,7 +133,7 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB,
     else
       AC_MSG_RESULT([no])
       svn_lib_berkeley_db=no
-      if test "$status" = "required"; then
+      if test "$bdb_status" = "required"; then
         AC_MSG_ERROR([Berkeley DB $db_version or newer wasn't found.])
       fi
     fi
@@ -180,7 +180,9 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB_TRY,
     # Or that it resides in a non-standard location which we would have
     # to compensate with using something like -R`$apu_config --prefix`/lib.
     #
-    SVN_DB_LIBS=["${SVN_DB_LIBS-`$apu_config --libs | $SED -e 's/.*\(-ldb[^[:space:]]*\).*/\1/' | $EGREP -- '-ldb[^[:space:]]*'`}"]
+    if test -z "$SVN_DB_LIBS"; then
+      SVN_DB_LIBS=["`$apu_config --libs | $SED -e 's/.*\(-ldb[^[:space:]]*\).*/\1/' | $EGREP -- '-ldb[^[:space:]]*'`"]
+    fi
 
     CPPFLAGS="$SVN_DB_INCLUDES $SVN_APRUTIL_INCLUDES $CPPFLAGS" 
     LIBS="`$apu_config --ldflags` $SVN_DB_LIBS $LIBS"

Modified: subversion/branches/revprop-packing/build/generator/extractor.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/generator/extractor.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/generator/extractor.py (original)
+++ subversion/branches/revprop-packing/build/generator/extractor.py Thu Jul 28 21:58:49 2011
@@ -55,6 +55,8 @@ _filter_names = [
   'svn_auth_get_kwallet_ssl_client_cert_pw_provider',
   'svn_auth_gnome_keyring_version',
   'svn_auth_kwallet_version',
+  'svn_auth_get_gpg_agent_simple_provider',
+  'svn_auth_gpg_agent_version',
   ]
 
 if __name__ == '__main__':

Modified: subversion/branches/revprop-packing/build/generator/gen_win.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/generator/gen_win.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/generator/gen_win.py (original)
+++ subversion/branches/revprop-packing/build/generator/gen_win.py Thu Jul 28 21:58:49 2011
@@ -1022,7 +1022,7 @@ class WinGeneratorBase(GeneratorBase):
 
     if self.serf_lib:
       if self.serf_ver_maj != 0:
-        serflib = 'serf-1.lib'
+        serflib = 'serf-%d.lib' % self.serf_ver_maj
       else:
         serflib = 'serf.lib'
 
@@ -1182,7 +1182,7 @@ class WinGeneratorBase(GeneratorBase):
 
     serf_path = os.path.abspath(self.serf_path)
     if self.serf_ver_maj != 0:
-      serflib = 'serf-1.lib'
+      serflib = 'serf-%d.lib' % self.serf_ver_maj
     else:
       serflib = 'serf.lib'
 

Modified: subversion/branches/revprop-packing/build/generator/swig/__init__.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/generator/swig/__init__.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/generator/swig/__init__.py (original)
+++ subversion/branches/revprop-packing/build/generator/swig/__init__.py Thu Jul 28 21:58:49 2011
@@ -59,19 +59,12 @@ class Generator:
 
     # Calculate SWIG paths
     self.swig_path = swig_path
-    try:
-      self.swig_libdir = _exec.output([self.swig_path, "-swiglib"], strip=1)
-    except AssertionError:
-      pass
+    self.swig_libdir = _exec.output([self.swig_path, "-swiglib"], strip=1)
 
   def version(self):
     """Get the version number of SWIG"""
-    try:
-      swig_version = _exec.output([self.swig_path, "-version"])
-      m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
-      if m:
-        return (m.group(1), m.group(2), m.group(3))
-    except AssertionError:
-      pass
+    swig_version = _exec.output([self.swig_path, "-version"])
+    m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
+    if m:
+      return (m.group(1), m.group(2), m.group(3))
     return (0, 0, 0)
-

Modified: subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py (original)
+++ subversion/branches/revprop-packing/build/generator/swig/header_wrappers.py Thu Jul 28 21:58:49 2011
@@ -65,7 +65,13 @@ class Generator(generator.swig.Generator
       )
     makefile.write('SWIG_WRAPPERS = %s\n\n' % ' '.join(wrapper_fnames))
     for short_name in self.short.values():
-      makefile.write('autogen-swig-%s: $(SWIG_WRAPPERS)\n' % short_name)
+      # swig-pl needs the '.swig_checked' target here; swig-rb and swig-py
+      # already reach it via a different dependency chain:
+      #
+      #    In build-outputs.mk, swig-py and swig-rb targets depend on *.la
+      #    targets, which depend on *.lo targets, which depend on *.c targets,
+      #    which depend on .swig_checked target.
+      makefile.write('autogen-swig-%s: .swig_checked $(SWIG_WRAPPERS)\n' % short_name)
     makefile.write('\n\n')
 
   def proxy_filename(self, include_filename):

Modified: subversion/branches/revprop-packing/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/build/run_tests.py?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/build/run_tests.py (original)
+++ subversion/branches/revprop-packing/build/run_tests.py Thu Jul 28 21:58:49 2011
@@ -347,6 +347,10 @@ class TestHarness:
                             stderr=self.log)
     line = prog.stdout.readline()
     while line:
+      if sys.platform == 'win32':
+        # Remove CRs inserted because we parse the output as binary.
+        line = line.replace('\r', '')
+
       # If using --log-to-stdout self.log in None.
       if self.log:
         self.log.write(line)

Modified: subversion/branches/revprop-packing/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/configure.ac?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/configure.ac (original)
+++ subversion/branches/revprop-packing/configure.ac Thu Jul 28 21:58:49 2011
@@ -567,6 +567,25 @@ int main()
   fi
 fi
 
+dnl GPG Agent -------------------
+
+AC_ARG_WITH(gpg_agent,
+AS_HELP_STRING([--without-gpg-agent], 
+               [Disable support for GPG-Agent]),
+               [with_gpg_agent=no], [with_gpg_agent=yes])
+AC_MSG_CHECKING([whether to support GPG-Agent])
+if test "$svn_enable_shared" != "yes"; then
+  AC_MSG_RESULT([no (shared library support is disabled)])
+elif test "$with_gpg_agent" = "yes"; then
+  AC_MSG_RESULT([yes])
+  AC_DEFINE([SVN_HAVE_GPG_AGENT], [1], 
+            [Is GPG Agent support enabled?])
+else
+  AC_MSG_RESULT([no])
+fi
+
+AC_SUBST(SVN_HAVE_GPG_AGENT)
+
 dnl GNOME Keyring -------------------
 
 AC_ARG_WITH(gnome_keyring,

Modified: subversion/branches/revprop-packing/notes/knobs
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/notes/knobs?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/notes/knobs (original)
+++ subversion/branches/revprop-packing/notes/knobs Thu Jul 28 21:58:49 2011
@@ -52,6 +52,7 @@ SVN_DEBUG
 SVN_CLIENT_COMMIT_DEBUG
 SVN_DEBUG_CACHE_DUMP_STATS
 SVN_DEBUG_CACHE_MEMBUFFER
+SVN_DEBUG_DSO
 SVN_DEBUG_WORK_QUEUE
 PACK_AFTER_EVERY_COMMIT
 DEBUG_DOUBLE_FREE
@@ -262,6 +263,14 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
   Default:   not defined
   Suggested: defined, not defined
 
+5.6 SVN_DEBUG_DSO
+
+  Scope:     libsvn_subr (dso)
+  Purpose:   detection of failures of dynamic loading of libraries
+  Range:     definedness
+  Default:   not defined
+  Suggested: defined, not defined
+
 5.7 SVN_DEBUG_WORK_QUEUE
 
   Scope:     libsvn_wc (workqueue)
@@ -278,7 +287,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
   Default:   not defined
   Suggested: defined, not defined
 
-5.6 DEBUG_DOUBLE_FREE
+5.9 DEBUG_DOUBLE_FREE
 
   Scope:     serf
   Purpose:   detect double-free calls to serf_bucket_mem_free()
@@ -286,7 +295,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
   Default:   defined
   Suggested: defined, not defined
 
-5.9 SERF_VERBOSE
+5.10 SERF_VERBOSE
 
   Scope:     serf
   Purpose:   write protocol handling debug information to stdout
@@ -294,7 +303,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
   Default:   not defined
   Suggested: defined, not defined
 
-5.10 SSL_VERBOSE
+5.11 SSL_VERBOSE
 
   Scope:     serf
   Purpose:   write SSL bucket handling debug information to stdout
@@ -302,7 +311,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
   Default:   not defined
   Suggested: defined, not defined
 
-5.11 SVN_DEPRECATED
+5.12 SVN_DEPRECATED
 
   Scope:     (everywhere)
   Purpose:   disable "deprecated function calls" warnings
@@ -310,7 +319,7 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
   Default:   (compiler dependant)
   Suggested: "" (disable deprecation warnings), or compiler-specific decorators
 
-5.12 SVN_FS__TRAIL_DEBUG
+5.13 SVN_FS__TRAIL_DEBUG
 
   Scope:     libsvn_fs_base
   Purpose:   

Modified: subversion/branches/revprop-packing/notes/moves
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/notes/moves?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/notes/moves (original)
+++ subversion/branches/revprop-packing/notes/moves Thu Jul 28 21:58:49 2011
@@ -7,7 +7,7 @@ This file purposefully talks about 'move
 This isn't about true renames as requested in issue #898.
 Rather, these ideas keep the add+delete concept while trying to make
 moves behave more in a way that one would expect if true renames were
-implemented.
+implemented, as requested in issue #3631.
 
 These ideas only cover local (client-side) moves in the working copy.
 They attempt to reuse as much existing code as possible, so new

Modified: subversion/branches/revprop-packing/subversion/bindings/swig/core.i
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/bindings/swig/core.i?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/bindings/swig/core.i (original)
+++ subversion/branches/revprop-packing/subversion/bindings/swig/core.i Thu Jul 28 21:58:49 2011
@@ -244,6 +244,7 @@
 %ignore svn_auth_kwallet_version;
 %ignore svn_auth_get_kwallet_simple_provider;
 %ignore svn_auth_get_kwallet_ssl_client_cert_pw_provider;
+%ignore svn_auth_get_gpg_agent_simple_provider;
 
 /* bad pool convention */
 %ignore svn_opt_print_generic_help;

Modified: subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t (original)
+++ subversion/branches/revprop-packing/subversion/bindings/swig/perl/native/t/8lock.t Thu Jul 28 21:58:49 2011
@@ -54,10 +54,12 @@ print $stream 'orz';
 }
 $txn->commit;
 
-$fs->lock('/testfile', 'hate software', 'we hate software', 0, 0, $fs->youngest_rev, 0);
+my $token = "opaquelocktoken:notauuid-$$";
+
+$fs->lock('/testfile', $token, 'we hate software', 0, 0, $fs->youngest_rev, 0);
 
 ok(my $lock = $fs->get_lock('/testfile'));
-is($lock->token, 'hate software');
+is($lock->token, $token);
 is($lock->owner, 'foo');
 
 $acc = SVN::Fs::create_access('fnord');
@@ -65,7 +67,7 @@ is($acc->get_username, 'fnord');
 $fs->set_access($acc);
 
 eval {
-$fs->lock('/testfile', 'hate software', 'we hate software', 0, 0, $fs->youngest_rev, 0);
+$fs->lock('/testfile', $token, 'we hate software', 0, 0, $fs->youngest_rev, 0);
 };
 
 like($@, qr/already locked/);

Modified: subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h (original)
+++ subversion/branches/revprop-packing/subversion/include/private/svn_auth_private.h Thu Jul 28 21:58:49 2011
@@ -46,6 +46,7 @@ extern "C" {
 #define SVN_AUTH__KEYCHAIN_PASSWORD_TYPE           "keychain"
 #define SVN_AUTH__KWALLET_PASSWORD_TYPE            "kwallet"
 #define SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE      "gnome-keyring"
+#define SVN_AUTH__GPG_AGENT_PASSWORD_TYPE          "gpg-agent"
 
 /* A function that stores in *PASSWORD (potentially after decrypting it)
    the user's password.  It might be obtained directly from CREDS, or

Modified: subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h (original)
+++ subversion/branches/revprop-packing/subversion/include/private/svn_dep_compat.h Thu Jul 28 21:58:49 2011
@@ -62,6 +62,11 @@ extern "C" {
 #define apr_array_clear(arr)         (arr)->nelts = 0
 #endif
 
+#if !APR_VERSION_AT_LEAST(1,0,0)
+#define APR_UINT64_C(val) UINT64_C(val)
+#define APR_FPROT_OS_DEFAULT APR_OS_DEFAULT
+#endif
+
 #if !APR_VERSION_AT_LEAST(1,3,0)
 #define APR_UINT16_MAX  0xFFFFU
 #define APR_INT16_MAX   0x7FFF

Modified: subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h (original)
+++ subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h Thu Jul 28 21:58:49 2011
@@ -53,6 +53,11 @@ extern "C" {
  */
 svn_string_t *
 svn_stringbuf__morph_into_string(svn_stringbuf_t *strbuf);
+
+/** Like apr_strtoff but provided here for backward compatibility
+ *  with APR 0.9 */
+apr_status_t
+svn__strtoff(apr_off_t *offset, const char *buf, char **end, int base);
 /** @} */
 
 /** @} */

Propchange: subversion/branches/revprop-packing/subversion/include/private/svn_string_private.h
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 28 21:58:49 2011
@@ -52,4 +52,4 @@
 /subversion/branches/tree-conflicts/subversion/include/svn_string.h:868291-873154
 /subversion/branches/tree-conflicts-notify/subversion/include/svn_string.h:873926-874008
 /subversion/branches/uris-as-urls/subversion/include/svn_string.h:1060426-1064427
-/subversion/trunk/subversion/include/private/svn_string_private.h:1143817-1148765,1151667,1151948
+/subversion/trunk/subversion/include/private/svn_string_private.h:1143817-1152007

Modified: subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/revprop-packing/subversion/include/private/svn_wc_private.h Thu Jul 28 21:58:49 2011
@@ -1096,6 +1096,40 @@ svn_wc__get_info(svn_wc_context_t *wc_ct
                  void *cancel_baton,
                  apr_pool_t *scratch_pool);
 
+/* Internal version of svn_wc_delete4(). It has one additional parameter,
+ * MOVED_TO_ABSPATH. If not NULL, this parameter indicates that the
+ * delete operation is the delete-half of a move. */
+svn_error_t *
+svn_wc__delete_internal(svn_wc_context_t *wc_ctx,
+                        const char *local_abspath,
+                        svn_boolean_t keep_local,
+                        svn_boolean_t delete_unversioned_target,
+                        const char *moved_to_abspath,
+                        svn_cancel_func_t cancel_func,
+                        void *cancel_baton,
+                        svn_wc_notify_func2_t notify_func,
+                        void *notify_baton,
+                        apr_pool_t *scratch_pool);
+
+/* If the node at LOCAL_ABSPATH was moved here set *MOVED_FROM_ABSPATH to
+ * the absolute path of the deleted move-source node, and set
+ * *DELETE_OP_ROOT_ABSPATH to the absolute path of the root node of the
+ * delete operation.
+ *
+ * If the node was not moved, set *MOVED_FROM_ABSPATH and
+ * *DELETE_OP_ROOT_ABSPATH to NULL.
+ *
+ * Either MOVED_FROM_ABSPATH or OP_ROOT_ABSPATH may be NULL to indicate
+ * that the caller is not interested in the result.
+ */
+svn_error_t *
+svn_wc__node_was_moved_here(const char **moved_from_abspath,
+                            const char **delete_op_root_abspath,
+                            svn_wc_context_t *wc_ctx,
+                            const char *local_abspath,
+                            apr_pool_t *result_pool,
+                            apr_pool_t *scratch_pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/revprop-packing/subversion/include/svn_auth.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/svn_auth.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/svn_auth.h (original)
+++ subversion/branches/revprop-packing/subversion/include/svn_auth.h Thu Jul 28 21:58:49 2011
@@ -785,8 +785,8 @@ svn_auth_get_simple_provider(svn_auth_pr
  * svn_auth_provider_object_t, or return @c NULL if the provider is not
  * available for the requested platform or the requested provider is unknown.
  *
- * Valid @a provider_name values are: "gnome_keyring", "keychain", "kwallet"
- * and "windows".
+ * Valid @a provider_name values are: "gnome_keyring", "keychain", "kwallet",
+ * "gpg_agent", and "windows".
  *
  * Valid @a provider_type values are: "simple", "ssl_client_cert_pw" and
  * "ssl_server_trust".
@@ -820,7 +820,8 @@ svn_auth_get_platform_specific_provider(
  *   1. gnome-keyring
  *   2. kwallet
  *   3. keychain
- *   4. windows-cryptoapi
+ *   4. gpg-agent
+ *   5. windows-cryptoapi
  *
  * @since New in 1.6.
  */
@@ -1071,6 +1072,28 @@ svn_auth_get_kwallet_ssl_client_cert_pw_
   apr_pool_t *pool);
 #endif /* (!DARWIN && !WIN32) || DOXYGEN */
 
+#if !defined(WIN32) || defined(DOXYGEN)
+/**
+ * Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_simple_t that gets/sets information from the user's
+ * ~/.subversion configuration directory.
+ *
+ * This is like svn_client_get_simple_provider(), except that the
+ * password is obtained from gpg_agent, which will keep it in
+ * a memory cache.
+ *
+ * Allocate @a *provider in @a pool.
+ *
+ * @since New in 1.8
+ * @note This function actually works only on systems with
+ * GNU Privacy Guard installed.
+ */
+void
+svn_auth_get_gpg_agent_simple_provider
+    (svn_auth_provider_object_t **provider,
+     apr_pool_t *pool);
+#endif /* !defined(WIN32) || defined(DOXYGEN) */
+
 
 /** Set @a *provider to an authentication provider of type @c
  * svn_auth_cred_username_t that gets/sets information from a user's

Modified: subversion/branches/revprop-packing/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/svn_config.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/svn_config.h (original)
+++ subversion/branches/revprop-packing/subversion/include/svn_config.h Thu Jul 28 21:58:49 2011
@@ -146,7 +146,7 @@ typedef struct svn_config_t svn_config_t
  * but we don't want the # character to end up in the variable.
  */
 #define SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_1 \
-  "*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo"
+  "*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__"
 #define SVN_CONFIG__DEFAULT_GLOBAL_IGNORES_LINE_2 \
   "*.rej *~ #*# .#* .*.swp .DS_Store"
 

Modified: subversion/branches/revprop-packing/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/svn_error.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/svn_error.h (original)
+++ subversion/branches/revprop-packing/subversion/include/svn_error.h Thu Jul 28 21:58:49 2011
@@ -391,7 +391,8 @@ svn_error_t *svn_error_purge_tracing(svn
 #define SVN_ERR_IS_LOCK_ERROR(err)                          \
   (err->apr_err == SVN_ERR_FS_PATH_ALREADY_LOCKED ||        \
    err->apr_err == SVN_ERR_FS_NOT_FOUND           ||        \
-   err->apr_err == SVN_ERR_FS_OUT_OF_DATE)
+   err->apr_err == SVN_ERR_FS_OUT_OF_DATE         ||        \
+   err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN)
 
 /**
  * Return TRUE if @a err is an error specifically related to unlocking

Modified: subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/revprop-packing/subversion/include/svn_mergeinfo.h Thu Jul 28 21:58:49 2011
@@ -270,20 +270,38 @@ svn_rangelist_diff(apr_array_header_t **
                    apr_pool_t *pool);
 
 /** Merge two rangelists consisting of @c svn_merge_range_t *
- * elements, @a *rangelist and @a changes, placing the results in
- * @a *rangelist.  Either rangelist may be empty.
+ * elements, @a rangelist and @a changes, placing the results in
+ * @a rangelist. New elements added to @a rangelist are allocated
+ * in @a result_pool. Either rangelist may be empty.
  *
  * When intersecting rangelists are merged, the inheritability of
  * the resulting svn_merge_range_t depends on the inheritability of the
  * operands: see svn_mergeinfo_merge().
  *
- * Note: @a *rangelist and @a changes must be sorted as said by @c
- * svn_sort_compare_ranges().  @a *rangelist is guaranteed to remain
+ * Note: @a rangelist and @a changes must be sorted as said by @c
+ * svn_sort_compare_ranges().  @a rangelist is guaranteed to remain
  * in sorted order and be compacted to the minimal number of ranges
  * needed to represent the merged result.
  *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_rangelist_merge2(apr_array_header_t *rangelist,
+                     const apr_array_header_t *changes,
+                     apr_pool_t *result_pool,
+                     apr_pool_t *scratch_pool);
+
+/** Like svn_rangelist_merge2(), but with @a rangelist as an input/output
+ * argument. This function always allocates a new rangelist in @a pool and
+ * returns its result in @a *rangelist. It does not modify @a *rangelist
+ * in place. If not used carefully, this function can use up a lot of memory
+ * if called in a loop.
+ *
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_rangelist_merge(apr_array_header_t **rangelist,
                     const apr_array_header_t *changes,

Modified: subversion/branches/revprop-packing/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/blame.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/blame.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/blame.c Thu Jul 28 21:58:49 2011
@@ -107,6 +107,7 @@ struct delta_baton {
   svn_txdelta_window_handler_t wrapped_handler;
   void *wrapped_baton;
   struct file_rev_baton *file_rev_baton;
+  svn_stream_t *source_stream;  /* the delta source */
   const char *filename;
 };
 
@@ -319,6 +320,13 @@ window_handler(svn_txdelta_window_t *win
   if (window)
     return SVN_NO_ERROR;
 
+  /* Close the source file used for the delta.
+     It is important to do this early, since otherwise, they will be deleted
+     before all handles are closed, which leads to failures on some platforms
+     when new tempfiles are to be created. */
+  if (dbaton->source_stream)
+    SVN_ERR(svn_stream_close(dbaton->source_stream));
+
   /* If we are including merged revisions, we need to add each rev to the
      merged chain. */
   if (frb->include_merged_revisions)
@@ -445,11 +453,12 @@ file_rev_handler(void *baton, const char
 
   /* Prepare the text delta window handler. */
   if (frb->last_filename)
-    SVN_ERR(svn_stream_open_readonly(&last_stream, frb->last_filename,
+    SVN_ERR(svn_stream_open_readonly(&delta_baton->source_stream, frb->last_filename,
                                      frb->currpool, pool));
   else
     /* Means empty stream below. */
-    last_stream = NULL;
+    delta_baton->source_stream = NULL;
+  last_stream = svn_stream_disown(delta_baton->source_stream, pool);
 
   if (frb->include_merged_revisions && !frb->merged_revision)
     filepool = frb->filepool;

Modified: subversion/branches/revprop-packing/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/client.h?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/client.h (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/client.h Thu Jul 28 21:58:49 2011
@@ -595,8 +595,6 @@ svn_client__switch_internal(svn_revnum_t
 
    DEPTH is the depth to recurse.
 
-   DRY_RUN is set if this is a dry-run merge. It is not relevant for diff.
-
    RA_SESSION defines the additional RA session for requesting file
    contents.
 
@@ -615,15 +613,13 @@ svn_client__get_diff_editor(const svn_de
                             svn_ra_session_t *ra_session,
                             svn_revnum_t revision,
                             svn_boolean_t walk_deleted_dirs,
-                            svn_boolean_t dry_run,
                             const svn_wc_diff_callbacks4_t *diff_callbacks,
                             void *diff_cmd_baton,
                             svn_cancel_func_t cancel_func,
                             void *cancel_baton,
                             svn_wc_notify_func2_t notify_func,
                             void *notify_baton,
-                            apr_pool_t *result_pool,
-                            apr_pool_t *scratch_pool);
+                            apr_pool_t *result_pool);
 
 
 /* ---------------------------------------------------------------- */

Modified: subversion/branches/revprop-packing/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/commit.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/commit.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/commit.c Thu Jul 28 21:58:49 2011
@@ -1451,8 +1451,10 @@ svn_client_commit5(const apr_array_heade
 
  cleanup:
   /* Abort the commit if it is still in progress. */
+  svn_pool_clear(iterpool); /* Close open handles before aborting */
   if (commit_in_progress)
-    svn_error_clear(editor->abort_edit(edit_baton, pool));
+    cmt_err = svn_error_compose_create(cmt_err,
+                                       editor->abort_edit(edit_baton, pool));
 
   /* A bump error is likely to occur while running a working copy log file,
      explicitly unlocking and removing temporary files would be wrong in

Modified: subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/commit_util.c Thu Jul 28 21:58:49 2011
@@ -587,7 +587,7 @@ harvest_committables(svn_wc_context_t *w
   /* Check for the deletion case.
      * We delete explicitly deleted nodes (duh!)
      * We delete not-present children of copies
-     * We delete nodes that directly replace a node in it's ancestor
+     * We delete nodes that directly replace a node in its ancestor
    */
 
   if (is_deleted || is_replaced)
@@ -1845,11 +1845,14 @@ svn_client__do_commit(const char *base_u
                                          result_pool, iterpool);
 
       if (err)
-        return svn_error_trace(fixup_commit_error(item->path,
-                                                  base_url,
-                                                  item->session_relpath,
-                                                  svn_node_file,
-                                                  err, ctx, iterpool));
+        {
+          svn_pool_destroy(iterpool); /* Close tempfiles */
+          return svn_error_trace(fixup_commit_error(item->path,
+                                                    base_url,
+                                                    item->session_relpath,
+                                                    svn_node_file,
+                                                    err, ctx, scratch_pool));
+        }
 
       if (md5_checksums)
         apr_hash_set(*md5_checksums, item->path, APR_HASH_KEY_STRING,

Modified: subversion/branches/revprop-packing/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/diff.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/diff.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/diff.c Thu Jul 28 21:58:49 2011
@@ -778,6 +778,9 @@ struct diff_cmd_baton {
   /* Whether we're producing a git-style diff. */
   svn_boolean_t use_git_diff_format;
 
+  /* Whether deletion of a file is summarized versus showing a full diff. */
+  svn_boolean_t no_diff_deleted;
+
   svn_wc_context_t *wc_ctx;
 
   /* The RA session used during diffs involving the repository. */
@@ -1173,28 +1176,40 @@ diff_file_added(svn_wc_notify_state_t *c
 
 /* An svn_wc_diff_callbacks4_t function. */
 static svn_error_t *
-diff_file_deleted_with_diff(svn_wc_notify_state_t *state,
-                            svn_boolean_t *tree_conflicted,
-                            const char *path,
-                            const char *tmpfile1,
-                            const char *tmpfile2,
-                            const char *mimetype1,
-                            const char *mimetype2,
-                            apr_hash_t *original_props,
-                            void *diff_baton,
-                            apr_pool_t *scratch_pool)
+diff_file_deleted(svn_wc_notify_state_t *state,
+                  svn_boolean_t *tree_conflicted,
+                  const char *path,
+                  const char *tmpfile1,
+                  const char *tmpfile2,
+                  const char *mimetype1,
+                  const char *mimetype2,
+                  apr_hash_t *original_props,
+                  void *diff_baton,
+                  apr_pool_t *scratch_pool)
 {
   struct diff_cmd_baton *diff_cmd_baton = diff_baton;
 
   if (diff_cmd_baton->anchor)
     path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
 
-  if (tmpfile1)
-    SVN_ERR(diff_content_changed(path,
-                                 tmpfile1, tmpfile2, diff_cmd_baton->revnum1,
-                                 diff_cmd_baton->revnum2,
-                                 mimetype1, mimetype2,
-                                 svn_diff_op_deleted, NULL, diff_baton));
+  if (diff_cmd_baton->no_diff_deleted)
+    {
+      SVN_ERR(file_printf_from_utf8(
+                diff_cmd_baton->outfile,
+                diff_cmd_baton->header_encoding,
+                "Index: %s (deleted)" APR_EOL_STR "%s" APR_EOL_STR,
+                path, equal_string));
+    }
+  else
+    {
+      if (tmpfile1)
+        SVN_ERR(diff_content_changed(path,
+                                     tmpfile1, tmpfile2,
+                                     diff_cmd_baton->revnum1,
+                                     diff_cmd_baton->revnum2,
+                                     mimetype1, mimetype2,
+                                     svn_diff_op_deleted, NULL, diff_baton));
+    }
 
   /* We don't list all the deleted properties. */
 
@@ -1208,36 +1223,6 @@ diff_file_deleted_with_diff(svn_wc_notif
 
 /* An svn_wc_diff_callbacks4_t function. */
 static svn_error_t *
-diff_file_deleted_no_diff(svn_wc_notify_state_t *state,
-                          svn_boolean_t *tree_conflicted,
-                          const char *path,
-                          const char *tmpfile1,
-                          const char *tmpfile2,
-                          const char *mimetype1,
-                          const char *mimetype2,
-                          apr_hash_t *original_props,
-                          void *diff_baton,
-                          apr_pool_t *scratch_pool)
-{
-  struct diff_cmd_baton *diff_cmd_baton = diff_baton;
-
-  if (diff_cmd_baton->anchor)
-    path = svn_dirent_join(diff_cmd_baton->anchor, path, scratch_pool);
-
-  if (state)
-    *state = svn_wc_notify_state_unknown;
-  if (tree_conflicted)
-    *tree_conflicted = FALSE;
-
-  return file_printf_from_utf8
-          (diff_cmd_baton->outfile,
-           diff_cmd_baton->header_encoding,
-           "Index: %s (deleted)" APR_EOL_STR "%s" APR_EOL_STR,
-           path, equal_string);
-}
-
-/* An svn_wc_diff_callbacks4_t function. */
-static svn_error_t *
 diff_dir_added(svn_wc_notify_state_t *state,
                svn_boolean_t *tree_conflicted,
                svn_boolean_t *skip,
@@ -1313,6 +1298,18 @@ diff_dir_closed(svn_wc_notify_state_t *c
   return SVN_NO_ERROR;
 }
 
+static const svn_wc_diff_callbacks4_t diff_callbacks =
+{
+  diff_file_opened,
+  diff_file_changed,
+  diff_file_added,
+  diff_file_deleted,
+  diff_dir_deleted,
+  diff_dir_opened,
+  diff_dir_added,
+  diff_dir_props_changed,
+  diff_dir_closed    
+};
 
 /*-----------------------------------------------------------------*/
 
@@ -1740,11 +1737,11 @@ diff_repos_repos(const svn_wc_diff_callb
   SVN_ERR(svn_client__get_diff_editor(
                 &diff_editor, &diff_edit_baton,
                 NULL, "", depth,
-                extra_ra_session, rev1, TRUE, FALSE,
+                extra_ra_session, rev1, TRUE,
                 callbacks, callback_baton,
                 ctx->cancel_func, ctx->cancel_baton,
                 NULL /* no notify_func */, NULL /* no notify_baton */,
-                pool, pool));
+                pool));
 
   /* We want to switch our txn into URL2 */
   SVN_ERR(svn_ra_do_diff3
@@ -2214,24 +2211,12 @@ svn_client_diff5(const apr_array_header_
                  apr_pool_t *pool)
 {
   struct diff_cmd_baton diff_cmd_baton = { 0 };
-  svn_wc_diff_callbacks4_t diff_callbacks;
 
   /* We will never do a pegged diff from here. */
   svn_opt_revision_t peg_revision;
   peg_revision.kind = svn_opt_revision_unspecified;
 
   /* setup callback and baton */
-  diff_callbacks.file_opened = diff_file_opened;
-  diff_callbacks.file_changed = diff_file_changed;
-  diff_callbacks.file_added = diff_file_added;
-  diff_callbacks.file_deleted = no_diff_deleted ? diff_file_deleted_no_diff :
-                                                  diff_file_deleted_with_diff;
-  diff_callbacks.dir_added =  diff_dir_added;
-  diff_callbacks.dir_deleted = diff_dir_deleted;
-  diff_callbacks.dir_props_changed = diff_dir_props_changed;
-  diff_callbacks.dir_opened = diff_dir_opened;
-  diff_callbacks.dir_closed = diff_dir_closed;
-
   diff_cmd_baton.orig_path_1 = path1;
   diff_cmd_baton.orig_path_2 = path2;
 
@@ -2248,6 +2233,7 @@ svn_client_diff5(const apr_array_header_
   diff_cmd_baton.force_binary = ignore_content_type;
   diff_cmd_baton.relative_to_dir = relative_to_dir;
   diff_cmd_baton.use_git_diff_format = use_git_diff_format;
+  diff_cmd_baton.no_diff_deleted = no_diff_deleted;
   diff_cmd_baton.wc_ctx = ctx->wc_ctx;
   diff_cmd_baton.visited_paths = apr_hash_make(pool);
   diff_cmd_baton.ra_session = NULL;
@@ -2281,20 +2267,8 @@ svn_client_diff_peg5(const apr_array_hea
                      apr_pool_t *pool)
 {
   struct diff_cmd_baton diff_cmd_baton = { 0 };
-  svn_wc_diff_callbacks4_t diff_callbacks;
 
   /* setup callback and baton */
-  diff_callbacks.file_opened = diff_file_opened;
-  diff_callbacks.file_changed = diff_file_changed;
-  diff_callbacks.file_added = diff_file_added;
-  diff_callbacks.file_deleted = no_diff_deleted ? diff_file_deleted_no_diff :
-                                                  diff_file_deleted_with_diff;
-  diff_callbacks.dir_added =  diff_dir_added;
-  diff_callbacks.dir_deleted = diff_dir_deleted;
-  diff_callbacks.dir_props_changed = diff_dir_props_changed;
-  diff_callbacks.dir_opened = diff_dir_opened;
-  diff_callbacks.dir_closed = diff_dir_closed;
-
   diff_cmd_baton.orig_path_1 = path;
   diff_cmd_baton.orig_path_2 = path;
 
@@ -2311,6 +2285,7 @@ svn_client_diff_peg5(const apr_array_hea
   diff_cmd_baton.force_binary = ignore_content_type;
   diff_cmd_baton.relative_to_dir = relative_to_dir;
   diff_cmd_baton.use_git_diff_format = use_git_diff_format;
+  diff_cmd_baton.no_diff_deleted = no_diff_deleted;
   diff_cmd_baton.wc_ctx = ctx->wc_ctx;
   diff_cmd_baton.visited_paths = apr_hash_make(pool);
   diff_cmd_baton.ra_session = NULL;

Modified: subversion/branches/revprop-packing/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/externals.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/externals.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/externals.c Thu Jul 28 21:58:49 2011
@@ -1044,6 +1044,9 @@ handle_externals_change(const struct ext
 
       svn_pool_clear(iterpool);
 
+      if (eb->ctx->cancel_func)
+        SVN_ERR(eb->ctx->cancel_func(eb->ctx->cancel_baton));
+
       target_abspath = svn_dirent_join(local_abspath, new_item->target_dir,
                                        iterpool);
 

Modified: subversion/branches/revprop-packing/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/revprop-packing/subversion/libsvn_client/merge.c?rev=1152016&r1=1152015&r2=1152016&view=diff
==============================================================================
--- subversion/branches/revprop-packing/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/revprop-packing/subversion/libsvn_client/merge.c Thu Jul 28 21:58:49 2011
@@ -2722,6 +2722,43 @@ notification_receiver(void *baton, const
     (*notify_b->wrapped_func)(notify_b->wrapped_baton, notify, pool);
 }
 
+/* Set *OUT_RANGELIST to the intersection of IN_RANGELIST with the simple
+ * (inheritable) revision range REV1:REV2, according to CONSIDER_INHERITANCE.
+ * If REV1 is equal to REV2, the result is an empty rangelist, otherwise
+ * REV1 must be less than REV2.
+ *
+ * Note: If CONSIDER_INHERITANCE is FALSE, the effect is to treat any non-
+ * inheritable input ranges as if they were inheritable.  If it is TRUE, the
+ * effect is to discard any non-inheritable input ranges.  Therefore the
+ * ranges in *OUT_RANGELIST will always be inheritable. */
+static svn_error_t *
+rangelist_intersect_range(apr_array_header_t **out_rangelist,
+                          const apr_array_header_t *in_rangelist,
+                          svn_revnum_t rev1,
+                          svn_revnum_t rev2,
+                          svn_boolean_t consider_inheritance,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool)
+{
+  SVN_ERR_ASSERT(rev1 <= rev2);
+
+  if (rev1 < rev2)
+    {
+      apr_array_header_t *simple_rangelist =
+        svn_rangelist__initialize(rev1, rev2, TRUE, scratch_pool);
+
+      SVN_ERR(svn_rangelist_intersect(out_rangelist,
+                                      simple_rangelist, in_rangelist,
+                                      consider_inheritance, result_pool));
+    }
+  else
+    {
+      *out_rangelist = apr_array_make(result_pool, 0,
+                                      sizeof(svn_merge_range_t *));
+    }
+  return SVN_NO_ERROR;
+}
+
 /* Helper for fix_deleted_subtree_ranges().  Like fix_deleted_subtree_ranges()
    this function should only be called when honoring mergeinfo.
 
@@ -2820,7 +2857,6 @@ adjust_deleted_subtree_ranges(svn_client
   svn_revnum_t younger_rev = is_rollback ? revision1 : revision2;
   svn_revnum_t peg_rev = younger_rev;
   svn_revnum_t older_rev = is_rollback ? revision2 : revision1;
-  svn_revnum_t revision_primary_url_deleted = SVN_INVALID_REVNUM;
   apr_array_header_t *segments;
   const char *rel_source_path;
   const char *session_url;
@@ -2875,20 +2911,20 @@ adjust_deleted_subtree_ranges(svn_client
             }
           else
             {
-              apr_array_header_t *exists_rangelist, *deleted_rangelist;
+              apr_array_header_t *deleted_rangelist;
+              svn_revnum_t rev_primary_url_deleted;
 
               /* PRIMARY_URL@older_rev exists, so it was deleted at some
                  revision prior to peg_rev, find that revision. */
               SVN_ERR(svn_ra_get_deleted_rev(ra_session, rel_source_path,
                                              older_rev, younger_rev,
-                                             &revision_primary_url_deleted,
+                                             &rev_primary_url_deleted,
                                              scratch_pool));
 
               /* PRIMARY_URL@older_rev exists and PRIMARY_URL@peg_rev doesn't,
                  so svn_ra_get_deleted_rev() should always find the revision
                  PRIMARY_URL@older_rev was deleted. */
-              SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(
-                revision_primary_url_deleted));
+              SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(rev_primary_url_deleted));
 
               /* If this is a reverse merge reorder CHILD->REMAINING_RANGES and
                  PARENT->REMAINING_RANGES so both will work with the
@@ -2906,43 +2942,25 @@ adjust_deleted_subtree_ranges(svn_client
               /* Find the intersection of CHILD->REMAINING_RANGES with the
                  range over which PRIMARY_URL@older_rev exists (ending at
                  the youngest revision at which it still exists). */
-              if (revision_primary_url_deleted - 1 > older_rev)
-                {
-                  /* It was not deleted immediately after OLDER_REV, so
-                     it has some relevant changes. */
-                  exists_rangelist =
-                    svn_rangelist__initialize(older_rev,
-                                              revision_primary_url_deleted - 1,
-                                              TRUE, scratch_pool);
-                  SVN_ERR(svn_rangelist_intersect(&(child->remaining_ranges),
-                                                  exists_rangelist,
-                                                  child->remaining_ranges,
-                                                  FALSE, scratch_pool));
-                }
-              else
-                {
-                  /* It was deleted immediately after the OLDER rev, so
-                     it has no relevant changes. */
-                  child->remaining_ranges
-                    = apr_array_make(scratch_pool, 0,
-                                     sizeof(svn_merge_range_t *));
-                }
-
-              /* Find the intersection of PARENT->REMAINING_RANGES with the
-                 range beginning when PRIMARY_URL@older_rev was deleted
-                 until younger_rev.
-                 Finally merge this rangelist with the rangelist above and
-                 store the result in CHILD->REMANING_RANGES. */
-              deleted_rangelist =
-                svn_rangelist__initialize(revision_primary_url_deleted - 1,
-                                          peg_rev, TRUE, scratch_pool);
-              SVN_ERR(svn_rangelist_intersect(&deleted_rangelist,
-                                              deleted_rangelist,
-                                              parent->remaining_ranges,
-                                              FALSE, scratch_pool));
-
-              SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
-                                          deleted_rangelist, scratch_pool));
+              SVN_ERR(rangelist_intersect_range(&child->remaining_ranges,
+                                                child->remaining_ranges,
+                                                older_rev,
+                                                rev_primary_url_deleted - 1,
+                                                FALSE,
+                                                scratch_pool, scratch_pool));
+
+              /* Merge into CHILD->REMANING_RANGES the intersection of
+                 PARENT->REMAINING_RANGES with the range beginning when
+                 PRIMARY_URL@older_rev was deleted until younger_rev. */
+              SVN_ERR(rangelist_intersect_range(&deleted_rangelist,
+                                                parent->remaining_ranges,
+                                                rev_primary_url_deleted - 1,
+                                                peg_rev,
+                                                FALSE,
+                                                scratch_pool, scratch_pool));
+              SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+                                           deleted_rangelist, scratch_pool,
+                                           scratch_pool));
 
               /* Return CHILD->REMAINING_RANGES and PARENT->REMAINING_RANGES
                  to reverse order if necessary. */
@@ -2962,7 +2980,7 @@ adjust_deleted_subtree_ranges(svn_client
     }
   else /* PRIMARY_URL@peg_rev exists. */
     {
-      apr_array_header_t *exists_rangelist, *non_existent_rangelist;
+      apr_array_header_t *non_existent_rangelist;
       svn_location_segment_t *segment =
         APR_ARRAY_IDX(segments, (segments->nelts - 1),
                       svn_location_segment_t *);
@@ -2989,34 +3007,25 @@ adjust_deleted_subtree_ranges(svn_client
                                         scratch_pool));
         }
 
-      /* Since segment doesn't span older_rev:peg_rev we know
+      /* Intersect CHILD->REMAINING_RANGES with the range where PRIMARY_URL
+         exists.  Since segment doesn't span older_rev:peg_rev we know
          PRIMARY_URL@peg_rev didn't come into existence until
-         segment->range_start + 1.  Create a rangelist describing
-         range where PRIMARY_URL exists and find the intersection of that
-         range and CHILD->REMAINING_RANGELIST. */
-      exists_rangelist = svn_rangelist__initialize(segment->range_start,
-                                                   peg_rev, TRUE,
-                                                   scratch_pool);
-      SVN_ERR(svn_rangelist_intersect(&(child->remaining_ranges),
-                                      exists_rangelist,
-                                      child->remaining_ranges,
-                                      FALSE, scratch_pool));
-
-      /* Create a second rangelist describing the range before
-         PRIMARY_URL@peg_rev came into existence and find the intersection of
-         that range and PARENT->REMAINING_RANGES.  Then merge that rangelist
-         with exists_rangelist and store the result in
-         CHILD->REMANING_RANGES. */
-      non_existent_rangelist = svn_rangelist__initialize(older_rev,
-                                                         segment->range_start,
-                                                         TRUE, scratch_pool);
-      SVN_ERR(svn_rangelist_intersect(&non_existent_rangelist,
-                                      non_existent_rangelist,
-                                      parent->remaining_ranges,
-                                      FALSE, scratch_pool));
-
-      SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
-                                  non_existent_rangelist, scratch_pool));
+         segment->range_start + 1. */
+      SVN_ERR(rangelist_intersect_range(&child->remaining_ranges,
+                                        child->remaining_ranges,
+                                        segment->range_start, peg_rev,
+                                        FALSE, scratch_pool, scratch_pool));
+
+      /* Merge into CHILD->REMANING_RANGES the intersection of
+         PARENT->REMAINING_RANGES with the range before PRIMARY_URL@peg_rev
+         came into existence. */
+      SVN_ERR(rangelist_intersect_range(&non_existent_rangelist,
+                                        parent->remaining_ranges,
+                                        older_rev, segment->range_start,
+                                        FALSE, scratch_pool, scratch_pool));
+      SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+                                   non_existent_rangelist, scratch_pool,
+                                   scratch_pool));
 
       /* Return CHILD->REMAINING_RANGES and PARENT->REMAINING_RANGES
          to reverse order if necessary. */
@@ -3762,8 +3771,9 @@ filter_merged_revisions(svn_client__merg
             implicit_rangelist = apr_array_make(scratch_pool, 0,
                                                 sizeof(svn_merge_range_t *));
 
-          SVN_ERR(svn_rangelist_merge(&implicit_rangelist,
-                                      explicit_rangelist, scratch_pool));
+          SVN_ERR(svn_rangelist_merge2(implicit_rangelist,
+                                       explicit_rangelist, scratch_pool,
+                                       scratch_pool));
           SVN_ERR(svn_rangelist_reverse(implicit_rangelist, scratch_pool));
           child->remaining_ranges = svn_rangelist_dup(implicit_rangelist,
                                                       result_pool);
@@ -4150,6 +4160,7 @@ find_gaps_in_merge_source_history(svn_re
         apr_array_make(scratch_pool, 2, sizeof(svn_merge_range_t *));
       apr_array_header_t *gap_rangelist;
       apr_hash_index_t *hi;
+      apr_pool_t *iterpool = svn_pool_create(scratch_pool);
 
       for (hi = apr_hash_first(scratch_pool, implicit_src_mergeinfo);
            hi;
@@ -4157,9 +4168,12 @@ find_gaps_in_merge_source_history(svn_re
         {
           apr_array_header_t *value = svn__apr_hash_index_val(hi);
 
-          SVN_ERR(svn_rangelist_merge(&implicit_rangelist, value,
-                                      scratch_pool));
+          svn_pool_clear(iterpool);
+
+          SVN_ERR(svn_rangelist_merge2(implicit_rangelist, value,
+                                       scratch_pool, iterpool));
         }
+      svn_pool_destroy(iterpool);
       SVN_ERR(svn_rangelist_remove(&gap_rangelist, implicit_rangelist,
                                    requested_rangelist, FALSE,
                                    scratch_pool));
@@ -4318,6 +4332,8 @@ populate_remaining_ranges(apr_array_head
 
       parent = NULL;
 
+      svn_pool_clear(iterpool);
+
       /* If the path is absent don't do subtree merge either. */
       SVN_ERR_ASSERT(child);
       if (child->absent)
@@ -4438,9 +4454,9 @@ populate_remaining_ranges(apr_array_head
                  to, CHILD->REMAINING_RANGES as appropriate. */
 
               if (overlaps_or_adjoins)
-                SVN_ERR(svn_rangelist_merge(&(child->remaining_ranges),
-                                            merge_b->implicit_src_gap,
-                                            result_pool));
+                SVN_ERR(svn_rangelist_merge2(child->remaining_ranges,
+                                             merge_b->implicit_src_gap,
+                                             result_pool, iterpool));
               else /* equals == TRUE */
                 SVN_ERR(svn_rangelist_remove(&(child->remaining_ranges),
                                              merge_b->implicit_src_gap,
@@ -4614,8 +4630,7 @@ update_wc_mergeinfo(svn_mergeinfo_catalo
         }
       else
         {
-          SVN_ERR(svn_rangelist_merge(&rangelist, ranges,
-                                      iterpool));
+          SVN_ERR(svn_rangelist_merge2(rangelist, ranges, iterpool, iterpool));
         }
       /* Update the mergeinfo by adjusting the path's rangelist. */
       apr_hash_set(mergeinfo, rel_path, APR_HASH_KEY_STRING, rangelist);
@@ -5008,12 +5023,12 @@ drive_merge_report_editor(const char *ta
                                       merge_b->ctx->wc_ctx, target_abspath,
                                       depth,
                                       merge_b->ra_session2, revision1,
-                                      FALSE, merge_b->dry_run,
+                                      FALSE,
                                       &merge_callbacks, merge_b,
                                       merge_b->ctx->cancel_func,
                                       merge_b->ctx->cancel_baton,
                                       notification_receiver, notify_b,
-                                      scratch_pool, scratch_pool));
+                                      scratch_pool));
   SVN_ERR(svn_ra_do_diff3(merge_b->ra_session1,
                           &reporter, &report_baton, revision2,
                           "", depth, merge_b->ignore_ancestry,
@@ -7860,13 +7875,53 @@ typedef struct log_noop_baton_t
      being diffed. */
   const char *source_repos_abs;
 
-  /* Initially empty rangelists allocated in POOL. */
+  /* Initially empty rangelists allocated in POOL. The rangelists are
+   * populated across multiple invocations of log_noop_revs(). */
   apr_array_header_t *operative_ranges;
   apr_array_header_t *merged_ranges;
 
+  /* Pool to store the rangelists. */
   apr_pool_t *pool;
 } log_noop_baton_t;
 
+/* Helper for log_noop_revs: Merge a svn_merge_range_t representation of
+   REVISION into RANGELIST. New elements added to rangelist are allocated
+   in RESULT_POOL.
+
+   This is *not* a general purpose rangelist merge but a special replacement
+   for svn_rangelist_merge when REVISION is guaranteed to be younger than any
+   element in RANGELIST.  svn_rangelist_merge is O(n) worst-case (i.e. when
+   all the ranges in output rangelist are older than the incoming changes).
+   This turns the special case of a single incoming younger range into O(1).
+   */
+static svn_error_t *
+rangelist_merge_revision(apr_array_header_t *rangelist,
+                         svn_revnum_t revision,
+                         apr_pool_t *result_pool)
+{
+  svn_merge_range_t *new_range;
+  if (rangelist->nelts)
+    {
+      svn_merge_range_t *range = APR_ARRAY_IDX(rangelist, rangelist->nelts - 1,
+                                               svn_merge_range_t *);
+      if (range->end == revision - 1)
+        {
+          /* REVISION is adjacent to the youngest range in RANGELIST
+             so we can simply expand that range to encompass REVISION. */
+          range->end = revision;
+          return SVN_NO_ERROR;
+        }
+    }
+  new_range = apr_palloc(result_pool, sizeof(*new_range));
+  new_range->start = revision - 1;
+  new_range->end = revision;
+  new_range->inheritable = TRUE;
+
+  APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = new_range;
+
+  return SVN_NO_ERROR;
+}
+
 /* Implements the svn_log_entry_receiver_t interface.
 
    BATON is an log_noop_baton_t *.
@@ -7877,45 +7932,34 @@ typedef struct log_noop_baton_t
    MERGE_B->TARGET_ABSPATH per the mergeinfo in CHILDREN_WITH_MERGEINFO,
    then add LOG_ENTRY->REVISION to BATON->MERGED_RANGES.
 
-   Use POOL for temporary allocations.  Allocate additions to
+   Use SCRATCH_POOL for temporary allocations.  Allocate additions to
    BATON->MERGED_RANGES and BATON->OPERATIVE_RANGES in BATON->POOL.
+
+   Note: This callback must be invoked from oldest LOG_ENTRY->REVISION
+   to youngest LOG_ENTRY->REVISION -- see rangelist_merge_revision().
 */
 static svn_error_t *
 log_noop_revs(void *baton,
               svn_log_entry_t *log_entry,
-              apr_pool_t *pool)
+              apr_pool_t *scratch_pool)
 {
   log_noop_baton_t *log_gap_baton = baton;
   apr_hash_index_t *hi;
   svn_revnum_t revision;
   svn_boolean_t log_entry_rev_required = FALSE;
-  apr_array_header_t *rl1;
-  apr_array_header_t *rl2;
-
-  /* The baton's pool is essentially an iterpool so we must clear it
-   * for each invocation of this function. */
-  rl1 = svn_rangelist_dup(log_gap_baton->operative_ranges, pool);
-  rl2 = svn_rangelist_dup(log_gap_baton->merged_ranges, pool);
-  svn_pool_clear(log_gap_baton->pool);
-  log_gap_baton->operative_ranges = svn_rangelist_dup(rl1,
-                                                      log_gap_baton->pool);
-  log_gap_baton->merged_ranges = svn_rangelist_dup(rl2,
-                                                   log_gap_baton->pool);
 
   revision = log_entry->revision;
 
   /* Unconditionally add LOG_ENTRY->REVISION to BATON->OPERATIVE_MERGES. */
-  SVN_ERR(svn_rangelist_merge(&(log_gap_baton->operative_ranges),
-                              svn_rangelist__initialize(revision - 1,
-                                                        revision, TRUE,
-                                                        log_gap_baton->pool),
-                              log_gap_baton->pool));
+  SVN_ERR(rangelist_merge_revision(log_gap_baton->operative_ranges,
+                                   revision,
+                                   log_gap_baton->pool));
 
   /* Examine each path affected by LOG_ENTRY->REVISION.  If the explicit or
      inherited mergeinfo for *all* of the corresponding paths under
      MERGE_B->TARGET_ABSPATH reflects that LOG_ENTRY->REVISION has been
      merged, then add LOG_ENTRY->REVISION to BATON->MERGED_RANGES. */
-  for (hi = apr_hash_first(pool, log_entry->changed_paths2);
+  for (hi = apr_hash_first(scratch_pool, log_entry->changed_paths2);
        hi;
        hi = apr_hash_next(hi))
     {
@@ -7934,7 +7978,7 @@ log_noop_revs(void *baton,
       if (rel_path == NULL)
         continue;
       cwmi_path = svn_dirent_join(log_gap_baton->merge_b->target_abspath,
-                                  rel_path, pool);
+                                  rel_path, scratch_pool);
 
       /* Find any explicit or inherited mergeinfo for PATH. */
       while (!log_entry_rev_required)
@@ -7962,8 +8006,8 @@ log_noop_revs(void *baton,
             }
 
           /* Didn't find anything so crawl up to the parent. */
-          cwmi_path = svn_dirent_dirname(cwmi_path, pool);
-          path = svn_dirent_dirname(path, pool);
+          cwmi_path = svn_dirent_dirname(cwmi_path, scratch_pool);
+          path = svn_dirent_dirname(path, scratch_pool);
 
           /* At this point *if* we find mergeinfo it will be inherited. */
           mergeinfo_inherited = TRUE;
@@ -7972,16 +8016,17 @@ log_noop_revs(void *baton,
       if (paths_explicit_rangelist)
         {
           apr_array_header_t *intersecting_range;
+          apr_array_header_t *rangelist;
+
+          rangelist = svn_rangelist__initialize(revision - 1, revision, TRUE,
+                                                scratch_pool);
 
           /* If PATH inherited mergeinfo we must consider inheritance in the
              event the inherited mergeinfo is actually non-inheritable. */
           SVN_ERR(svn_rangelist_intersect(&intersecting_range,
                                           paths_explicit_rangelist,
-                                          svn_rangelist__initialize(
-                                            revision - 1,
-                                            revision, TRUE,
-                                            pool),
-                                          mergeinfo_inherited, pool));
+                                          rangelist,
+                                          mergeinfo_inherited, scratch_pool));
 
           if (intersecting_range->nelts == 0)
             log_entry_rev_required = TRUE;
@@ -7993,12 +8038,9 @@ log_noop_revs(void *baton,
     }
 
   if (!log_entry_rev_required)
-    SVN_ERR(svn_rangelist_merge(&(log_gap_baton->merged_ranges),
-                                svn_rangelist__initialize(revision - 1,
-                                                          revision,
-                                                          TRUE,
-                                                          log_gap_baton->pool),
-                                log_gap_baton->pool));
+    SVN_ERR(rangelist_merge_revision(log_gap_baton->merged_ranges,
+                                     revision,
+                                     log_gap_baton->pool));
 
   return SVN_NO_ERROR;
 }
@@ -8039,13 +8081,12 @@ remove_noop_subtree_ranges(const char *u
   apr_array_header_t *subtree_gap_ranges;
   apr_array_header_t *subtree_remaining_ranges;
   apr_array_header_t *log_targets;
-  apr_array_header_t *merged_ranges;
-  apr_array_header_t *operative_ranges;
   log_noop_baton_t log_gap_baton;
   svn_merge_range_t *oldest_gap_rev;
   svn_merge_range_t *youngest_gap_rev;
   apr_array_header_t *inoperative_ranges;
   const char *repos_root_url;
+  apr_pool_t *iterpool;
 
 
   /* This function is only intended to work with forward merges. */
@@ -8059,8 +8100,6 @@ remove_noop_subtree_ranges(const char *u
   subtree_remaining_ranges = apr_array_make(scratch_pool, 1,
                                             sizeof(svn_merge_range_t *));
   log_targets = apr_array_make(scratch_pool, 1, sizeof(const char *));
-  merged_ranges = apr_array_make(scratch_pool, 0, sizeof(svn_revnum_t *));
-  operative_ranges = apr_array_make(scratch_pool, 0, sizeof(svn_revnum_t *));
 
   /* Given the requested merge of REVISION1:REVISION2 might there be any
      part of this range required for subtrees but not for the target? */
@@ -8076,18 +8115,22 @@ remove_noop_subtree_ranges(const char *u
     return SVN_NO_ERROR;
 
   /* Create a rangelist describing every range required across all subtrees. */
+  iterpool = svn_pool_create(scratch_pool);
   for (i = 1; i < notify_b->children_with_mergeinfo->nelts; i++)
     {
       svn_client__merge_path_t *child =
         APR_ARRAY_IDX(notify_b->children_with_mergeinfo, i,
                       svn_client__merge_path_t *);
 
+      svn_pool_clear(iterpool);
+
       /* CHILD->REMAINING_RANGES will be NULL if child is absent. */
       if (child->remaining_ranges && child->remaining_ranges->nelts)
-        SVN_ERR(svn_rangelist_merge(&subtree_remaining_ranges,
-                                    child->remaining_ranges,
-                                    scratch_pool));
+        SVN_ERR(svn_rangelist_merge2(subtree_remaining_ranges,
+                                     child->remaining_ranges,
+                                     scratch_pool, iterpool));
     }
+  svn_pool_destroy(iterpool);
 
   /* It's possible that none of the subtrees had any remaining ranges. */
   if (!subtree_remaining_ranges->nelts)
@@ -8126,14 +8169,21 @@ remove_noop_subtree_ranges(const char *u
                     &(log_gap_baton.source_repos_abs), merge_b->ctx->wc_ctx,
                     url2, repos_root_url, TRUE, NULL,
                     result_pool, scratch_pool));
-  log_gap_baton.merged_ranges = merged_ranges;
-  log_gap_baton.operative_ranges = operative_ranges;
+  log_gap_baton.merged_ranges = apr_array_make(scratch_pool, 0,
+                                               sizeof(svn_revnum_t *));
+  log_gap_baton.operative_ranges = apr_array_make(scratch_pool, 0,
+                                                  sizeof(svn_revnum_t *));
   log_gap_baton.pool = svn_pool_create(scratch_pool);
 
   APR_ARRAY_PUSH(log_targets, const char *) = "";
 
-  SVN_ERR(svn_ra_get_log2(ra_session, log_targets, youngest_gap_rev->end,
-                          oldest_gap_rev->start + 1, 0, TRUE, TRUE, FALSE,
+  /* Invoke the svn_log_entry_receiver_t receiver log_noop_revs() from
+     oldest to youngest.  The receiver is optimized to add ranges to
+     log_gap_baton.merged_ranges and log_gap_baton.operative_ranges, but
+     requires that the revs arrive oldest to youngest -- see log_noop_revs()
+     and rangelist_merge_revision(). */
+  SVN_ERR(svn_ra_get_log2(ra_session, log_targets, oldest_gap_rev->start + 1,
+                          youngest_gap_rev->end, 0, TRUE, TRUE, FALSE,
                           apr_array_make(scratch_pool, 0,
                                          sizeof(const char *)),
                           log_noop_revs, &log_gap_baton, scratch_pool));
@@ -8145,8 +8195,8 @@ remove_noop_subtree_ranges(const char *u
                                log_gap_baton.operative_ranges,
                                inoperative_ranges, FALSE, scratch_pool));
 
-  SVN_ERR(svn_rangelist_merge(&(log_gap_baton.merged_ranges),
-                              inoperative_ranges, scratch_pool));
+  SVN_ERR(svn_rangelist_merge2(log_gap_baton.merged_ranges, inoperative_ranges,
+                               scratch_pool, scratch_pool));
 
   for (i = 1; i < notify_b->children_with_mergeinfo->nelts; i++)
     {
@@ -8166,6 +8216,8 @@ remove_noop_subtree_ranges(const char *u
         }
     }
 
+  svn_pool_destroy(log_gap_baton.pool);
+
   return SVN_NO_ERROR;
 }
 
@@ -8356,7 +8408,7 @@ do_directory_merge(svn_mergeinfo_catalog
           /* While END_REV is valid, do the following:
 
              1. Tweak each NOTIFY_B->CHILDREN_WITH_MERGEINFO element so that
-                the element's remaing_ranges member has as it's first element
+                the element's remaining_ranges member has as its first element
                 a range that ends with end_rev.
 
              2. Starting with start_rev, call drive_merge_report_editor()
@@ -9844,6 +9896,7 @@ find_unsynced_ranges(const char *source_
         {
           svn_mergeinfo_t mergeinfo = svn__apr_hash_index_val(hi_catalog);
           apr_hash_index_t *hi_mergeinfo;
+          apr_pool_t *iterpool = svn_pool_create(scratch_pool);
 
           for (hi_mergeinfo = apr_hash_first(scratch_pool, mergeinfo);
                hi_mergeinfo;
@@ -9852,9 +9905,11 @@ find_unsynced_ranges(const char *source_
               apr_array_header_t *rangelist =
                 svn__apr_hash_index_val(hi_mergeinfo);
 
-              SVN_ERR(svn_rangelist_merge(&potentially_unmerged_ranges,
-                                          rangelist, scratch_pool));
+              svn_pool_clear(iterpool);
+              SVN_ERR(svn_rangelist_merge2(potentially_unmerged_ranges,
+                                           rangelist, scratch_pool, iterpool));
             }
+          svn_pool_destroy(iterpool);
         }
     }