You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2012/09/25 21:06:52 UTC

svn commit: r1390054 [1/3] - in /subversion/branches/master-passphrase: ./ build/ build/generator/templates/ subversion/bindings/swig/ subversion/bindings/swig/perl/native/ subversion/bindings/swig/python/libsvn_swig_py/ subversion/bindings/swig/python...

Author: cmpilato
Date: Tue Sep 25 19:06:49 2012
New Revision: 1390054

URL: http://svn.apache.org/viewvc?rev=1390054&view=rev
Log:
Sync the 'master-passphrase' branch with recent trunk changes.
(Merged /subversion/trunk:r1383955-1390050.)

Added:
    subversion/branches/master-passphrase/tools/server-side/fsfs-reorg.c
      - copied unchanged from r1390050, subversion/trunk/tools/server-side/fsfs-reorg.c
Removed:
    subversion/branches/master-passphrase/tools/fsfs/
Modified:
    subversion/branches/master-passphrase/   (props changed)
    subversion/branches/master-passphrase/CHANGES
    subversion/branches/master-passphrase/build.conf
    subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcproj.ezt
    subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcxproj.ezt
    subversion/branches/master-passphrase/build/run_tests.py
    subversion/branches/master-passphrase/configure.ac
    subversion/branches/master-passphrase/subversion/bindings/swig/perl/native/Makefile.PL.in
    subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
    subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
    subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/delta.py
    subversion/branches/master-passphrase/subversion/bindings/swig/svn_delta.i
    subversion/branches/master-passphrase/subversion/include/private/svn_client_private.h
    subversion/branches/master-passphrase/subversion/include/svn_client.h
    subversion/branches/master-passphrase/subversion/include/svn_diff.h
    subversion/branches/master-passphrase/subversion/include/svn_io.h
    subversion/branches/master-passphrase/subversion/include/svn_mergeinfo.h
    subversion/branches/master-passphrase/subversion/include/svn_types.h
    subversion/branches/master-passphrase/subversion/include/svn_wc.h
    subversion/branches/master-passphrase/subversion/include/svn_xml.h
    subversion/branches/master-passphrase/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
    subversion/branches/master-passphrase/subversion/libsvn_client/commit.c
    subversion/branches/master-passphrase/subversion/libsvn_client/merge.c
    subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c
    subversion/branches/master-passphrase/subversion/libsvn_fs_base/tree.c
    subversion/branches/master-passphrase/subversion/libsvn_fs_fs/tree.c
    subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c
    subversion/branches/master-passphrase/subversion/libsvn_subr/gpg_agent.c
    subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.c
    subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.h
    subversion/branches/master-passphrase/subversion/libsvn_wc/entries.c
    subversion/branches/master-passphrase/subversion/libsvn_wc/lock.c
    subversion/branches/master-passphrase/subversion/libsvn_wc/update_editor.c
    subversion/branches/master-passphrase/subversion/libsvn_wc/upgrade.c
    subversion/branches/master-passphrase/subversion/libsvn_wc/wc-metadata.sql
    subversion/branches/master-passphrase/subversion/libsvn_wc/wc-queries.sql
    subversion/branches/master-passphrase/subversion/libsvn_wc/wc.h
    subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.c
    subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.h
    subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db_wcroot.c
    subversion/branches/master-passphrase/subversion/mod_authz_svn/mod_authz_svn.c
    subversion/branches/master-passphrase/subversion/mod_dav_svn/repos.c
    subversion/branches/master-passphrase/subversion/svn/cl.h
    subversion/branches/master-passphrase/subversion/svn/conflict-callbacks.c
    subversion/branches/master-passphrase/subversion/svn/file-merge.c
    subversion/branches/master-passphrase/subversion/svn/log-cmd.c
    subversion/branches/master-passphrase/subversion/svn/main.c
    subversion/branches/master-passphrase/subversion/svn/merge-cmd.c
    subversion/branches/master-passphrase/subversion/svn/mergeinfo-cmd.c
    subversion/branches/master-passphrase/subversion/svn/status-cmd.c
    subversion/branches/master-passphrase/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
    subversion/branches/master-passphrase/subversion/tests/cmdline/log_tests.py
    subversion/branches/master-passphrase/subversion/tests/cmdline/mergeinfo_tests.py
    subversion/branches/master-passphrase/subversion/tests/cmdline/patch_tests.py
    subversion/branches/master-passphrase/subversion/tests/cmdline/prop_tests.py
    subversion/branches/master-passphrase/subversion/tests/cmdline/resolve_tests.py
    subversion/branches/master-passphrase/subversion/tests/cmdline/stat_tests.py
    subversion/branches/master-passphrase/subversion/tests/cmdline/svntest/actions.py
    subversion/branches/master-passphrase/subversion/tests/cmdline/svntest/main.py
    subversion/branches/master-passphrase/subversion/tests/libsvn_wc/db-test.c
    subversion/branches/master-passphrase/subversion/tests/libsvn_wc/entries-compat.c
    subversion/branches/master-passphrase/subversion/tests/libsvn_wc/op-depth-test.c
    subversion/branches/master-passphrase/tools/dev/unix-build/Makefile.svn
    subversion/branches/master-passphrase/tools/dist/make-deps-tarball.sh   (contents, props changed)
    subversion/branches/master-passphrase/tools/server-side/   (props changed)
    subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnwcsub.py

Propchange: subversion/branches/master-passphrase/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Sep 25 19:06:49 2012
@@ -37,6 +37,7 @@ subversion_msvc.plg
 subversion_vcnet.sln
 subversion_vcnet.ncb
 subversion_vcnet.suo
+subversion_vcnet.v11.suo
 subversion_vcnet.sdf
 subversion_vcnet.opensdf
 mkmf.log

Propchange: subversion/branches/master-passphrase/
------------------------------------------------------------------------------
  Merged /subversion/trunk:r1383955-1390050

Modified: subversion/branches/master-passphrase/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/CHANGES?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/CHANGES (original)
+++ subversion/branches/master-passphrase/CHANGES Tue Sep 25 19:06:49 2012
@@ -25,10 +25,11 @@ http://svn.apache.org/repos/asf/subversi
     * 'svn diff' can compare arbitrary files and directories (r1310291, et al)
     * ra_serf avoids re-downloading content present in pristine store (r1333936)
     * 'svn mergeinfo' now honors the --revision (-r) option (issue #4199)
-    * new --search and --isearch options for 'svn log' (r1354666, -830)
-    * new --search-and and --isearch-and options for 'svn log' (r1383518)
+    * new --search and --search-and options for 'svn log' (r1354666, -83518)
     * new built-in interactive text conflict merge tool (r1357864, et al)
     * new 'svn --version --verbose' option shows runtime environment info
+    * new 'svnadmin freeze' subcommand (r1376228)
+    * 'svndumpfilter' now supports --delta dumpfiles (r1351009, -3745)
 
   - Client-side bugfixes:
     *
@@ -47,7 +48,7 @@ http://svn.apache.org/repos/asf/subversi
     * fix inconsistent handling of log revs without changed paths (issue #3694)
 
   - Bindings:
-    *
+    * star-imports in swig-py only import 'svn_*' symbols (r1303375)
 
 
 Version 1.7.6

Modified: subversion/branches/master-passphrase/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/build.conf?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/build.conf (original)
+++ subversion/branches/master-passphrase/build.conf Tue Sep 25 19:06:49 2012
@@ -1180,7 +1180,7 @@ libs = __ALL__
        ra-local-test
        svndiff-test vdelta-test
        entries-dump atomic-ra-revprop-change wc-lock-tester wc-incomplete-tester
-       diff diff3 diff4 reorg-fsfs
+       diff diff3 diff4 fsfs-reorg
        client-test
        conflict-data-test db-test pristine-store-test entries-compat-test
        op-depth-test dirent_uri-test wc-queries-test
@@ -1229,10 +1229,10 @@ libs = __JAVAHL__ javahl-tests javahl-co
 # ----------------------------------------------------------------------------
 # Contrib and tools
 
-[reorg-fsfs]
+[fsfs-reorg]
 type = exe
-path = tools/fsfs
-sources = reorg.c
+path = tools/server-side
+sources = fsfs-reorg.c
 install = tools
 libs = libsvn_delta libsvn_subr apr
 

Modified: subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcproj.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcproj.ezt?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcproj.ezt (original)
+++ subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcproj.ezt Tue Sep 25 19:06:49 2012
@@ -31,9 +31,9 @@
 	<Configurations>
 [for platforms][for configs]		<Configuration
 			Name="[configs]|[platforms]"
-			OutputDirectory="..\..\[configs]\mo"
+			OutputDirectory="..\..\..\[configs]\mo"
 			BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
-			IntermediateDirectory="..\..\[configs]\mo"
+			IntermediateDirectory="..\..\..\[configs]\mo"
 			ConfigurationType="0"
 			UseOfMFC="0"
 			ATLMinimizesCRunTimeLibraryUsage="FALSE">

Modified: subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcxproj.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcxproj.ezt?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcxproj.ezt (original)
+++ subversion/branches/master-passphrase/build/generator/templates/svn_locale.vcxproj.ezt Tue Sep 25 19:06:49 2012
@@ -44,8 +44,8 @@
   </ImportGroup>
 [end][end]  <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
-[for configs][for platforms]    <OutDir Condition="'$(Configuration)|$(Platform)'=='[configs]|[platforms]'">..\..\[configs]\mo\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='[configs]|[platforms]'">..\..\[configs]\mo\</IntDir>
+[for configs][for platforms]    <OutDir Condition="'$(Configuration)|$(Platform)'=='[configs]|[platforms]'">..\..\..\[configs]\mo\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='[configs]|[platforms]'">..\..\..\[configs]\mo\</IntDir>
     <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='[configs]|[platforms]'">cmd /c build_locale.bat [configs]</NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='[configs]|[platforms]'">cmd /c build_locale.bat [configs]</NMakeReBuildCommandLine>
     <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='[configs]|[platforms]'">cmd /c del $(OutDir)*.mo</NMakeCleanCommandLine>

Modified: subversion/branches/master-passphrase/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/build/run_tests.py?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/build/run_tests.py (original)
+++ subversion/branches/master-passphrase/build/run_tests.py Tue Sep 25 19:06:49 2012
@@ -45,7 +45,7 @@ separated list of test numbers; the defa
 # A few useful constants
 SVN_VER_MINOR = 8
 
-import os, re, subprocess, sys, imp
+import os, re, subprocess, sys, imp, threading
 from datetime import datetime
 
 import getopt
@@ -383,12 +383,13 @@ class TestHarness:
     # This has to be class-scoped for use in the progress_func()
     self.dots_written = 0
     def progress_func(completed):
+      if not self.log or self.dots_written >= dot_count:
+        return
       dots = (completed * dot_count) / total
-
+      if dots > dot_count:
+        dots = dot_count
       dots_to_write = dots - self.dots_written
-      if self.log:
-        os.write(sys.stdout.fileno(), '.' * dots_to_write)
-
+      os.write(sys.stdout.fileno(), '.' * dots_to_write)
       self.dots_written = dots
 
     tests_completed = 0
@@ -484,21 +485,28 @@ class TestHarness:
       sys.stdout.flush()
       sys.stderr.flush()
       self.log.flush()
-      old_stdout = os.dup(1)
-      old_stderr = os.dup(2)
-      os.dup2(self.log.fileno(), 1)
-      os.dup2(self.log.fileno(), 2)
+      old_stdout = os.dup(sys.stdout.fileno())
+      old_stderr = os.dup(sys.stderr.fileno())
+      os.dup2(self.log.fileno(), sys.stdout.fileno())
+      os.dup2(self.log.fileno(), sys.stderr.fileno())
 
-    # This has to be class-scoped for use in the progress_func()
+    # These have to be class-scoped for use in the progress_func()
     self.dots_written = 0
+    self.progress_lock = threading.Lock()
     def progress_func(completed, total):
+      """Report test suite progress. Can be called from multiple threads
+         in parallel mode."""
+      if not self.log:
+        return
       dots = (completed * dot_count) / total
-
-      dots_to_write = dots - self.dots_written
-      if self.log:
+      if dots > dot_count:
+        dots = dot_count
+      self.progress_lock.acquire()
+      if self.dots_written < dot_count:
+        dots_to_write = dots - self.dots_written
+        self.dots_written = dots
         os.write(old_stdout, '.' * dots_to_write)
-
-      self.dots_written = dots
+      self.progress_lock.release()
 
     serial_only = hasattr(prog_mod, 'serial_only') and prog_mod.serial_only
 
@@ -531,8 +539,8 @@ class TestHarness:
     if self.log:
       sys.stdout.flush()
       sys.stderr.flush()
-      os.dup2(old_stdout, 1)
-      os.dup2(old_stderr, 2)
+      os.dup2(old_stdout, sys.stdout.fileno())
+      os.dup2(old_stderr, sys.stderr.fileno())
       os.close(old_stdout)
       os.close(old_stderr)
 

Modified: subversion/branches/master-passphrase/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/configure.ac?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/configure.ac (original)
+++ subversion/branches/master-passphrase/configure.ac Tue Sep 25 19:06:49 2012
@@ -545,9 +545,7 @@ AS_HELP_STRING([--without-gpg-agent], 
                [Disable support for GPG-Agent]),
                [], [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
+if test "$with_gpg_agent" = "yes"; then
   AC_MSG_RESULT([yes])
   AC_DEFINE([SVN_HAVE_GPG_AGENT], [1], 
             [Is GPG Agent support enabled?])
@@ -561,10 +559,11 @@ dnl GNOME Keyring -------------------
 
 AC_ARG_WITH(gnome_keyring,
   AS_HELP_STRING([--with-gnome-keyring], 
-                 [Enable use of GNOME Keyring for auth credentials]),
+                 [Enable use of GNOME Keyring for auth credentials (enabled by default if found)]),
                  [with_gnome_keyring="$withval"],
-                 [with_gnome_keyring=no])
+                 [with_gnome_keyring=auto])
 
+found_gnome_keyring=no
 AC_MSG_CHECKING([whether to look for GNOME Keyring])
 if test "$with_gnome_keyring" != "no"; then
   AC_MSG_RESULT([yes])
@@ -577,9 +576,9 @@ if test "$with_gnome_keyring" != "no"; t
           old_CPPFLAGS="$CPPFLAGS"
           SVN_GNOME_KEYRING_INCLUDES="`$PKG_CONFIG --cflags glib-2.0 gnome-keyring-1`"
           CPPFLAGS="$CPPFLAGS $SVN_GNOME_KEYRING_INCLUDES"
-          AC_CHECK_HEADER(gnome-keyring.h, with_gnome_keyring=yes, with_gnome_keyring=no)
+          AC_CHECK_HEADER(gnome-keyring.h, found_gnome_keyring=yes, found_gnome_keyring=no)
           AC_MSG_CHECKING([for GNOME Keyring])
-          if test "$with_gnome_keyring" = "yes"; then
+          if test "$found_gnome_keyring" = "yes"; then
             AC_MSG_RESULT([yes])
             AC_DEFINE([SVN_HAVE_GNOME_KEYRING], [1], 
                       [Is GNOME Keyring support enabled?])
@@ -587,20 +586,38 @@ if test "$with_gnome_keyring" != "no"; t
             SVN_GNOME_KEYRING_LIBS="`$PKG_CONFIG --libs glib-2.0 gnome-keyring-1`"
           else
             AC_MSG_RESULT([no])
-            AC_MSG_ERROR([cannot find GNOME Keyring])
+            if test "$with_gnome_keyring" = "yes"; then
+              AC_MSG_ERROR([cannot find GNOME Keyring])
+            fi
           fi
         else
           AC_MSG_RESULT([no])
-          AC_MSG_ERROR([cannot find GLib and GNOME Keyring .pc files])
+          if test "$with_gnome_keyring" = "yes"; then
+            AC_MSG_ERROR([cannot find GLib and GNOME Keyring .pc files.])
+          else
+            with_gnome_keyring=no
+          fi
         fi
       else
-        AC_MSG_ERROR([cannot find pkg-config])
+        if test "$with_gnome_keyring" = "yes"; then
+          AC_MSG_ERROR([cannot find pkg-config. GNOME Keyring requires this.])
+        else
+          with_gnome_keyring=no
+        fi
       fi
     else
-      AC_MSG_ERROR([APR does not have support for DSOs])
+      if test "$with_gnome_keyring" = "yes"; then
+        AC_MSG_ERROR([APR does not have support for DSOs. GNOME Keyring requires this.])
+      else
+        with_gnome_keyring=no
+      fi
     fi
   else
-    AC_MSG_ERROR([--with-gnome-keyring conflicts with --disable-shared])
+    if test "$with_gnome_keyring" = "yes"; then
+      AC_MSG_ERROR([--with-gnome-keyring conflicts with --disable-shared])
+    else
+      with_gnome_keyring=no
+    fi
   fi
 else
   AC_MSG_RESULT([no])
@@ -812,7 +829,7 @@ if test "$svn_lib_kwallet" = "yes"; then
   INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-kwallet-lib"
 fi
 
-if test "$with_gnome_keyring" = "yes"; then
+if test "$found_gnome_keyring" = "yes"; then
   BUILD_RULES="$BUILD_RULES gnome-keyring-lib"
   INSTALL_RULES="`echo $INSTALL_RULES | $SED 's/install-lib/install-lib install-gnome-keyring-lib/'`"
   INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-gnome-keyring-lib"

Modified: subversion/branches/master-passphrase/subversion/bindings/swig/perl/native/Makefile.PL.in
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/swig/perl/native/Makefile.PL.in?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/swig/perl/native/Makefile.PL.in (original)
+++ subversion/branches/master-passphrase/subversion/bindings/swig/perl/native/Makefile.PL.in Tue Sep 25 19:06:49 2012
@@ -49,6 +49,11 @@ my $cppflags = '@CPPFLAGS@';
 my $cflags = '@CFLAGS@';
 my $includes = '@SVN_APR_INCLUDES@ @SVN_APRUTIL_INCLUDES@';
 
+# Avoid this bug in SWIG:
+# https://sourceforge.net/tracker/?func=detail&aid=3571361&group_id=1645&atid=101645
+# SWIG is using C++ style comments in an extern "C" code.
+$cflags =~ s/-ansi\s+//g;
+
 # According to the log of r7937, the flags guarded by the conditional break
 # the build on FreeBSD if not conditionalized.
 my $apr_ldflags = '@SVN_APR_LIBS@'

Modified: subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (original)
+++ subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c Tue Sep 25 19:06:49 2012
@@ -2159,6 +2159,24 @@ svn_swig_py_make_stream(PyObject *py_io,
   return stream;
 }
 
+PyObject *
+svn_swig_py_convert_txdelta_op_c_array(int num_ops,
+                                       svn_txdelta_op_t *ops,
+                                       swig_type_info *op_type_info,
+                                       PyObject *parent_pool)
+{
+  PyObject *result = PyList_New(num_ops);
+  int i;
+
+  if (!result) return NULL;
+
+  for (i = 0; i < num_ops; ++i)
+      PyList_SET_ITEM(result, i,
+                      svn_swig_NewPointerObj(ops + i, op_type_info,
+                                             parent_pool, NULL));
+
+  return result;
+}
 
 void svn_swig_py_notify_func(void *baton,
                              const char *path,
@@ -4173,19 +4191,3 @@ svn_swig_py_setup_wc_diff_callbacks2(voi
   callbacks->dir_props_changed  = wc_diff_callbacks2_dir_props_changed;
   return callbacks;
 }
-
-PyObject *
-svn_swig_py_txdelta_window_t_ops_get(svn_txdelta_window_t *window,
-                                     swig_type_info * op_type_info,
-                                     PyObject *window_pool)
-{
-  PyObject *result = PyList_New(window->num_ops);
-  int i;
-
-  for (i = 0; i < window->num_ops; ++i)
-      PyList_SET_ITEM(result, i,
-                      svn_swig_NewPointerObj(window->ops + i, op_type_info,
-                                             window_pool, NULL));
-
-  return result;
-}

Modified: subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (original)
+++ subversion/branches/master-passphrase/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h Tue Sep 25 19:06:49 2012
@@ -299,6 +299,15 @@ SVN_SWIG_SWIGUTIL_EXPORT
 svn_stream_t *svn_swig_py_make_stream(PyObject *py_io,
                                       apr_pool_t *pool);
 
+/* Convert ops, a C array of num_ops elements, to a Python list of SWIG
+   objects with descriptor op_type_info and pool set to parent_pool. */
+SVN_SWIG_SWIGUTIL_EXPORT
+PyObject *
+svn_swig_py_convert_txdelta_op_c_array(int num_ops,
+                                       svn_txdelta_op_t *ops,
+                                       swig_type_info * op_type_info,
+                                       PyObject *parent_pool);
+
 /* a notify function that executes a Python function that is passed in
    via the baton argument */
 SVN_SWIG_SWIGUTIL_EXPORT
@@ -520,17 +529,6 @@ svn_error_t *svn_swig_py_ra_lock_callbac
 SVN_SWIG_SWIGUTIL_EXPORT
 extern const svn_ra_reporter2_t swig_py_ra_reporter2;
 
-/* Get a list of ops from a window. Used to replace the naive
-   svn_txdelta_window_t.ops accessor. op_type_info is supposed to be
-   the SWIG descriptor of "svn_txdelta_op_t *". window_pool is supposed
-   to be the pool associated with the window proxy and used for wrapping
-   the op objects. */
-SVN_SWIG_SWIGUTIL_EXPORT
-PyObject *
-svn_swig_py_txdelta_window_t_ops_get(svn_txdelta_window_t *window,
-                                     swig_type_info * op_type_info,
-                                     PyObject *window_pool);
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/delta.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/delta.py?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/delta.py (original)
+++ subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/delta.py Tue Sep 25 19:06:49 2012
@@ -30,10 +30,6 @@ _unprefix_names(locals(), 'svn_txdelta_'
 __all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
 del _unprefix_names
 
-# Force our accessor since it appears that there isn't a more civilized way
-# to make SWIG use it.
-svn_txdelta_window_t.ops = property(svn_txdelta_window_t_ops_get)
-
 class Editor:
 
   def set_target_revision(self, target_revision, pool=None):

Modified: subversion/branches/master-passphrase/subversion/bindings/swig/svn_delta.i
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/swig/svn_delta.i?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/swig/svn_delta.i (original)
+++ subversion/branches/master-passphrase/subversion/bindings/swig/svn_delta.i Tue Sep 25 19:06:49 2012
@@ -174,61 +174,47 @@ svn_txdelta_window_t_ops_get(svn_txdelta
 
 #ifdef SWIGPYTHON
 %ignore svn_txdelta_window_t::ops;
-%inline %{
-static PyObject *
-svn_txdelta_window_t_ops_get(PyObject *window_ob)
+%extend svn_txdelta_window_t {
+
+void _ops_get(int *num_ops, svn_txdelta_op_t **ops)
 {
-  void *window;
-  PyObject *ops_list, *window_pool;
-  int status;
-  
-  /* Kludge alert!
-     Normally, these kinds of conversions would belong in a typemap.
-     However, typemaps won't allow us to change the result type to an array,
-     so we have to make this custom accessor function.
-     A cleaner approach would be to use something like: 
-     
-     %extend svn_txdelta_window_t { void get_ops(apr_array_header_t ** ops); }
-     
-     But that means unnecessary copying, plus more hacks to get the pool for the
-     array and for wrapping the individual op objects. So we just don't bother.
-  */
+  *num_ops = self->num_ops;
+  *ops = self->ops;
+}
+
+%pythoncode {
+  ops = property(_ops_get)
+}
+}
+
+%typemap(argout) (int *num_ops, svn_txdelta_op_t **ops) {
+  apr_pool_t *parent_pool;
+  PyObject *parent_py_pool;
+  PyObject *ops_list;
   
-  /* Note: the standard svn-python typemap releases the GIL while calling the
-     wrapped function, but this function does Python stuff, so we have to
-     reacquire it again. */
-  svn_swig_py_acquire_py_lock();
-  status = svn_swig_ConvertPtr(window_ob, &window,
-    SWIG_TypeQuery("svn_txdelta_window_t *"));
-    
-  if (status != 0)
-    {
-      PyErr_SetString(PyExc_TypeError,
-                      "expected an svn_txdelta_window_t* proxy");
-      svn_swig_py_release_py_lock();
-      return NULL;
-    }
-    
-  window_pool = PyObject_GetAttrString(window_ob, "_parent_pool");
-
-  if (window_pool == NULL)
-    {
-      svn_swig_py_release_py_lock();
-      return NULL;
-    }
-    
-  ops_list = svn_swig_py_txdelta_window_t_ops_get(window,
-    SWIG_TypeQuery("svn_txdelta_op_t *"), window_pool);
-    
-  svn_swig_py_release_py_lock();
+  if (svn_swig_py_get_parent_pool(args, $descriptor(apr_pool_t *),
+                                  &parent_py_pool, &parent_pool))
+    SWIG_fail;
   
-  return ops_list;
+  ops_list = svn_swig_py_convert_txdelta_op_c_array(*$1, *$2,
+    $descriptor(svn_txdelta_op_t *), parent_py_pool);
+
+  if (!ops_list) SWIG_fail;
+
+  %append_output(ops_list);
 }
-%}
 #endif
 
 %include svn_delta_h.swg
 
+#ifdef SWIGPYTHON
+%pythoncode {
+# This function is for backwards compatibility only.
+# Use svn_txdelta_window_t.ops instead.
+svn_txdelta_window_t_ops_get = svn_txdelta_window_t._ops_get
+}
+#endif
+
 #ifdef SWIGRUBY
 %inline %{
 static VALUE

Modified: subversion/branches/master-passphrase/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/private/svn_client_private.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/master-passphrase/subversion/include/private/svn_client_private.h Tue Sep 25 19:06:49 2012
@@ -180,11 +180,7 @@ svn_client__wc_node_get_origin(svn_clien
 
 
 /* Details of a symmetric merge. */
-typedef struct svn_client__symmetric_merge_t
-{
-  svn_client__pathrev_t *yca, *base, *mid, *right;
-  svn_boolean_t allow_mixed_rev, allow_local_mods, allow_switched_subtrees;
-} svn_client__symmetric_merge_t;
+typedef struct svn_client__symmetric_merge_t svn_client__symmetric_merge_t;
 
 /* Find the information needed to merge all unmerged changes from a source
  * branch into a target branch.  The information is the locations of the
@@ -206,6 +202,45 @@ svn_client__find_symmetric_merge(svn_cli
                                  apr_pool_t *result_pool,
                                  apr_pool_t *scratch_pool);
 
+/* Find out what kind of symmetric merge would be needed, when the target
+ * is only known as a repository location rather than a WC.
+ *
+ * Like svn_client__find_symmetric_merge() except that SOURCE_PATH_OR_URL @
+ * SOURCE_REVISION should refer to a repository location and not a WC.
+ *
+ * ### The result, *MERGE_P, may not be suitable for passing to
+ * svn_client__do_symmetric_merge().  The target WC state would not be
+ * checked (as in the ALLOW_* flags).  We should resolve this problem:
+ * perhaps add the allow_* params here, or provide another way of setting
+ * them; and perhaps ensure __do_...() will accept the result iff given a
+ * WC that matches the stored target location.
+ */
+svn_error_t *
+svn_client__find_symmetric_merge_no_wc(
+                                 svn_client__symmetric_merge_t **merge_p,
+                                 const char *source_path_or_url,
+                                 const svn_opt_revision_t *source_revision,
+                                 const char *target_path_or_url,
+                                 const svn_opt_revision_t *target_revision,
+                                 svn_client_ctx_t *ctx,
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool);
+
+/* Set *YCA, *BASE, *RIGHT, *TARGET to the repository locations of the
+ * youngest common ancestor of the branches, the base chosen for 3-way
+ * merge, the right-hand side of the source diff, and the target WC.
+ *
+ * Any of the output pointers may be NULL if not wanted.
+ */
+svn_error_t *
+svn_client__symmetric_merge_get_locations(
+                                svn_client__pathrev_t **yca,
+                                svn_client__pathrev_t **base,
+                                svn_client__pathrev_t **right,
+                                svn_client__pathrev_t **target,
+                                const svn_client__symmetric_merge_t *merge,
+                                apr_pool_t *result_pool);
+
 /* Perform a symmetric merge.
  *
  * Merge according to MERGE into the WC at TARGET_WCPATH.
@@ -231,6 +266,17 @@ svn_client__do_symmetric_merge(const svn
                                svn_client_ctx_t *ctx,
                                apr_pool_t *scratch_pool);
 
+/* Return TRUE iff the symmetric merge represented by MERGE is going to be
+ * a reintegrate-like merge: that is, merging in the opposite direction
+ * from the last full merge.
+ *
+ * This function exists because the merge is NOT really symmetric and the
+ * client can be more friendly if it knows something about the differences.
+ */
+svn_boolean_t
+svn_client__symmetric_merge_is_reintegrate_like(
+        const svn_client__symmetric_merge_t *merge);
+
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/master-passphrase/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_client.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_client.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_client.h Tue Sep 25 19:06:49 2012
@@ -1046,7 +1046,7 @@ svn_client_args_to_target_array2(apr_arr
                                  svn_boolean_t keep_last_origpath_on_truepath_collision,
                                  apr_pool_t *pool);
 
-/*
+/**
  * Similar to svn_client_args_to_target_array2() but with
  * @a keep_last_origpath_on_truepath_collision always set to FALSE.
  *
@@ -3713,6 +3713,15 @@ svn_client_mergeinfo_get_merged(apr_hash
  * @a target_path_or_url (as of @a target_peg_revision).  If @a
  * finding_merged is FALSE then find the revisions eligible for merging.
  *
+ * @a source_start_revision and @a source_end_revision bound the
+ * operative range of revisions of the merge source which are
+ * described to the caller.  If @a source_end_revision is of kind
+ * @c svn_opt_revision_unspecified, it is interpreted as the same
+ * revision as @a source_start_revision.  If both are of kind
+ * @c svn_opt_revision_unspecified, no bounding occurs and the entire
+ * history of the merge source (up to @a source_peg_revision, per the
+ * typical default peg/operative revision behaviors) is considered.
+ *
  * If @a depth is #svn_depth_empty consider only the explicit or
  * inherited mergeinfo on @a target_path_or_url when calculating merged
  * revisions from @a source_path_or_url.  If @a depth is #svn_depth_infinity

Modified: subversion/branches/master-passphrase/subversion/include/svn_diff.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_diff.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_diff.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_diff.h Tue Sep 25 19:06:49 2012
@@ -1063,12 +1063,12 @@ typedef struct svn_patch_t {
   svn_boolean_t reverse;
 } svn_patch_t;
 
-/* An opaque type representing an open patch file.
+/** An opaque type representing an open patch file.
  *
  * @since New in 1.7. */
 typedef struct svn_patch_file_t svn_patch_file_t;
 
-/* Open @a patch_file at @a local_abspath.
+/** Open @a patch_file at @a local_abspath.
  * Allocate @a patch_file in @a result_pool.
  *
  * @since New in 1.7. */

Modified: subversion/branches/master-passphrase/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_io.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_io.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_io.h Tue Sep 25 19:06:49 2012
@@ -1155,9 +1155,9 @@ svn_stream_write(svn_stream_t *stream,
 svn_error_t *
 svn_stream_close(svn_stream_t *stream);
 
-/** Reset a generic stream back to its origin. E.g. On a file this would be
+/** Reset a generic stream back to its origin. (E.g. On a file this would be
  * implemented as a seek to position 0).  This function returns a
- * #SVN_ERR_STREAM_RESET_NOT_SUPPORTED error when the stream doesn't
+ * #SVN_ERR_STREAM_SEEK_NOT_SUPPORTED error when the stream doesn't
  * implement resetting.
  *
  * @since New in 1.7.
@@ -2200,9 +2200,9 @@ svn_io_write_version_file(const char *pa
                           int version,
                           apr_pool_t *pool);
 
-/* Read a line of text from a file, up to a specified length.
+/** Read a line of text from a file, up to a specified length.
  *
- * Allocate @a *stringbuf in @a result_pool, and read into it one line 
+ * Allocate @a *stringbuf in @a result_pool, and read into it one line
  * from @a file. Reading stops either after a line-terminator was found
  * or after @a max_len bytes have been read.
  *

Modified: subversion/branches/master-passphrase/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_mergeinfo.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_mergeinfo.h Tue Sep 25 19:06:49 2012
@@ -332,6 +332,7 @@ svn_rangelist_merge2(svn_rangelist_t *ra
  * if called in a loop.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
  */
 SVN_DEPRECATED
 svn_error_t *

Modified: subversion/branches/master-passphrase/subversion/include/svn_types.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_types.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_types.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_types.h Tue Sep 25 19:06:49 2012
@@ -509,7 +509,7 @@ svn_depth_to_word(svn_depth_t depth);
 svn_depth_t
 svn_depth_from_word(const char *word);
 
-/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+/** Return #svn_depth_infinity if boolean @a recurse is TRUE, else
  * return #svn_depth_files.
  *
  * @note New code should never need to use this, it is called only
@@ -520,7 +520,7 @@ svn_depth_from_word(const char *word);
 #define SVN_DEPTH_INFINITY_OR_FILES(recurse) \
   ((recurse) ? svn_depth_infinity : svn_depth_files)
 
-/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+/** Return #svn_depth_infinity if boolean @a recurse is TRUE, else
  * return #svn_depth_immediates.
  *
  * @note New code should never need to use this, it is called only
@@ -531,7 +531,7 @@ svn_depth_from_word(const char *word);
 #define SVN_DEPTH_INFINITY_OR_IMMEDIATES(recurse) \
   ((recurse) ? svn_depth_infinity : svn_depth_immediates)
 
-/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+/** Return #svn_depth_infinity if boolean @a recurse is TRUE, else
  * return #svn_depth_empty.
  *
  * @note New code should never need to use this, it is called only
@@ -542,7 +542,7 @@ svn_depth_from_word(const char *word);
 #define SVN_DEPTH_INFINITY_OR_EMPTY(recurse) \
   ((recurse) ? svn_depth_infinity : svn_depth_empty)
 
-/* Return a recursion boolean based on @a depth.
+/** Return a recursion boolean based on @a depth.
  *
  * Although much code has been converted to use depth, some code still
  * takes a recurse boolean.  In most cases, it makes sense to treat
@@ -1261,7 +1261,7 @@ svn_location_segment_dup(const svn_locat
  */
 typedef unsigned long svn_linenum_t;
 
-/* The maximum value of an svn_linenum_t.
+/** The maximum value of an svn_linenum_t.
  *
  * @since New in 1.7.
  */

Modified: subversion/branches/master-passphrase/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_wc.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_wc.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_wc.h Tue Sep 25 19:06:49 2012
@@ -828,7 +828,7 @@ svn_error_t *
 svn_wc_external_item2_create(svn_wc_external_item2_t **item,
                              apr_pool_t *pool);
 
-/* Same as svn_wc_external_item2_create() except the pointer to the new
+/** Same as svn_wc_external_item2_create() except the pointer to the new
  * empty item is 'const' which is stupid since the next thing you need to do
  * is fill in its fields.
  *
@@ -1142,7 +1142,7 @@ typedef enum svn_wc_notify_action_t
   /** The mergeinfo on path was updated.  @since New in 1.7. */
   svn_wc_notify_merge_record_info,
 
-  /** An working copy directory was upgraded to the latest format
+  /** A working copy directory was upgraded to the latest format.
    * @since New in 1.7. */
   svn_wc_notify_upgraded_path,
 
@@ -1950,7 +1950,7 @@ svn_wc_conflict_description_create_text(
  *
  * Set the @c local_abspath field of the created struct to @a local_abspath
  * (which must be an absolute path), the @c kind field
- * to #svn_wc_conflict_kind_prop, the @c node_kind to @a node_kind, and
+ * to #svn_wc_conflict_kind_property, the @c node_kind to @a node_kind, and
  * the @c property_name to @a property_name.
  *
  * @note: It is the caller's responsibility to set the other required fields
@@ -3725,7 +3725,7 @@ typedef struct svn_wc_status3_t
    * @since New in 1.8. */
   const char *moved_to_abspath;
 
-  /* TRUE iff the item is a file brought in by an svn:externals definition.
+  /** TRUE iff the item is a file brought in by an svn:externals definition.
    * @since New in 1.8. */
   svn_boolean_t file_external;
 
@@ -7058,7 +7058,7 @@ typedef svn_error_t * (*svn_wc_upgrade_g
  * (typically #SVN_ERR_CANCELLED), return that error immediately.
  *
  * For each directory converted, @a notify_func will be called with
- * in @a notify_baton action #svn_wc_notify_upgrade_path and as path
+ * in @a notify_baton action #svn_wc_notify_upgraded_path and as path
  * the path of the upgraded directory. @a notify_func may be @c NULL
  * if this notification is not needed.
  *
@@ -7844,7 +7844,8 @@ svn_wc_set_changelist(const char *path,
 
 
 /**
- * The callback type used by svn_client_get_changelists().
+ * The callback type used by svn_wc_get_changelists() and
+ * svn_client_get_changelists().
  *
  * On each invocation, @a path is a newly discovered member of the
  * changelist, and @a baton is a private function closure.
@@ -7857,7 +7858,10 @@ typedef svn_error_t *(*svn_changelist_re
                                                    apr_pool_t *pool);
 
 
-/* @since New in 1.7.
+/**
+ * ### TODO: Doc string, please.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
 svn_wc_get_changelists(svn_wc_context_t *wc_ctx,

Modified: subversion/branches/master-passphrase/subversion/include/svn_xml.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_xml.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_xml.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_xml.h Tue Sep 25 19:06:49 2012
@@ -297,7 +297,10 @@ svn_xml_make_header2(svn_stringbuf_t **s
                      const char *encoding,
                      apr_pool_t *pool);
 
-/* Like svn_xml_make_header2, but does not emit encoding information. */
+/** Like svn_xml_make_header2(), but does not emit encoding information.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
 SVN_DEPRECATED
 void
 svn_xml_make_header(svn_stringbuf_t **str,

Modified: subversion/branches/master-passphrase/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c Tue Sep 25 19:06:49 2012
@@ -28,6 +28,7 @@
 /*** Includes. ***/
 
 #include <apr_pools.h>
+#include <apr_strings.h>
 #include "svn_auth.h"
 #include "svn_config.h"
 #include "svn_error.h"
@@ -138,9 +139,9 @@ callback_default_keyring(GnomeKeyringRes
   return;
 }
 
-/* Returns the default keyring name. */
+/* Returns the default keyring name, allocated in RESULT_POOL. */
 static char*
-get_default_keyring_name(apr_pool_t *pool)
+get_default_keyring_name(apr_pool_t *result_pool)
 {
   char *def = NULL;
   struct gnome_keyring_baton key_info;
@@ -159,7 +160,7 @@ get_default_keyring_name(apr_pool_t *poo
       return NULL;
     }
 
-  def = strdup(key_info.keyring_name);
+  def = apr_pstrdup(result_pool, key_info.keyring_name);
   callback_destroy_data_keyring(&key_info);
 
   return def;
@@ -291,7 +292,6 @@ password_get_gnome_keyring(svn_boolean_t
                            svn_boolean_t non_interactive,
                            apr_pool_t *pool)
 {
-  char *default_keyring = NULL;
   GnomeKeyringResult result;
   GList *items;
 
@@ -299,8 +299,6 @@ password_get_gnome_keyring(svn_boolean_t
 
   SVN_ERR(ensure_gnome_keyring_is_unlocked(non_interactive, parameters, pool));
 
-  default_keyring = get_default_keyring_name(pool);
-
   if (! apr_hash_get(parameters,
                      "gnome-keyring-opening-failed",
                      APR_HASH_KEY_STRING))
@@ -339,8 +337,6 @@ password_get_gnome_keyring(svn_boolean_t
                    "");
     }
 
-  free(default_keyring);
-
   return SVN_NO_ERROR;
 }
 
@@ -356,7 +352,6 @@ password_set_gnome_keyring(svn_boolean_t
                            svn_boolean_t non_interactive,
                            apr_pool_t *pool)
 {
-  char *default_keyring = NULL;
   GnomeKeyringResult result;
   guint32 item_id;
 
@@ -364,8 +359,6 @@ password_set_gnome_keyring(svn_boolean_t
 
   SVN_ERR(ensure_gnome_keyring_is_unlocked(non_interactive, parameters, pool));
 
-  default_keyring = get_default_keyring_name(pool);
-
   if (! apr_hash_get(parameters,
                      "gnome-keyring-opening-failed",
                      APR_HASH_KEY_STRING))
@@ -388,8 +381,6 @@ password_set_gnome_keyring(svn_boolean_t
                    "");
     }
 
-  free(default_keyring);
-
   *done = (result == GNOME_KEYRING_RESULT_OK);
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/master-passphrase/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/commit.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/commit.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/commit.c Tue Sep 25 19:06:49 2012
@@ -1441,6 +1441,7 @@ svn_client_commit6(const apr_array_heade
   const char *log_msg;
   const char *base_abspath;
   const char *base_url;
+  const char *ra_session_wc;
   apr_array_header_t *rel_targets;
   apr_array_header_t *lock_targets;
   apr_array_header_t *locks_obtained;
@@ -1770,9 +1771,19 @@ svn_client_commit6(const apr_array_heade
   cb.info = &commit_info;
   cb.pool = pool;
 
+  /* When committing from multiple WCs, get the RA editor from
+   * the first WC, rather than the BASE_ABSPATH. The BASE_ABSPATH
+   * might be an unrelated parent of nested working copies.
+   * We don't support commits to multiple repositories so using
+   * the first WC to get the RA session is safe. */
+  if (lock_targets->nelts > 1)
+    ra_session_wc = APR_ARRAY_IDX(lock_targets, 0, const char *);
+  else
+    ra_session_wc = base_abspath;
+
   cmt_err = svn_error_trace(
               svn_client__open_ra_session_internal(&ra_session, NULL, base_url,
-                                                   base_abspath, commit_items,
+                                                   ra_session_wc, commit_items,
                                                    TRUE, FALSE, ctx, pool));
 
   if (cmt_err)

Modified: subversion/branches/master-passphrase/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/merge.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/merge.c Tue Sep 25 19:06:49 2012
@@ -11159,57 +11159,6 @@ typedef struct source_and_target_t
   svn_client__pathrev_t *yca;
 } source_and_target_t;
 
-/* "Open" the source and target branches of a merge.  That means:
- *   - find out their exact repository locations (resolve WC paths and
- *     non-numeric revision numbers),
- *   - check the branches are suitably related,
- *   - establish RA session(s) to the repo,
- *   - check the WC for suitability (throw an error if unsuitable)
- *
- * Record this information and return it in a new "merge context" object.
- */
-static svn_error_t *
-open_source_and_target(source_and_target_t **source_and_target,
-                       const char *source_path_or_url,
-                       const svn_opt_revision_t *source_peg_revision,
-                       const char *target_abspath,
-                       svn_boolean_t allow_mixed_rev,
-                       svn_boolean_t allow_local_mods,
-                       svn_boolean_t allow_switched_subtrees,
-                       svn_client_ctx_t *ctx,
-                       apr_pool_t *session_pool,
-                       apr_pool_t *result_pool,
-                       apr_pool_t *scratch_pool)
-{
-  source_and_target_t *s_t = apr_palloc(result_pool, sizeof(*s_t));
-
-  /* Target */
-  SVN_ERR(open_target_wc(&s_t->target, target_abspath,
-                         allow_mixed_rev, allow_local_mods, allow_switched_subtrees,
-                         ctx, result_pool, scratch_pool));
-  SVN_ERR(svn_client_open_ra_session(&s_t->target_ra_session,
-                                     s_t->target->loc.url,
-                                     ctx, session_pool));
-
-  /* Source */
-  SVN_ERR(svn_client__ra_session_from_path2(
-            &s_t->source_ra_session, &s_t->source,
-            source_path_or_url, NULL, source_peg_revision, source_peg_revision,
-            ctx, result_pool));
-
-  *source_and_target = s_t;
-  return SVN_NO_ERROR;
-}
-
-/* "Close" any resources that were acquired in the S_T structure. */
-static svn_error_t *
-close_source_and_target(source_and_target_t *s_t,
-                        apr_pool_t *scratch_pool)
-{
-  /* close s_t->source_/target_ra_session */
-  return SVN_NO_ERROR;
-}
-
 /* Set *INTERSECTION_P to the intersection of BRANCH_HISTORY with the
  * revision range OLDEST_REV to YOUNGEST_REV (inclusive).
  *
@@ -11494,14 +11443,23 @@ find_symmetric_merge(svn_client__pathrev
                                           svn_mergeinfo_inherited,
                                           FALSE /* squelch_incapable */,
                                           scratch_pool));
-  SVN_ERR(svn_client__get_wc_or_repos_mergeinfo(&s_t->target_mergeinfo,
-                                                NULL /* inherited */,
-                                                NULL /* from_repos */,
-                                                FALSE /* repos_only */,
-                                                svn_mergeinfo_inherited,
-                                                s_t->target_ra_session,
-                                                s_t->target->abspath,
-                                                ctx, scratch_pool));
+  if (! s_t->target->abspath)
+    SVN_ERR(svn_client__get_repos_mergeinfo(&s_t->target_mergeinfo,
+                                            s_t->target_ra_session,
+                                            s_t->target->loc.url,
+                                            s_t->target->loc.rev,
+                                            svn_mergeinfo_inherited,
+                                            FALSE /* squelch_incapable */,
+                                            scratch_pool));
+  else
+    SVN_ERR(svn_client__get_wc_or_repos_mergeinfo(&s_t->target_mergeinfo,
+                                                  NULL /* inherited */,
+                                                  NULL /* from_repos */,
+                                                  FALSE /* repos_only */,
+                                                  svn_mergeinfo_inherited,
+                                                  s_t->target_ra_session,
+                                                  s_t->target->abspath,
+                                                  ctx, scratch_pool));
 
   /* Get the location-history of each branch. */
   s_t->source_branch.tip = s_t->source;
@@ -11545,6 +11503,55 @@ find_symmetric_merge(svn_client__pathrev
   return SVN_NO_ERROR;
 }
 
+/* Details of a symmetric merge. */
+struct svn_client__symmetric_merge_t
+{
+  svn_client__pathrev_t *yca, *base, *mid, *right, *target;
+  svn_boolean_t allow_mixed_rev, allow_local_mods, allow_switched_subtrees;
+};
+
+svn_error_t *
+svn_client__find_symmetric_merge_no_wc(
+                                 svn_client__symmetric_merge_t **merge_p,
+                                 const char *source_path_or_url,
+                                 const svn_opt_revision_t *source_revision,
+                                 const char *target_path_or_url,
+                                 const svn_opt_revision_t *target_revision,
+                                 svn_client_ctx_t *ctx,
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool)
+{
+  source_and_target_t *s_t = apr_palloc(scratch_pool, sizeof(*s_t));
+  svn_client__pathrev_t *target_loc;
+  svn_client__symmetric_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
+
+  /* Source */
+  SVN_ERR(svn_client__ra_session_from_path2(
+            &s_t->source_ra_session, &s_t->source,
+            source_path_or_url, NULL, source_revision, source_revision,
+            ctx, result_pool));
+
+  /* Target */
+  SVN_ERR(svn_client__ra_session_from_path2(
+            &s_t->target_ra_session, &target_loc,
+            target_path_or_url, NULL, target_revision, target_revision,
+            ctx, result_pool));
+  s_t->target = apr_palloc(scratch_pool, sizeof(*s_t->target));
+  s_t->target->kind = svn_node_none;
+  s_t->target->abspath = NULL;  /* indicate the target is not a WC */
+  s_t->target->loc = *target_loc;
+
+  SVN_ERR(find_symmetric_merge(&merge->base, &merge->mid, s_t,
+                               ctx, result_pool, scratch_pool));
+
+  merge->right = s_t->source;
+  merge->target = &s_t->target->loc;
+  merge->yca = s_t->yca;
+  *merge_p = merge;
+
+  return SVN_NO_ERROR;
+}
+
 svn_error_t *
 svn_client__find_symmetric_merge(svn_client__symmetric_merge_t **merge_p,
                                  const char *source_path_or_url,
@@ -11558,22 +11565,30 @@ svn_client__find_symmetric_merge(svn_cli
                                  apr_pool_t *scratch_pool)
 {
   const char *target_abspath;
-  source_and_target_t *s_t;
+  source_and_target_t *s_t = apr_palloc(result_pool, sizeof(*s_t));
   svn_client__symmetric_merge_t *merge = apr_palloc(result_pool, sizeof(*merge));
 
   SVN_ERR(svn_dirent_get_absolute(&target_abspath, target_wcpath, scratch_pool));
 
-  /* Open RA sessions to the source and target trees.  We're not going
-   * to check the target WC for mixed-rev, local mods or switched
-   * subtrees yet.  After we find out what kind of merge is required,
-   * then if a reintegrate-like merge is required we'll do the stricter
-   * checks, in do_symmetric_merge_locked(). */
-  SVN_ERR(open_source_and_target(&s_t, source_path_or_url, source_revision,
-                                 target_abspath,
-                                 TRUE /*allow_mixed_rev*/,
-                                 TRUE /*allow_local_mods*/,
-                                 TRUE /*allow_switched_subtrees*/,
-                                 ctx, result_pool, result_pool, scratch_pool));
+  /* "Open" the target WC.  We're not going to check the target WC for
+   * mixed-rev, local mods or switched subtrees yet.  After we find out
+   * what kind of merge is required, then if a reintegrate-like merge is
+   * required we'll do the stricter checks, in do_symmetric_merge_locked(). */
+  SVN_ERR(open_target_wc(&s_t->target, target_abspath,
+                         TRUE /*allow_mixed_rev*/,
+                         TRUE /*allow_local_mods*/,
+                         TRUE /*allow_switched_subtrees*/,
+                         ctx, result_pool, scratch_pool));
+
+  /* Open RA sessions to the source and target trees. */
+  SVN_ERR(svn_client_open_ra_session(&s_t->target_ra_session,
+                                     s_t->target->loc.url,
+                                     ctx, result_pool));
+  /* ### check for null URL (i.e. added path) here, like in reintegrate? */
+  SVN_ERR(svn_client__ra_session_from_path2(
+            &s_t->source_ra_session, &s_t->source,
+            source_path_or_url, NULL, source_revision, source_revision,
+            ctx, result_pool));
 
   /* Check source is in same repos as target. */
   SVN_ERR(check_same_repos(s_t->source, source_path_or_url,
@@ -11590,7 +11605,7 @@ svn_client__find_symmetric_merge(svn_cli
 
   *merge_p = merge;
 
-  SVN_ERR(close_source_and_target(s_t, scratch_pool));
+  /* TODO: Close the source and target sessions here? */
 
   return SVN_NO_ERROR;
 }
@@ -11772,3 +11787,30 @@ svn_client__do_symmetric_merge(const svn
 
   return SVN_NO_ERROR;
 }
+
+svn_boolean_t
+svn_client__symmetric_merge_is_reintegrate_like(
+        const svn_client__symmetric_merge_t *merge)
+{
+  return merge->mid != NULL;
+}
+
+svn_error_t *
+svn_client__symmetric_merge_get_locations(
+                                svn_client__pathrev_t **yca,
+                                svn_client__pathrev_t **base,
+                                svn_client__pathrev_t **right,
+                                svn_client__pathrev_t **target,
+                                const svn_client__symmetric_merge_t *merge,
+                                apr_pool_t *result_pool)
+{
+  if (yca)
+    *yca = svn_client__pathrev_dup(merge->yca, result_pool);
+  if (base)
+    *base = svn_client__pathrev_dup(merge->base, result_pool);
+  if (right)
+    *right = svn_client__pathrev_dup(merge->right, result_pool);
+  if (target)
+    *target = svn_client__pathrev_dup(merge->target, result_pool);
+  return SVN_NO_ERROR;
+}
\ No newline at end of file

Modified: subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c Tue Sep 25 19:06:49 2012
@@ -1729,7 +1729,10 @@ svn_client_mergeinfo_log2(svn_boolean_t 
         }
     }
 
-  /* Open RA sessions to the repository for the source and target.
+  /* Fetch the location history as mergeinfo, for the source branch
+   * (between the given start and end revisions), and, if we're finding
+   * merged revisions, then also for the entire target branch.
+   *
    * ### TODO: As the source and target must be in the same repository, we
    * should share a single session, tracking the two URLs separately. */
   {

Modified: subversion/branches/master-passphrase/subversion/libsvn_fs_base/tree.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_fs_base/tree.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_fs_base/tree.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_fs_base/tree.c Tue Sep 25 19:06:49 2012
@@ -3676,7 +3676,7 @@ window_consumer(svn_txdelta_window_t *wi
       SVN_ERR(svn_stream_write(tb->target_stream,
                                tb->target_string->data,
                                &len));
-      svn_stringbuf_set(tb->target_string, "");
+      svn_stringbuf_setempty(tb->target_string);
     }
 
   /* Is the window NULL?  If so, we're done. */

Modified: subversion/branches/master-passphrase/subversion/libsvn_fs_fs/tree.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_fs_fs/tree.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_fs_fs/tree.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_fs_fs/tree.c Tue Sep 25 19:06:49 2012
@@ -2352,7 +2352,7 @@ window_consumer(svn_txdelta_window_t *wi
       SVN_ERR(svn_stream_write(tb->target_stream,
                                tb->target_string->data,
                                &len));
-      svn_stringbuf_set(tb->target_string, "");
+      svn_stringbuf_setempty(tb->target_string);
     }
 
   /* Is the window NULL?  If so, we're done. */

Modified: subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c Tue Sep 25 19:06:49 2012
@@ -1986,7 +1986,8 @@ handle_response(serf_request_t *request,
 
   if (err
       && (!SERF_BUCKET_READ_ERROR(err->apr_err)
-          || APR_STATUS_IS_ECONNRESET(err->apr_err)))
+          || APR_STATUS_IS_ECONNRESET(err->apr_err)
+          || APR_STATUS_IS_ECONNABORTED(err->apr_err)))
     {
       /* These errors are special cased in serf
          ### We hope no handler returns these by accident. */
@@ -2418,9 +2419,8 @@ expat_response_handler(serf_request_t *r
       XML_SetCharacterDataHandler(ectx->parser, expat_cdata);
     }
 
-  /* ### should we bail on anything < 200 or >= 300 ??
-     ### actually: < 200 should really be handled by the core.  */
-  if (ectx->handler->sline.code == 404)
+  /* ### TODO: sline.code < 200 should really be handled by the core */
+  if ((ectx->handler->sline.code < 200) || (ectx->handler->sline.code >= 300))
     {
       /* By deferring to expect_empty_body(), it will make a choice on
          how to handle the body. Whatever the decision, the core handler

Modified: subversion/branches/master-passphrase/subversion/libsvn_subr/gpg_agent.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_subr/gpg_agent.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_subr/gpg_agent.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_subr/gpg_agent.c Tue Sep 25 19:06:49 2012
@@ -110,7 +110,7 @@ receive_from_gpg_agent(int sd, char *buf
   int recvd;
   char c;
 
-  /* Clear existing buffer concent before reading response. */
+  /* Clear existing buffer content before reading response. */
   if (n > 0)
     *buf = '\0';
 

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.c Tue Sep 25 19:06:49 2012
@@ -1907,6 +1907,153 @@ svn_wc__conflict_invoke_resolver(svn_wc_
   return SVN_NO_ERROR;
 }
 
+/* Read all property conflicts contained in CONFLICT_SKEL into
+ * individual conflict descriptions, and append those descriptions
+ * to the CONFLICTS array. Allocate results in RESULT_POOL.
+ * SCRATCH_POOL is used for temporary allocations. */
+static svn_error_t *
+read_prop_conflicts(apr_array_header_t *conflicts,
+                    svn_wc__db_t *db,
+                    const char *local_abspath,
+                    svn_skel_t *conflict_skel,
+                    apr_pool_t *result_pool,
+                    apr_pool_t *scratch_pool)
+{
+  const char *prop_reject_file;
+  apr_hash_t *my_props;
+  apr_hash_t *their_old_props;
+  apr_hash_t *their_props;
+  apr_hash_t *conflicted_props;
+  apr_hash_index_t *hi;
+  apr_pool_t *iterpool;
+  
+  SVN_ERR(svn_wc__conflict_read_prop_conflict(&prop_reject_file,
+                                              &my_props,
+                                              &their_old_props,
+                                              &their_props,
+                                              &conflicted_props,
+                                              db, local_abspath,
+                                              conflict_skel,
+                                              scratch_pool, scratch_pool));
+
+  if (apr_hash_count(conflicted_props) == 0)
+    {
+      /* Legacy prop conflict with only a .reject file. */
+      svn_wc_conflict_description2_t *desc;
+
+      desc  = svn_wc_conflict_description_create_prop2(local_abspath,
+                                                       svn_node_unknown,
+                                                       "", result_pool);
+
+      /* ### This should be changed. The prej file should be stored
+       * ### separately from the other files. We need to rev the
+       * ### conflict description struct for this. */
+      desc->their_abspath = apr_pstrdup(result_pool, prop_reject_file);
+
+      APR_ARRAY_PUSH(conflicts, svn_wc_conflict_description2_t*) = desc;
+
+      return SVN_NO_ERROR;
+    }
+
+  iterpool = svn_pool_create(scratch_pool);
+  for (hi = apr_hash_first(scratch_pool, conflicted_props);
+       hi;
+       hi = apr_hash_next(hi))
+    {
+      const char *propname = svn__apr_hash_index_key(hi);
+      svn_string_t *old_value;
+      svn_string_t *my_value;
+      svn_string_t *their_value;
+      svn_wc_conflict_description2_t *desc;
+
+      svn_pool_clear(iterpool);
+
+      desc  = svn_wc_conflict_description_create_prop2(local_abspath,
+                                                       svn_node_unknown,
+                                                       propname,
+                                                       result_pool);
+
+      desc->property_name = apr_pstrdup(result_pool, propname);
+
+      my_value = apr_hash_get(my_props, propname, APR_HASH_KEY_STRING);
+      their_value = apr_hash_get(their_props, propname,
+                                 APR_HASH_KEY_STRING);
+
+      /* Compute the incoming side of the conflict ('action'). */
+      if (their_value == NULL)
+        desc->action = svn_wc_conflict_action_delete;
+      else if (my_value == NULL)
+        desc->action = svn_wc_conflict_action_add;
+      else
+        desc->action = svn_wc_conflict_action_edit;
+
+      /* Compute the local side of the conflict ('reason'). */
+      if (my_value == NULL)
+        desc->reason = svn_wc_conflict_reason_deleted;
+      else if (their_value == NULL)
+        desc->action = svn_wc_conflict_reason_added;
+      else
+        desc->action = svn_wc_conflict_reason_edited;
+
+      /* ### This should be changed. The prej file should be stored
+       * ### separately from the other files. We need to rev the
+       * ### conflict description struct for this. */
+      desc->their_abspath = apr_pstrdup(result_pool, prop_reject_file);
+
+      /* ### This should be changed. The conflict description for
+       * ### props should contain these values as svn_string_t,
+       * ### rather than in temporary files. We need to rev the
+       * ### conflict description struct for this. */
+      if (my_value)
+        {
+          svn_stream_t *s;
+          apr_size_t len;
+
+          SVN_ERR(svn_stream_open_unique(&s, &desc->my_abspath, NULL,
+                                         svn_io_file_del_on_pool_cleanup,
+                                         result_pool, iterpool));
+          len = my_value->len;
+          SVN_ERR(svn_stream_write(s, my_value->data, &len));
+          SVN_ERR(svn_stream_close(s));
+        }
+
+      if (their_value)
+        {
+          svn_stream_t *s;
+          apr_size_t len;
+
+          /* ### Currently, their_abspath is used for the prop reject file.
+           * ### Put their value into merged instead...
+           * ### We need to rev the conflict description struct to fix this. */
+          SVN_ERR(svn_stream_open_unique(&s, &desc->merged_file, NULL,
+                                         svn_io_file_del_on_pool_cleanup,
+                                         result_pool, iterpool));
+          len = their_value->len;
+          SVN_ERR(svn_stream_write(s, their_value->data, &len));
+          SVN_ERR(svn_stream_close(s));
+        }
+
+      old_value = apr_hash_get(their_old_props, propname, APR_HASH_KEY_STRING);
+      if (old_value)
+        {
+          svn_stream_t *s;
+          apr_size_t len;
+
+          SVN_ERR(svn_stream_open_unique(&s, &desc->base_abspath, NULL,
+                                         svn_io_file_del_on_pool_cleanup,
+                                         result_pool, iterpool));
+          len = old_value->len;
+          SVN_ERR(svn_stream_write(s, old_value->data, &len));
+          SVN_ERR(svn_stream_close(s));
+        }
+
+      APR_ARRAY_PUSH(conflicts, svn_wc_conflict_description2_t*) = desc;
+    }
+  svn_pool_destroy(iterpool);
+
+  return SVN_NO_ERROR;
+}
+
 svn_error_t *
 svn_wc__read_conflicts(const apr_array_header_t **conflicts,
                        svn_wc__db_t *db,
@@ -1942,21 +2089,8 @@ svn_wc__read_conflicts(const apr_array_h
                           sizeof(svn_wc_conflict_description2_t*));
 
   if (prop_conflicted)
-    {
-      svn_wc_conflict_description2_t *desc;
-      desc  = svn_wc_conflict_description_create_prop2(local_abspath,
-                                                       svn_node_unknown,
-                                                       "",
-                                                       result_pool);
-
-      SVN_ERR(svn_wc__conflict_read_prop_conflict(&desc->their_abspath,
-                                                  NULL, NULL,  NULL, NULL,
-                                                  db, local_abspath,
-                                                  conflict_skel,
-                                                  result_pool, scratch_pool));
-
-      APR_ARRAY_PUSH(cflcts, svn_wc_conflict_description2_t*) = desc;
-    }
+    SVN_ERR(read_prop_conflicts(cflcts, db, local_abspath, conflict_skel,
+                                result_pool, scratch_pool));
 
   if (text_conflicted)
     {

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.h (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.h Tue Sep 25 19:06:49 2012
@@ -260,6 +260,8 @@ svn_wc__conflict_skel_resolve(svn_boolea
  *
  * Output arguments can be NULL if the value is not necessary.
  *
+ * ### stsp asks: what is LOCATIONS?
+ *
  * TEXT_, PROP_ and TREE_CONFLICTED (when not NULL) will be set to TRUE
  * when the conflict contains the specified kind of conflict, otherwise
  * to false.

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/entries.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/entries.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/entries.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/entries.c Tue Sep 25 19:06:49 2012
@@ -1459,7 +1459,7 @@ insert_node(svn_sqlite__db_t *sdb,
   else if (node->presence == svn_wc__db_status_excluded)
     SVN_ERR(svn_sqlite__bind_text(stmt, 8, "excluded"));
   else if (node->presence == svn_wc__db_status_server_excluded)
-    SVN_ERR(svn_sqlite__bind_text(stmt, 8, "absent"));
+    SVN_ERR(svn_sqlite__bind_text(stmt, 8, "server-excluded"));
 
   if (node->kind == svn_node_none)
     SVN_ERR(svn_sqlite__bind_text(stmt, 10, "unknown"));

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/lock.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/lock.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/lock.c Tue Sep 25 19:06:49 2012
@@ -97,7 +97,8 @@ svn_wc__internal_check_wc(int *wc_format
     {
       svn_node_kind_t kind;
 
-      if (err->apr_err != SVN_ERR_WC_MISSING)
+      if (err->apr_err != SVN_ERR_WC_MISSING &&
+          err->apr_err != SVN_ERR_WC_UNSUPPORTED_FORMAT)
         return svn_error_trace(err);
       svn_error_clear(err);
 

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/update_editor.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/update_editor.c Tue Sep 25 19:06:49 2012
@@ -1662,7 +1662,7 @@ delete_entry(const char *path,
 
 
 
-    /* Receive the remote removal of excluded/absent/not present node.
+    /* Receive the remote removal of excluded/server-excluded/not present node.
        Do not notify, but perform the change even when the node is shadowed */
   if (base_status == svn_wc__db_status_not_present
       || base_status == svn_wc__db_status_excluded

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/upgrade.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/upgrade.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/upgrade.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/upgrade.c Tue Sep 25 19:06:49 2012
@@ -1380,7 +1380,11 @@ svn_wc__upgrade_conflict_skel_from_raw(s
                                        apr_pool_t *scratch_pool)
 {
   svn_skel_t *conflict_data = NULL;
+  const char *wcroot_abspath;
   
+  SVN_ERR(svn_wc__db_get_wcroot(&wcroot_abspath, db, wri_abspath,
+                                scratch_pool, scratch_pool));
+
   if (conflict_old || conflict_new || conflict_wrk)
     {
       const char *old_abspath = NULL;
@@ -1390,19 +1394,16 @@ svn_wc__upgrade_conflict_skel_from_raw(s
       conflict_data = svn_wc__conflict_skel_create(result_pool);
 
       if (conflict_old)
-        SVN_ERR(svn_wc__db_from_relpath(&old_abspath, db, wri_abspath,
-                                        conflict_old,
-                                        scratch_pool, scratch_pool));
+        old_abspath = svn_dirent_join(wcroot_abspath, conflict_old,
+                                      scratch_pool);
 
       if (conflict_new)
-        SVN_ERR(svn_wc__db_from_relpath(&new_abspath, db, wri_abspath,
-                                        conflict_new,
-                                        scratch_pool, scratch_pool));
+        new_abspath = svn_dirent_join(wcroot_abspath, conflict_new,
+                                      scratch_pool);
 
       if (conflict_wrk)
-        SVN_ERR(svn_wc__db_from_relpath(&wrk_abspath, db, wri_abspath,
-                                        conflict_wrk,
-                                        scratch_pool, scratch_pool));
+        wrk_abspath = svn_dirent_join(wcroot_abspath, conflict_wrk,
+                                      scratch_pool);
 
       SVN_ERR(svn_wc__conflict_skel_add_text_conflict(conflict_data,
                                                       db, wri_abspath,
@@ -1420,9 +1421,7 @@ svn_wc__upgrade_conflict_skel_from_raw(s
       if (!conflict_data)
         conflict_data = svn_wc__conflict_skel_create(result_pool);
 
-      SVN_ERR(svn_wc__db_from_relpath(&prej_abspath, db, wri_abspath,
-                                      prej_file,
-                                      scratch_pool, scratch_pool));
+      prej_abspath = svn_dirent_join(wcroot_abspath, prej_file, scratch_pool);
 
       SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(conflict_data,
                                                       db, wri_abspath,
@@ -1445,9 +1444,8 @@ svn_wc__upgrade_conflict_skel_from_raw(s
       tc_skel = svn_skel__parse(tree_conflict_data, tree_conflict_len,
                                 scratch_pool);
 
-      SVN_ERR(svn_wc__db_from_relpath(&local_abspath, db, wri_abspath,
-                                      local_relpath,
-                                      scratch_pool, scratch_pool));
+      local_abspath = svn_dirent_join(wcroot_abspath, local_relpath,
+                                      scratch_pool);
 
       SVN_ERR(svn_wc__deserialize_conflict(&tc, tc_skel,
                                            svn_dirent_dirname(local_abspath,

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/wc-metadata.sql
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/wc-metadata.sql?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/wc-metadata.sql (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/wc-metadata.sql Tue Sep 25 19:06:49 2012
@@ -32,7 +32,7 @@
  * the PRESENCE column in these tables has one of the following values
  * (see also the C type #svn_wc__db_status_t):
  *   "normal"
- *   "absent" -- server has declared it "absent" (ie. authz failure)
+ *   "server-excluded" -- server has declared it excluded (ie. authz failure)
  *   "excluded" -- administratively excluded (ie. sparse WC)
  *   "not-present" -- node not present at this REV
  *   "incomplete" -- state hasn't been filled in
@@ -367,7 +367,7 @@ CREATE TABLE NODES (
        current 'op_depth'.  This state is badly named, it should be
        something like 'deleted'.
 
-     absent: in the 'BASE' tree this is a node that is excluded by
+     server-excluded: in the 'BASE' tree this is a node that is excluded by
        authz.  The name of the node is known from the parent, but no
        other information is available.  Not valid in the 'WORKING'
        tree as there is no way to commit such a node.
@@ -773,14 +773,18 @@ PRAGMA user_version = 29;
 
 /* ------------------------------------------------------------------------- */
 
-/* Format 30 currently just contains some nice to haves that should be included
-   with the next format bump  */
+/* Format 30 creates a new NODES index for move information, and a new
+   PRISTINE index for the md5_checksum column. It also activates use of
+   skel-based conflict storage -- see notes/wc-ng/conflict-storage-2.0.
+   It also renames the "absent" presence to "server-excluded". */
 -- STMT_UPGRADE_TO_30
 CREATE UNIQUE INDEX IF NOT EXISTS I_NODES_MOVED
 ON NODES (wc_id, moved_to, op_depth);
 
 CREATE INDEX IF NOT EXISTS I_PRISTINE_MD5 ON PRISTINE (md5_checksum);
 
+UPDATE nodes SET presence = "server-excluded" WHERE presence = "absent";
+
 /* Just to be sure clear out file external skels from pre 1.7.0 development
    working copies that were never updated by 1.7.0+ style clients */
 UPDATE nodes SET file_external=1 WHERE file_external IS NOT NULL;
@@ -818,9 +822,6 @@ WHERE wc_id = ?1 and local_relpath = ?2
    number will be, however, so we're just marking it as 99 for now.  */
 -- format: 99
 
-/* TODO: Rename the "absent" presence value to "server-excluded". wc_db.c
-   and this file have references to "absent" which still need to be changed
-   to "server-excluded". */
 /* TODO: Un-confuse *_revision column names in the EXTERNALS table to
    "-r<operative> foo@<peg>", as suggested by the patch attached to
    http://svn.haxx.se/dev/archive-2011-09/0478.shtml */

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/wc-queries.sql?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/wc-queries.sql Tue Sep 25 19:06:49 2012
@@ -879,7 +879,7 @@ WHERE wc_id = ?1
   AND (local_relpath = ?2
        OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
   AND op_depth = ?3
-  AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'absent')
+  AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'server-excluded')
 
 -- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY
 INSERT INTO nodes (
@@ -917,7 +917,7 @@ LIMIT 1
 SELECT local_relpath FROM nodes
 WHERE wc_id = ?1
   AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
-  AND op_depth = 0 AND presence = 'absent'
+  AND op_depth = 0 AND presence = 'server-excluded'
 LIMIT 1
 
 /* Select all excluded nodes. Not valid on the WC-root */
@@ -926,7 +926,7 @@ SELECT local_relpath FROM nodes
 WHERE wc_id = ?1
   AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
   AND op_depth = 0
-  AND (presence = 'absent' OR presence = 'excluded')
+  AND (presence = 'server-excluded' OR presence = 'excluded')
 
 /* Creates a copy from one top level NODE to a different location */
 -- STMT_INSERT_WORKING_NODE_COPY_FROM
@@ -1309,7 +1309,7 @@ WHERE wc_id = ?1
   AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s
                   WHERE s.wc_id = ?1
                     AND s.local_relpath = n.local_relpath)
-  AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'absent')
+  AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'server-excluded')
 
 -- STMT_SELECT_DELETE_LIST
 SELECT local_relpath FROM delete_list
@@ -1339,7 +1339,7 @@ WHERE wc_id = ?1
   AND (local_relpath = ?2
        OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
   AND op_depth = 0
-  AND (presence IN ('absent', 'excluded')
+  AND (presence IN ('server-excluded', 'excluded')
         OR depth NOT IN ('infinity', 'unknown'))
   AND file_external IS NULL
 LIMIT 1

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/wc.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/wc.h (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/wc.h Tue Sep 25 19:06:49 2012
@@ -157,7 +157,7 @@ extern "C" {
  * Please document any further format changes here.
  */
 
-#define SVN_WC__VERSION 29
+#define SVN_WC__VERSION 30
 
 
 /* Formats <= this have no concept of "revert text-base/props".  */

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.c?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.c Tue Sep 25 19:06:49 2012
@@ -293,9 +293,7 @@ static const svn_token_map_t kind_map[] 
    of all the status values. */
 static const svn_token_map_t presence_map[] = {
   { "normal", svn_wc__db_status_normal },
-  /* ### "absent" is the former name of the "server-excluded" presence.
-   * ### We should change it to "server-excluded" with a format bump. */
-  { "absent", svn_wc__db_status_server_excluded },
+  { "server-excluded", svn_wc__db_status_server_excluded },
   { "excluded", svn_wc__db_status_excluded },
   { "not-present", svn_wc__db_status_not_present },
   { "incomplete", svn_wc__db_status_incomplete },
@@ -6324,15 +6322,18 @@ revert_list_read(void *baton,
                                                   scratch_pool);
           if (conflict_data)
             {
+              const apr_array_header_t *marker_paths;
               svn_skel_t *conflicts = svn_skel__parse(conflict_data,
                                                       conflict_len,
                                                       scratch_pool);
 
-              SVN_ERR(svn_wc__conflict_read_markers(&b->marker_paths,
+              SVN_ERR(svn_wc__conflict_read_markers(&marker_paths,
                                                     b->db, wcroot->abspath,
                                                     conflicts,
                                                     b->result_pool,
                                                     scratch_pool));
+              /* De-const-ify. */
+              b->marker_paths = (apr_array_header_t *)marker_paths;
             }
 #endif
 

Modified: subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.h?rev=1390054&r1=1390053&r2=1390054&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.h Tue Sep 25 19:06:49 2012
@@ -370,7 +370,7 @@ svn_wc__db_get_wcroot(const char **wcroo
    In the BASE tree, each node corresponds to a particular node-rev in the
    repository.  It can be a mixed-revision tree.  Each node holds either a
    copy of the node-rev as it exists in the repository (if presence =
-   'normal'), or a place-holder (if presence = 'absent' or 'excluded' or
+   'normal'), or a place-holder (if presence = 'server-excluded' or 'excluded' or
    'not-present').
 
    @{
@@ -1356,7 +1356,7 @@ svn_wc__db_op_copy_symlink(svn_wc__db_t 
                            apr_pool_t *scratch_pool);
 
 
-/* ### do we need svn_wc__db_op_copy_absent() ??  */
+/* ### do we need svn_wc__db_op_copy_server_excluded() ??  */
 
 
 /* ### add a new versioned directory. a list of children is NOT passed