You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by gs...@apache.org on 2012/05/18 00:45:38 UTC

svn commit: r1339905 - in /subversion/branches/ev2-export: ./ build/generator/ build/win32/ notes/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_fs/ subversion/libsvn_ra/ subversion/libsvn_ra_neon/ subversion/libsvn_ra_serf/ s...

Author: gstein
Date: Thu May 17 22:45:36 2012
New Revision: 1339905

URL: http://svn.apache.org/viewvc?rev=1339905&view=rev
Log:
On the ev2-export branch:

Bring up to date with trunk.

Added:
    subversion/branches/ev2-export/subversion/svnmucc/   (props changed)
      - copied from r1339904, subversion/trunk/subversion/svnmucc/
Removed:
    subversion/branches/ev2-export/tools/client-side/svnmucc/
Modified:
    subversion/branches/ev2-export/   (props changed)
    subversion/branches/ev2-export/CHANGES
    subversion/branches/ev2-export/COMMITTERS
    subversion/branches/ev2-export/Makefile.in
    subversion/branches/ev2-export/build.conf
    subversion/branches/ev2-export/build/generator/gen_make.py
    subversion/branches/ev2-export/build/win32/make_dist.py
    subversion/branches/ev2-export/build/win32/vc6-build.bat.in
    subversion/branches/ev2-export/notes/knobs
    subversion/branches/ev2-export/subversion/include/private/svn_ra_private.h
    subversion/branches/ev2-export/subversion/include/private/svn_repos_private.h
    subversion/branches/ev2-export/subversion/libsvn_client/merge.c
    subversion/branches/ev2-export/subversion/libsvn_fs/editor.c
    subversion/branches/ev2-export/subversion/libsvn_ra/ra_loader.c
    subversion/branches/ev2-export/subversion/libsvn_ra_neon/util.c
    subversion/branches/ev2-export/subversion/libsvn_ra_serf/mergeinfo.c
    subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c
    subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c
    subversion/branches/ev2-export/subversion/libsvn_ra_serf/xml.c
    subversion/branches/ev2-export/subversion/libsvn_repos/dump.c
    subversion/branches/ev2-export/subversion/libsvn_repos/replay.c
    subversion/branches/ev2-export/subversion/tests/cmdline/commit_tests.py
    subversion/branches/ev2-export/subversion/tests/cmdline/diff_tests.py
    subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py
    subversion/branches/ev2-export/subversion/tests/cmdline/svnmucc_tests.py
    subversion/branches/ev2-export/subversion/tests/cmdline/svntest/main.py
    subversion/branches/ev2-export/tools/dev/windows-build/Makefile
    subversion/branches/ev2-export/win-tests.py

Propchange: subversion/branches/ev2-export/
------------------------------------------------------------------------------
  Merged /subversion/trunk:r1339208-1339904

Modified: subversion/branches/ev2-export/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/CHANGES?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/CHANGES (original)
+++ subversion/branches/ev2-export/CHANGES Thu May 17 22:45:36 2012
@@ -32,7 +32,7 @@ http://svn.apache.org/repos/asf/subversi
     *
 
   - Other tool improvements and bugfixes:
-    *
+    * 'svnmucc' promoted to first-class supported utility (issue #3308)
   
  Developer-visible changes:
   - General:

Modified: subversion/branches/ev2-export/COMMITTERS
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/COMMITTERS?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/COMMITTERS [UTF-8] (original)
+++ subversion/branches/ev2-export/COMMITTERS [UTF-8] Thu May 17 22:45:36 2012
@@ -94,7 +94,7 @@ Commit access for specific areas:
     joeswatosh   Joe Swatosh <jo...@gmail.com>         (Swig-Ruby b.)
     jrvernooij   Jelmer Vernooij <je...@samba.org>          (Python bindings)
           sage   Sage LaTorra <sa...@gmail.com>             (Ctypes-Python b.)
-        rdonch   Роман Донченко <DX...@yandex.ru>         (Swig-Python b.)
+        rdonch   Роман Донченко <dp...@corrigendum.ru>         (Swig-Python b.)
 
   Packages:
 

Modified: subversion/branches/ev2-export/Makefile.in
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/Makefile.in?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/Makefile.in (original)
+++ subversion/branches/ev2-export/Makefile.in Thu May 17 22:45:36 2012
@@ -451,7 +451,7 @@ check-all-javahl: check-apache-javahl ch
 # "make check CLEANUP=true" will clean up directories for successful tests.
 # "make check TESTS=subversion/tests/cmdline/basic_tests.py"
 #  will perform only basic tests (likewise for other tests).
-check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $(TEST_DEPS) @BDB_TEST_DEPS@ svnmucc
+check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $(TEST_DEPS) @BDB_TEST_DEPS@
 	@if test "$(PYTHON)" != "none"; then                                 \
 	  flags="--verbose";                                                 \
 	  if test "$(CLEANUP)" != ""; then                                   \
@@ -504,38 +504,38 @@ check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $
 
 # First, set up Apache as documented in
 # subversion/tests/cmdline/README.
-davcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@ apache-mod svnmucc
+davcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@ apache-mod
 	@$(MAKE) check BASE_URL=http://localhost
 
 # Automatically configure and run Apache httpd on a random port, and then
 # run make check.
-davautocheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@ apache-mod svnmucc
+davautocheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@ apache-mod
 	@# Takes MODULE_PATH, USE_HTTPV1 and SVN_PATH_AUTHZ in the environment.
 	@APXS=$(APXS) $(top_srcdir)/subversion/tests/cmdline/davautocheck.sh
 
 # First, run:
 #   subversion/svnserve/svnserve -d -r `pwd`/subversion/tests/cmdline
-svncheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@ svnmucc
+svncheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@
 	@$(MAKE) check BASE_URL=svn://127.0.0.1
 
 # 'make svnserveautocheck' runs svnserve for you and kills it.
-svnserveautocheck: svnserve bin $(TEST_DEPS) @BDB_TEST_DEPS@ svnmucc
+svnserveautocheck: svnserve bin $(TEST_DEPS) @BDB_TEST_DEPS@
 	@env PYTHON=$(PYTHON) THREADED=$(THREADED) \
 	  $(top_srcdir)/subversion/tests/cmdline/svnserveautocheck.sh
 
 # First, run:
 #   subversion/svnserve/svnserve --listen-host "::1" -d -r `pwd`/subversion/tests/cmdline
 
-svncheck6: bin $(TEST_DEPS) @BDB_TEST_DEPS@ svnmucc
+svncheck6: bin $(TEST_DEPS) @BDB_TEST_DEPS@
 	@$(MAKE) check BASE_URL=svn://\[::1\]
 
 # First make sure you can ssh to localhost and that "svnserve" is in
 # the path of the resulting shell.
-svnsshcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@ svnmucc
+svnsshcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@
 	@$(MAKE) check \
 	  BASE_URL=svn+ssh://localhost`pwd`/subversion/tests/cmdline
 
-bdbcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@ svnmucc
+bdbcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@
 	@$(MAKE) check FS_TYPE=bdb
 
 check-clean:
@@ -863,3 +863,11 @@ clean-ctypes-python:
 # manually describe a dependency, which we won't otherwise detect
 subversion/libsvn_wc/wc-queries.h: $(abs_srcdir)/subversion/libsvn_wc/wc-metadata.sql
 subversion/libsvn_wc/wc-queries.h: $(abs_srcdir)/subversion/libsvn_wc/wc-checks.sql
+
+# Compatibility symlink.
+# This runs after the target of the same name in build-outputs.mk.
+INSTALL_EXTRA_TOOLS=\
+  $(MKDIR) $(DESTDIR)$(bindir); \
+  test -n "$$SVN_SVNMUCC_IS_SVNSYITF" && \
+  ln -sf svnmucc$(EXEEXT) $(DESTDIR)$(bindir)/svnsyitf$(EXEEXT); \
+  ln -sf $(DESTDIR)$(bindir)/svnmucc$(EXEEXT) $(DESTDIR)$(toolsdir)/svnmucc$(EXEEXT)

Modified: subversion/branches/ev2-export/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/build.conf?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/build.conf (original)
+++ subversion/branches/ev2-export/build.conf Thu May 17 22:45:36 2012
@@ -174,6 +174,14 @@ libs = libsvn_client libsvn_ra libsvn_re
 install = bin
 manpages = subversion/svnrdump/svnrdump.1
 
+[svnmucc]
+description = Subversion Multiple URL Command Client
+type = exe
+path = subversion/svnmucc
+libs = libsvn_client libsvn_ra libsvn_subr libsvn_delta apriconv apr neon
+install = bin
+manpages = subversion/svnmucc/svnmucc.1
+
 # Support for GNOME Keyring
 [libsvn_auth_gnome_keyring]
 description = Subversion GNOME Keyring Library
@@ -1215,13 +1223,6 @@ libs = __JAVAHL__ javahl-tests javahl-co
 # ----------------------------------------------------------------------------
 # Contrib and tools
 
-[svnmucc]
-type = exe
-path = tools/client-side/svnmucc
-sources = svnmucc.c
-install = tools
-libs = libsvn_client libsvn_ra libsvn_subr libsvn_delta apriconv apr neon
-
 [diff]
 type = exe
 path = tools/diff

Modified: subversion/branches/ev2-export/build/generator/gen_make.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/build/generator/gen_make.py?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/build/generator/gen_make.py (original)
+++ subversion/branches/ev2-export/build/generator/gen_make.py Thu May 17 22:45:36 2012
@@ -422,7 +422,8 @@ class Generator(gen_base.GeneratorBase):
         # in Makefile.in
         ### we should turn AREA into an object, then test it instead of this
         if area[:5] == 'swig-' and area[-4:] != '-lib' or \
-           area[:7] == 'javahl-':
+           area[:7] == 'javahl-' \
+           or area == 'tools':
           ezt_area.extra_install = 'yes'
 
     ########################################

Modified: subversion/branches/ev2-export/build/win32/make_dist.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/build/win32/make_dist.py?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/build/win32/make_dist.py (original)
+++ subversion/branches/ev2-export/build/win32/make_dist.py Thu May 17 22:45:36 2012
@@ -211,10 +211,10 @@ _disttree = {'': OptFile('%(readme)s', '
                      File('%(blddir)s/svnversion/svnversion.pdb'),
                      File('%(blddir)s/svnrdump/svnrdump.exe'),
                      File('%(blddir)s/svnrdump/svnrdump.pdb'),
+                     File('%(blddir)s/svnmucc/svnmucc.exe'),
+                     File('%(blddir)s/svnmucc/svnmucc.pdb'),
                      File('%(blddir)s/../contrib/client-side/svn-push/svn-push.exe'),
                      File('%(blddir)s/../contrib/client-side/svn-push/svn-push.pdb'),
-                     File('%(blddir)s/../tools/client-side/svnmucc/svnmucc.exe'),
-                     File('%(blddir)s/../tools/client-side/svnmucc/svnmucc.pdb'),
                      File('%(blddir)s/../tools/server-side/svnauthz-validate.exe'),
                      File('%(blddir)s/../tools/server-side/svnauthz-validate.pdb'),
                      File('%(blddir)s/../tools/server-side/svn-populate-node-origins-index.exe'),

Modified: subversion/branches/ev2-export/build/win32/vc6-build.bat.in
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/build/win32/vc6-build.bat.in?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/build/win32/vc6-build.bat.in (original)
+++ subversion/branches/ev2-export/build/win32/vc6-build.bat.in Thu May 17 22:45:36 2012
@@ -137,6 +137,7 @@ copy src-%DIR%\Release\subversion\svnloo
 copy src-%DIR%\Release\subversion\svnserve\svnserve.exe svn-win32-%VER%\bin
 copy src-%DIR%\Release\subversion\svnversion\svnversion.exe svn-win32-%VER%\bin
 copy src-%DIR%\Release\subversion\svnrdump\svnrdump.exe svn-win32-%VER%\bin
+copy src-%DIR%\Release\subversion\svnmucc\svnmucc.exe svn-win32-%VER%\bin
 copy src-%DIR%\Release\subversion\mod_authz_svn\mod_authz_svn.so svn-win32-%VER%\httpd
 copy src-%DIR%\Release\subversion\mod_dav_svn\mod_dav_svn.so svn-win32-%VER%\httpd
 copy svn-win32-%VER%\bin\intl.dll "%APACHEDIR%\bin"

Modified: subversion/branches/ev2-export/notes/knobs
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/notes/knobs?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/notes/knobs (original)
+++ subversion/branches/ev2-export/notes/knobs Thu May 17 22:45:36 2012
@@ -460,5 +460,10 @@ SVN_I_LIKE_LATENCY_SO_IGNORE_HTTPV2
              advertisement of HTTPv2 protocol support (if any), effectively
              causing them to only speak our original HTTP protocol.
 
+7.7 SVN_SVNMUCC_IS_SVNSYITF
+
+  Scope:     'make install-tools'
+  Purpose:   Symlinks $prefix/bin/svnsyitf to $prefix/bin/svnmucc
+
 * (TODO: others)
 

Modified: subversion/branches/ev2-export/subversion/include/private/svn_ra_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/private/svn_ra_private.h?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/private/svn_ra_private.h (original)
+++ subversion/branches/ev2-export/subversion/include/private/svn_ra_private.h Thu May 17 22:45:36 2012
@@ -242,6 +242,45 @@ svn_ra__get_commit_ev2(svn_editor_t **ed
                        apr_pool_t *scratch_pool);
 
 
+/* Similar to #svn_ra_replay_revstart_callback_t, but with an Ev2 editor. */
+typedef svn_error_t *(*svn_ra__replay_revstart_ev2_callback_t)(
+  svn_revnum_t revision,
+  void *replay_baton,
+  svn_editor_t **editor,
+  apr_hash_t *rev_props,
+  apr_pool_t *pool);
+
+/* Similar to #svn_ra_replay_revfinish_callback_t, but with an Ev2 editor. */
+typedef svn_error_t *(*svn_ra__replay_revfinish_ev2_callback_t)(
+  svn_revnum_t revision,
+  void *replay_baton,
+  svn_editor_t *editor,
+  apr_hash_t *rev_props,
+  apr_pool_t *pool);
+
+/* Similar to svn_ra_replay_range(), but uses Ev2 versions of the callback
+   functions. */
+svn_error_t *
+svn_ra__replay_range_ev2(svn_ra_session_t *session,
+                         svn_revnum_t start_revision,
+                         svn_revnum_t end_revision,
+                         svn_revnum_t low_water_mark,
+                         svn_boolean_t send_deltas,
+                         svn_ra__replay_revstart_ev2_callback_t revstart_func,
+                         svn_ra__replay_revfinish_ev2_callback_t revfinish_func,
+                         void *replay_baton,
+                         apr_pool_t *scratch_pool);
+
+/* Similar to svn_ra_replay(), but with an Ev2 editor. */
+svn_error_t *
+svn_ra__replay_ev2(svn_ra_session_t *session,
+                   svn_revnum_t revision,
+                   svn_revnum_t low_water_mark,
+                   svn_boolean_t send_deltas,
+                   svn_editor_t *editor,
+                   apr_pool_t *scratch_pool);
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/ev2-export/subversion/include/private/svn_repos_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/private/svn_repos_private.h?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/private/svn_repos_private.h (original)
+++ subversion/branches/ev2-export/subversion/include/private/svn_repos_private.h Thu May 17 22:45:36 2012
@@ -104,6 +104,16 @@ svn_repos__get_commit_ev2(svn_editor_t *
                           apr_pool_t *result_pool,
                           apr_pool_t *scratch_pool);
 
+svn_error_t *
+svn_repos__replay_ev2(svn_fs_root_t *root,
+                      const char *base_dir,
+                      svn_revnum_t low_water_mark,
+                      svn_boolean_t send_deltas,
+                      svn_editor_t *editor,
+                      svn_repos_authz_func_t authz_read_func,
+                      void *authz_read_baton,
+                      apr_pool_t *scratch_pool);
+
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_client/merge.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_client/merge.c Thu May 17 22:45:36 2012
@@ -203,9 +203,6 @@ typedef struct merge_cmd_baton_t {
   svn_boolean_t ignore_ancestry;      /* Are we ignoring ancestry (and by
                                          extension, mergeinfo)?  FALSE if
                                          SOURCES_ANCESTRAL is FALSE. */
-  svn_boolean_t target_missing_child; /* Whether working copy target of the
-                                         merge is missing any immediate
-                                         children. */
   svn_boolean_t reintegrate_merge;    /* Whether this is a --reintegrate
                                          merge or not. */
   const char *added_path;             /* Set to the dir path whenever the
@@ -4073,9 +4070,10 @@ calculate_remaining_ranges(svn_client__m
                            apr_pool_t *result_pool,
                            apr_pool_t *scratch_pool)
 {
-  const char *mergeinfo_path;
-  const char *primary_url = (source->loc1->rev < source->loc2->rev)
-                            ? source->loc2->url : source->loc1->url;
+  const svn_client__pathrev_t *primary_src
+    = (source->loc1->rev < source->loc2->rev) ? source->loc2 : source->loc1;
+  const char *mergeinfo_path = svn_client__pathrev_fspath(primary_src,
+                                                          scratch_pool);
   /* Intersection of TARGET_MERGEINFO and the merge history
      described by SOURCE. */
   apr_array_header_t *target_rangelist;
@@ -4087,8 +4085,6 @@ calculate_remaining_ranges(svn_client__m
   SVN_ERR_ASSERT(source->ancestral);
 
   /* Determine which of the requested ranges to consider merging... */
-  SVN_ERR(svn_ra__get_fspath_relative_to_root(ra_session, &mergeinfo_path,
-                                              primary_url, result_pool));
 
   /* Set TARGET_RANGELIST to the portion of TARGET_MERGEINFO that refers
      to SOURCE (excluding any gap in SOURCE): first get all ranges from
@@ -4231,7 +4227,8 @@ find_gaps_in_merge_source_history(svn_re
   svn_revnum_t old_rev = MIN(source->loc1->rev, source->loc2->rev);
   const svn_client__pathrev_t *primary_src
     = (source->loc1->rev < source->loc2->rev) ? source->loc2 : source->loc1;
-  const char *merge_src_fspath;
+  const char *merge_src_fspath = svn_client__pathrev_fspath(primary_src,
+                                                            scratch_pool);
   apr_array_header_t *rangelist;
 
   /* Start by assuming there is no gap. */
@@ -4244,8 +4241,6 @@ find_gaps_in_merge_source_history(svn_re
                                                ra_session,
                                                ctx, scratch_pool));
 
-  SVN_ERR(svn_ra__get_fspath_relative_to_root(
-            ra_session, &merge_src_fspath, primary_src->url, scratch_pool));
   rangelist = apr_hash_get(implicit_src_mergeinfo,
                            merge_src_fspath,
                            APR_HASH_KEY_STRING);
@@ -6792,7 +6787,8 @@ do_file_merge(svn_mergeinfo_catalog_t re
   svn_merge_range_t *conflicted_range = NULL;
   svn_boolean_t inherited = FALSE;
   svn_boolean_t is_rollback = (source->loc1->rev > source->loc2->rev);
-  const char *primary_url = is_rollback ? source->loc1->url : source->loc2->url;
+  const svn_client__pathrev_t *primary_src
+    = is_rollback ? source->loc1 : source->loc2;
   svn_boolean_t honor_mergeinfo = HONOR_MERGEINFO(merge_b);
   svn_client__merge_path_t *merge_target = NULL;
   apr_pool_t *iterpool = svn_pool_create(scratch_pool);
@@ -6874,7 +6870,7 @@ do_file_merge(svn_mergeinfo_catalog_t re
           const char *old_sess_url;
           SVN_ERR(svn_client__ensure_ra_session_url(&old_sess_url,
                                                     merge_b->ra_session1,
-                                                    primary_url,
+                                                    primary_src->url,
                                                     iterpool));
           SVN_ERR(remove_noop_merge_ranges(&ranges_to_merge,
                                            merge_b->ra_session1,
@@ -7006,13 +7002,10 @@ do_file_merge(svn_mergeinfo_catalog_t re
      merge ranges, include the noop ones.  */
   if (RECORD_MERGEINFO(merge_b) && remaining_ranges->nelts)
     {
-      const char *mergeinfo_path;
+      const char *mergeinfo_path = svn_client__pathrev_fspath(primary_src,
+                                                              scratch_pool);
       apr_array_header_t *filtered_rangelist;
 
-      SVN_ERR(svn_ra__get_fspath_relative_to_root(
-                merge_b->ra_session1, &mergeinfo_path, primary_url,
-                scratch_pool));
-
       /* Filter any ranges from TARGET_WCPATH's own history, there is no
          need to record this explicitly in mergeinfo, it is already part
          of TARGET_WCPATH's natural history (implicit mergeinfo). */
@@ -8543,8 +8536,6 @@ do_mergeinfo_aware_dir_merge(svn_mergein
      the target thanks to depth-first ordering. */
   target_merge_path = APR_ARRAY_IDX(notify_b->children_with_mergeinfo, 0,
                                     svn_client__merge_path_t *);
-  merge_b->target_missing_child = (target_merge_path->missing_child
-                                   || target_merge_path->switched_child);
 
   /* If we are honoring mergeinfo, then for each item in
      NOTIFY_B->CHILDREN_WITH_MERGEINFO, we need to calculate what needs to be
@@ -8753,10 +8744,10 @@ do_mergeinfo_aware_dir_merge(svn_mergein
   /* Record mergeinfo where appropriate.*/
   if (RECORD_MERGEINFO(merge_b))
     {
-      const svn_client__pathrev_t *primary_loc
+      const svn_client__pathrev_t *primary_src
         = is_rollback ? source->loc1 : source->loc2;
       const char *mergeinfo_path
-        = svn_client__pathrev_fspath(primary_loc, scratch_pool);
+        = svn_client__pathrev_fspath(primary_src, scratch_pool);
 
       err = record_mergeinfo_for_dir_merge(result_catalog,
                                            &range,
@@ -9014,7 +9005,6 @@ do_merge(apr_hash_t **modified_subtrees,
   merge_cmd_baton.same_repos = same_repos;
   merge_cmd_baton.mergeinfo_capable = FALSE;
   merge_cmd_baton.ctx = ctx;
-  merge_cmd_baton.target_missing_child = FALSE;
   merge_cmd_baton.reintegrate_merge = reintegrate_merge;
   merge_cmd_baton.target = target;
   merge_cmd_baton.pool = iterpool;
@@ -11264,9 +11254,9 @@ find_last_merged_location(svn_client__pa
 
   /* Remove any locations that match (a), (b) or (c). */
   /* For (a), remove any locations that are in TARGET's mergeinfo. */
-  SVN_ERR(svn_mergeinfo_remove(&eligible_locations->history,
-                               target_mergeinfo, eligible_locations->history,
-                               scratch_pool));
+  SVN_ERR(svn_mergeinfo_remove2(&eligible_locations->history,
+                                target_mergeinfo, eligible_locations->history,
+                                TRUE, scratch_pool, scratch_pool));
   /* For (b) ... */
 
   /* For (c) ... */

Modified: subversion/branches/ev2-export/subversion/libsvn_fs/editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs/editor.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs/editor.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs/editor.c Thu May 17 22:45:36 2012
@@ -268,6 +268,25 @@ can_modify(svn_fs_root_t *txn_root,
 }
 
 
+/* Can we create a node at FSPATH in TXN_ROOT? If something already exists
+   at that path, then the client is out of date.  */
+static svn_error_t *
+can_create(svn_fs_root_t *txn_root,
+           const char *fspath,
+           apr_pool_t *scratch_pool)
+{
+  svn_node_kind_t kind;
+
+  SVN_ERR(svn_fs_check_path(&kind, txn_root, fspath, scratch_pool));
+  if (kind != svn_node_none)
+    return svn_error_createf(SVN_ERR_FS_OUT_OF_DATE, NULL,
+                             _("'%s' already exists, so may be out"
+                               " of date; try updating"),
+                             fspath);
+  return SVN_NO_ERROR;
+}
+
+
 /* This implements svn_editor_cb_add_directory_t */
 static svn_error_t *
 add_directory_cb(void *baton,
@@ -291,7 +310,10 @@ add_directory_cb(void *baton,
       SVN_ERR(can_modify(root, fspath, replaces_rev, scratch_pool));
       SVN_ERR(svn_fs_delete(root, fspath, scratch_pool));
     }
-  /* else better not be there!  */
+  else
+    {
+      SVN_ERR(can_create(root, fspath, scratch_pool));
+    }
 
   SVN_ERR(svn_fs_make_dir(root, fspath, scratch_pool));
   SVN_ERR(add_new_props(root, fspath, props, scratch_pool));
@@ -321,7 +343,10 @@ add_file_cb(void *baton,
       SVN_ERR(can_modify(root, fspath, replaces_rev, scratch_pool));
       SVN_ERR(svn_fs_delete(root, fspath, scratch_pool));
     }
-  /* else better not be there!  */
+  else
+    {
+      SVN_ERR(can_create(root, fspath, scratch_pool));
+    }
 
   SVN_ERR(svn_fs_make_file(root, fspath, scratch_pool));
 
@@ -353,7 +378,10 @@ add_symlink_cb(void *baton,
       SVN_ERR(can_modify(root, fspath, replaces_rev, scratch_pool));
       SVN_ERR(svn_fs_delete(root, fspath, scratch_pool));
     }
-  /* else better not be there!  */
+  else
+    {
+      SVN_ERR(can_create(root, fspath, scratch_pool));
+    }
 
   /* ### we probably need to construct a file with specific contents
      ### (until the FS grows some symlink APIs)  */
@@ -506,6 +534,10 @@ copy_cb(void *baton,
       SVN_ERR(can_modify(root, dst_fspath, replaces_rev, scratch_pool));
       SVN_ERR(svn_fs_delete(root, dst_fspath, scratch_pool));
     }
+  else
+    {
+      SVN_ERR(can_create(root, dst_fspath, scratch_pool));
+    }
 
   SVN_ERR(svn_fs_revision_root(&src_root, svn_fs_root_fs(root), src_revision,
                                scratch_pool));
@@ -541,6 +573,10 @@ move_cb(void *baton,
       SVN_ERR(can_modify(root, dst_fspath, replaces_rev, scratch_pool));
       SVN_ERR(svn_fs_delete(root, dst_fspath, scratch_pool));
     }
+  else
+    {
+      SVN_ERR(can_create(root, dst_fspath, scratch_pool));
+    }
 
   /* ### would be nice to have svn_fs_move()  */
 

Modified: subversion/branches/ev2-export/subversion/libsvn_ra/ra_loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra/ra_loader.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra/ra_loader.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra/ra_loader.c Thu May 17 22:45:36 2012
@@ -1170,6 +1170,17 @@ svn_error_t *svn_ra_replay(svn_ra_sessio
 }
 
 svn_error_t *
+svn_ra__replay_ev2(svn_ra_session_t *session,
+                   svn_revnum_t revision,
+                   svn_revnum_t low_water_mark,
+                   svn_boolean_t send_deltas,
+                   svn_editor_t *editor,
+                   apr_pool_t *scratch_pool)
+{
+  SVN__NOT_IMPLEMENTED();
+}
+
+svn_error_t *
 svn_ra_replay_range(svn_ra_session_t *session,
                     svn_revnum_t start_revision,
                     svn_revnum_t end_revision,
@@ -1222,6 +1233,20 @@ svn_ra_replay_range(svn_ra_session_t *se
   return err;
 }
 
+svn_error_t *
+svn_ra__replay_range_ev2(svn_ra_session_t *session,
+                         svn_revnum_t start_revision,
+                         svn_revnum_t end_revision,
+                         svn_revnum_t low_water_mark,
+                         svn_boolean_t send_deltas,
+                         svn_ra__replay_revstart_ev2_callback_t revstart_func,
+                         svn_ra__replay_revfinish_ev2_callback_t revfinish_func,
+                         void *replay_baton,
+                         apr_pool_t *scratch_pool)
+{
+  SVN__NOT_IMPLEMENTED();
+}
+
 svn_error_t *svn_ra_has_capability(svn_ra_session_t *session,
                                    svn_boolean_t *has,
                                    const char *capability,

Modified: subversion/branches/ev2-export/subversion/libsvn_ra_neon/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_neon/util.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_neon/util.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_neon/util.c Thu May 17 22:45:36 2012
@@ -245,7 +245,12 @@ end_207_element(void *baton, int state,
 
     case ELEM_responsedescription:
       if (b->in_propstat)
-        svn_stringbuf_set(b->propstat_description, b->cdata->data);
+        {
+          /* Remove leading newline added by DEBUG_CR on server */
+          svn_stringbuf_strip_whitespace(b->cdata);
+
+          svn_stringbuf_set(b->propstat_description, b->cdata->data);
+        }
       else
         {
           if (! svn_stringbuf_isempty(b->description))

Modified: subversion/branches/ev2-export/subversion/libsvn_ra_serf/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_serf/mergeinfo.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_serf/mergeinfo.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_serf/mergeinfo.c Thu May 17 22:45:36 2012
@@ -229,8 +229,6 @@ create_mergeinfo_body(serf_bucket_t **bk
   return SVN_NO_ERROR;
 }
 
-/* Request a mergeinfo-report from the URL attached to SESSION,
-   and fill in the MERGEINFO hash with the results.  */
 svn_error_t *
 svn_ra_serf__get_mergeinfo(svn_ra_session_t *ra_session,
                            svn_mergeinfo_catalog_t *catalog,

Modified: subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h Thu May 17 22:45:36 2012
@@ -1385,6 +1385,7 @@ svn_ra_serf__get_stable_url(const char *
 
 /** RA functions **/
 
+/* Implements svn_ra__vtable_t.get_log(). */
 svn_error_t *
 svn_ra_serf__get_log(svn_ra_session_t *session,
                      const apr_array_header_t *paths,
@@ -1399,6 +1400,7 @@ svn_ra_serf__get_log(svn_ra_session_t *s
                      void *receiver_baton,
                      apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_locations(). */
 svn_error_t *
 svn_ra_serf__get_locations(svn_ra_session_t *session,
                            apr_hash_t **locations,
@@ -1407,6 +1409,7 @@ svn_ra_serf__get_locations(svn_ra_sessio
                            const apr_array_header_t *location_revisions,
                            apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_location_segments(). */
 svn_error_t *
 svn_ra_serf__get_location_segments(svn_ra_session_t *session,
                                    const char *path,
@@ -1417,6 +1420,7 @@ svn_ra_serf__get_location_segments(svn_r
                                    void *receiver_baton,
                                    apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.do_diff(). */
 svn_error_t *
 svn_ra_serf__do_diff(svn_ra_session_t *session,
                      const svn_ra_reporter3_t **reporter,
@@ -1431,6 +1435,7 @@ svn_ra_serf__do_diff(svn_ra_session_t *s
                      void *diff_baton,
                      apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.do_status(). */
 svn_error_t *
 svn_ra_serf__do_status(svn_ra_session_t *ra_session,
                        const svn_ra_reporter3_t **reporter,
@@ -1442,6 +1447,7 @@ svn_ra_serf__do_status(svn_ra_session_t 
                        void *status_baton,
                        apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.do_update(). */
 svn_error_t *
 svn_ra_serf__do_update(svn_ra_session_t *ra_session,
                        const svn_ra_reporter3_t **reporter,
@@ -1454,6 +1460,7 @@ svn_ra_serf__do_update(svn_ra_session_t 
                        void *update_baton,
                        apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.do_switch(). */
 svn_error_t *
 svn_ra_serf__do_switch(svn_ra_session_t *ra_session,
                        const svn_ra_reporter3_t **reporter,
@@ -1466,6 +1473,7 @@ svn_ra_serf__do_switch(svn_ra_session_t 
                        void *switch_baton,
                        apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_file_revs(). */
 svn_error_t *
 svn_ra_serf__get_file_revs(svn_ra_session_t *session,
                            const char *path,
@@ -1476,12 +1484,14 @@ svn_ra_serf__get_file_revs(svn_ra_sessio
                            void *handler_baton,
                            apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_dated_revision(). */
 svn_error_t *
 svn_ra_serf__get_dated_revision(svn_ra_session_t *session,
                                 svn_revnum_t *revision,
                                 apr_time_t tm,
                                 apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_commit_editor(). */
 svn_error_t *
 svn_ra_serf__get_commit_editor(svn_ra_session_t *session,
                                const svn_delta_editor_t **editor,
@@ -1493,6 +1503,7 @@ svn_ra_serf__get_commit_editor(svn_ra_se
                                svn_boolean_t keep_locks,
                                apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_file(). */
 svn_error_t *
 svn_ra_serf__get_file(svn_ra_session_t *session,
                       const char *path,
@@ -1502,6 +1513,7 @@ svn_ra_serf__get_file(svn_ra_session_t *
                       apr_hash_t **props,
                       apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.change_rev_prop(). */
 svn_error_t *
 svn_ra_serf__change_rev_prop(svn_ra_session_t *session,
                              svn_revnum_t rev,
@@ -1510,6 +1522,7 @@ svn_ra_serf__change_rev_prop(svn_ra_sess
                              const svn_string_t *value,
                              apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.replay(). */
 svn_error_t *
 svn_ra_serf__replay(svn_ra_session_t *ra_session,
                     svn_revnum_t revision,
@@ -1519,6 +1532,7 @@ svn_ra_serf__replay(svn_ra_session_t *ra
                     void *edit_baton,
                     apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.replay_range(). */
 svn_error_t *
 svn_ra_serf__replay_range(svn_ra_session_t *ra_session,
                           svn_revnum_t start_revision,
@@ -1530,6 +1544,7 @@ svn_ra_serf__replay_range(svn_ra_session
                           void *replay_baton,
                           apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.lock(). */
 svn_error_t *
 svn_ra_serf__lock(svn_ra_session_t *ra_session,
                   apr_hash_t *path_revs,
@@ -1539,6 +1554,7 @@ svn_ra_serf__lock(svn_ra_session_t *ra_s
                   void *lock_baton,
                   apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.unlock(). */
 svn_error_t *
 svn_ra_serf__unlock(svn_ra_session_t *ra_session,
                     apr_hash_t *path_tokens,
@@ -1547,12 +1563,14 @@ svn_ra_serf__unlock(svn_ra_session_t *ra
                     void *lock_baton,
                     apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_lock(). */
 svn_error_t *
 svn_ra_serf__get_lock(svn_ra_session_t *ra_session,
                       svn_lock_t **lock,
                       const char *path,
                       apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_locks(). */
 svn_error_t *
 svn_ra_serf__get_locks(svn_ra_session_t *ra_session,
                        apr_hash_t **locks,
@@ -1560,13 +1578,19 @@ svn_ra_serf__get_locks(svn_ra_session_t 
                        svn_depth_t depth,
                        apr_pool_t *pool);
 
-svn_error_t * svn_ra_serf__get_mergeinfo(svn_ra_session_t *ra_session,
-                                         apr_hash_t **mergeinfo,
-                                         const apr_array_header_t *paths,
-                                         svn_revnum_t revision,
-                                         svn_mergeinfo_inheritance_t inherit,
-                                         svn_boolean_t include_descendants,
-                                         apr_pool_t *pool);
+/* Request a mergeinfo-report from the URL attached to SESSION,
+   and fill in the MERGEINFO hash with the results.
+
+   Implements svn_ra__vtable_t.get_mergeinfo().
+ */
+svn_error_t *
+svn_ra_serf__get_mergeinfo(svn_ra_session_t *ra_session,
+                           apr_hash_t **mergeinfo,
+                           const apr_array_header_t *paths,
+                           svn_revnum_t revision,
+                           svn_mergeinfo_inheritance_t inherit,
+                           svn_boolean_t include_descendants,
+                           apr_pool_t *pool);
 
 /* Exchange capabilities with the server, by sending an OPTIONS
  * request announcing the client's capabilities, and by filling
@@ -1585,14 +1609,14 @@ svn_ra_serf__exchange_capabilities(svn_r
                                    const char **corrected_url,
                                    apr_pool_t *pool);
 
-/* Implements the has_capability RA layer function. */
+/* Implements svn_ra__vtable_t.has_capability(). */
 svn_error_t *
 svn_ra_serf__has_capability(svn_ra_session_t *ra_session,
                             svn_boolean_t *has,
                             const char *capability,
                             apr_pool_t *pool);
 
-/* Implements the get_deleted_rev RA layer function. */
+/* Implements svn_ra__vtable_t.get_deleted_rev(). */
 svn_error_t *
 svn_ra_serf__get_deleted_rev(svn_ra_session_t *session,
                              const char *path,
@@ -1601,6 +1625,18 @@ svn_ra_serf__get_deleted_rev(svn_ra_sess
                              svn_revnum_t *revision_deleted,
                              apr_pool_t *pool);
 
+/* Implements svn_ra__vtable_t.get_repos_root(). */
+svn_error_t *
+svn_ra_serf__get_repos_root(svn_ra_session_t *ra_session,
+                            const char **url,
+                            apr_pool_t *pool);
+
+/* Implements svn_ra__vtable_t.register_editor_shim_callbacks(). */
+svn_error_t *
+svn_ra_serf__register_editor_shim_callbacks(svn_ra_session_t *session,
+                                    svn_delta_shim_callbacks_t *callbacks);
+
+
 /*** Authentication handler declarations ***/
 
 /**
@@ -1627,16 +1663,14 @@ svn_ra_serf__error_on_status(int status_
                              const char *path,
                              const char *location);
 
-svn_error_t *
-svn_ra_serf__register_editor_shim_callbacks(svn_ra_session_t *session,
-                                    svn_delta_shim_callbacks_t *callbacks);
-
-
+/* ###? */
 svn_error_t *
 svn_ra_serf__copy_into_spillbuf(svn_spillbuf_t **spillbuf,
                                 serf_bucket_t *bkt,
                                 apr_pool_t *result_pool,
                                 apr_pool_t *scratch_pool);
+
+/* ###? */
 serf_bucket_t *
 svn_ra_serf__create_sb_bucket(svn_spillbuf_t *spillbuf,
                               serf_bucket_alloc_t *allocator,
@@ -1644,12 +1678,6 @@ svn_ra_serf__create_sb_bucket(svn_spillb
                               apr_pool_t *scratch_pool);
 
 
-svn_error_t *
-svn_ra_serf__get_repos_root(svn_ra_session_t *ra_session,
-                            const char **url,
-                            apr_pool_t *pool);
-
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c Thu May 17 22:45:36 2012
@@ -51,6 +51,7 @@
 #include "ra_serf.h"
 
 
+/* Implements svn_ra__vtable_t.get_version(). */
 static const svn_version_t *
 ra_serf_version(void)
 {
@@ -60,12 +61,14 @@ ra_serf_version(void)
 #define RA_SERF_DESCRIPTION \
     N_("Module for accessing a repository via WebDAV protocol using serf.")
 
+/* Implements svn_ra__vtable_t.get_description(). */
 static const char *
 ra_serf_get_description(void)
 {
   return _(RA_SERF_DESCRIPTION);
 }
 
+/* Implements svn_ra__vtable_t.get_schemes(). */
 static const char * const *
 ra_serf_get_schemes(apr_pool_t *pool)
 {
@@ -332,6 +335,7 @@ svn_ra_serf__progress(void *progress_bat
     }
 }
 
+/* Implements svn_ra__vtable_t.open_session(). */
 static svn_error_t *
 svn_ra_serf__open(svn_ra_session_t *session,
                   const char **corrected_url,
@@ -438,6 +442,7 @@ svn_ra_serf__open(svn_ra_session_t *sess
   return svn_ra_serf__exchange_capabilities(serf_sess, corrected_url, pool);
 }
 
+/* Implements svn_ra__vtable_t.reparent(). */
 static svn_error_t *
 svn_ra_serf__reparent(svn_ra_session_t *ra_session,
                       const char *url,
@@ -480,6 +485,7 @@ svn_ra_serf__reparent(svn_ra_session_t *
   return SVN_NO_ERROR;
 }
 
+/* Implements svn_ra__vtable_t.get_session_url(). */
 static svn_error_t *
 svn_ra_serf__get_session_url(svn_ra_session_t *ra_session,
                              const char **url,
@@ -490,6 +496,7 @@ svn_ra_serf__get_session_url(svn_ra_sess
   return SVN_NO_ERROR;
 }
 
+/* Implements svn_ra__vtable_t.get_latest_revnum(). */
 static svn_error_t *
 svn_ra_serf__get_latest_revnum(svn_ra_session_t *ra_session,
                                svn_revnum_t *latest_revnum,
@@ -501,6 +508,7 @@ svn_ra_serf__get_latest_revnum(svn_ra_se
                            latest_revnum, session, pool));
 }
 
+/* Implements svn_ra__vtable_t.rev_proplist(). */
 static svn_error_t *
 svn_ra_serf__rev_proplist(svn_ra_session_t *ra_session,
                           svn_revnum_t rev,
@@ -538,6 +546,7 @@ svn_ra_serf__rev_proplist(svn_ra_session
   return SVN_NO_ERROR;
 }
 
+/* Implements svn_ra__vtable_t.rev_prop(). */
 static svn_error_t *
 svn_ra_serf__rev_prop(svn_ra_session_t *session,
                       svn_revnum_t rev,
@@ -591,6 +600,7 @@ fetch_path_props(apr_hash_t **props,
   return SVN_NO_ERROR;
 }
 
+/* Implements svn_ra__vtable_t.check_path(). */
 static svn_error_t *
 svn_ra_serf__check_path(svn_ra_session_t *ra_session,
                         const char *rel_path,
@@ -829,6 +839,7 @@ get_dirent_props(apr_uint32_t dirent_fie
   return (svn_ra_serf__dav_props_t *) props->elts;
 }
 
+/* Implements svn_ra__vtable_t.stat(). */
 static svn_error_t *
 svn_ra_serf__stat(svn_ra_session_t *ra_session,
                   const char *rel_path,
@@ -907,6 +918,7 @@ resource_is_directory(apr_hash_t *props)
   return SVN_NO_ERROR;
 }
 
+/* Implements svn_ra__vtable_t.get_dir(). */
 static svn_error_t *
 svn_ra_serf__get_dir(svn_ra_session_t *ra_session,
                      apr_hash_t **dirents,
@@ -1053,6 +1065,8 @@ svn_ra_serf__get_repos_root(svn_ra_sessi
    case where the root of the repository is not readable.
    However, it does not handle the case where we're fetching path not existing
    in HEAD of a repository with unreadable root directory.
+
+   Implements svn_ra__vtable_t.get_uuid().
  */
 static svn_error_t *
 svn_ra_serf__get_uuid(svn_ra_session_t *ra_session,

Modified: subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c Thu May 17 22:45:36 2012
@@ -844,15 +844,10 @@ end_error(svn_ra_serf__xml_parser_t *par
       /* On the server dav_error_response_tag() will add a leading
          and trailing newline if DEBUG_CR is defined in mod_dav.h,
          so remove any such characters here. */
-      apr_size_t len;
-      const char *cd = ctx->cdata->data;
-      if (*cd == '\n')
-        ++cd;
-      len = strlen(cd);
-      if (len > 0 && cd[len-1] == '\n')
-        --len;
+      svn_stringbuf_strip_whitespace(ctx->cdata);
 
-      ctx->error->message = apr_pstrmemdup(ctx->error->pool, cd, len);
+      ctx->error->message = apr_pstrmemdup(ctx->error->pool, ctx->cdata->data,
+                                           ctx->cdata->len);
       ctx->collect_cdata = FALSE;
     }
 
@@ -1148,6 +1143,9 @@ end_207(svn_ra_serf__xml_parser_t *parse
     }
   if (ctx->in_error && strcmp(name.name, "responsedescription") == 0)
     {
+      /* Remove leading newline added by DEBUG_CR on server */
+      svn_stringbuf_strip_whitespace(ctx->cdata);
+
       ctx->collect_cdata = FALSE;
       ctx->error->message = apr_pstrmemdup(ctx->error->pool, ctx->cdata->data,
                                            ctx->cdata->len);
@@ -2386,7 +2384,8 @@ expat_response_handler(serf_request_t *r
 
       expat_status = XML_Parse(ectx->parser, data, (int)len, 0 /* isFinal */);
       if (expat_status == XML_STATUS_ERROR)
-        return svn_error_createf(SVN_ERR_XML_MALFORMED, NULL,
+        return svn_error_createf(SVN_ERR_XML_MALFORMED,
+                                 ectx->inner_error,
                                  _("The %s response contains invalid XML"
                                    " (%d %s)"),
                                  ectx->handler->method,

Modified: subversion/branches/ev2-export/subversion/libsvn_ra_serf/xml.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_serf/xml.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_serf/xml.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_serf/xml.c Thu May 17 22:45:36 2012
@@ -637,7 +637,8 @@ svn_ra_serf__xml_cb_start(svn_ra_serf__x
 
   /* Some basic copies to set up the new estate.  */
   new_xes->state = scan->to_state;
-  new_xes->tag = elemname;
+  new_xes->tag.name = apr_pstrdup(new_pool, elemname.name);
+  new_xes->tag.namespace = apr_pstrdup(new_pool, elemname.namespace);
   new_xes->custom_close = scan->custom_close;
 
   /* Start with the parent's namespace set.  */

Modified: subversion/branches/ev2-export/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_repos/dump.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_repos/dump.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_repos/dump.c Thu May 17 22:45:36 2012
@@ -741,10 +741,7 @@ close_directory(void *dir_baton,
        hi;
        hi = apr_hash_next(hi))
     {
-      const void *key;
-      const char *path;
-      apr_hash_this(hi, &key, NULL, NULL);
-      path = key;
+      const char *path = svn__apr_hash_index_key(hi);
 
       svn_pool_clear(subpool);
 

Modified: subversion/branches/ev2-export/subversion/libsvn_repos/replay.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_repos/replay.c?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_repos/replay.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_repos/replay.c Thu May 17 22:45:36 2012
@@ -922,3 +922,16 @@ svn_repos_replay2(svn_fs_root_t *root,
                                SVN_INVALID_REVNUM, paths,
                                path_driver_cb_func, &cb_baton, pool);
 }
+
+svn_error_t *
+svn_repos__replay_ev2(svn_fs_root_t *root,
+                      const char *base_dir,
+                      svn_revnum_t low_water_mark,
+                      svn_boolean_t send_deltas,
+                      svn_editor_t *editor,
+                      svn_repos_authz_func_t authz_read_func,
+                      void *authz_read_baton,
+                      apr_pool_t *scratch_pool)
+{
+  SVN__NOT_IMPLEMENTED();
+}

Propchange: subversion/branches/ev2-export/subversion/svnmucc/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu May 17 22:45:36 2012
@@ -0,0 +1,7 @@
+svnmucc
+svnmucc.exe
+.libs
+*.o
+*~
+.*~
+svnmucc-test-repos

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/commit_tests.py?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/commit_tests.py Thu May 17 22:45:36 2012
@@ -2877,6 +2877,44 @@ def commit_add_subadd(sbox):
   svntest.main.run_svn(None, 'merge', '-c', '-2', './')
   svntest.main.run_svn(None, 'commit', '--targets', targets_file, '-mm')
 
+def commit_danglers(sbox):
+  "verify committing some dangling children fails"
+
+  sbox.build(read_only=True)
+  wc_dir = sbox.wc_dir
+
+  sbox.simple_copy('A','A_copied')
+
+  A_copied = sbox.ospath('A_copied')
+  mu_copied = sbox.ospath('A_copied/mu')
+
+  svntest.main.file_write(mu_copied, "xxxx")  
+
+  # We already test for this problem for some time
+  expected_error = "svn: E200009: '.*A_copied' .*exist.*yet.* '.*mu'.*part"
+  svntest.actions.run_and_verify_commit(mu_copied,
+                                        None,
+                                        None,
+                                        expected_error,
+                                        mu_copied)
+
+  # But now do the same thing via changelist filtering
+  svntest.main.run_svn(None, 'changelist', 'L', mu_copied, sbox.ospath('A/mu'))
+
+  # And try to commit A_copied itself with changelist filtering
+  svntest.actions.run_and_verify_commit(A_copied,
+                                        None,
+                                        None,
+                                        expected_error,
+                                        A_copied, '--cl', 'L')
+
+  # And on the wcroot
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        None,
+                                        None,
+                                        expected_error,
+                                        wc_dir, '--cl', 'L')
+
 
 ########################################################################
 # Run the tests
@@ -2947,6 +2985,7 @@ test_list = [ None,
               commit_multiple_nested_deletes,
               commit_incomplete,
               commit_add_subadd,
+              commit_danglers,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/diff_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/diff_tests.py?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/diff_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/diff_tests.py Thu May 17 22:45:36 2012
@@ -4038,7 +4038,7 @@ def diff_properties_only(sbox):
   # Make a property change and a content change to 'iota'
   # Only the property change should be displayed by diff --properties-only
   sbox.simple_propset('svn:eol-style', 'native', 'iota')
-  svntest.main.file_append(sbox.ospath('iota'), 'new text\n')
+  svntest.main.file_append(sbox.ospath('iota'), 'new text')
 
   sbox.simple_commit() # r2
 

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py Thu May 17 22:45:36 2012
@@ -1740,11 +1740,9 @@ def post_revprop_change_hook(sbox):
   svntest.actions.create_failing_hook(repo_dir, 'post-revprop-change',
                                       error_msg)
 
-  # serf/neon/mod_dav_svn splits the "svn: hook failed" line
-  expected_error = svntest.verify.RegexOutput([
-    '(svn: E165001: |)post-revprop-change hook failed',
-    error_msg + "\n",
-  ], match_all = False)
+  # serf/neon/mod_dav_svn give SVN_ERR_RA_DAV_REQUEST_FAILED
+  # file/svn give SVN_ERR_REPOS_HOOK_FAILURE
+  expected_error = 'svn: (E175002|E165001).*post-revprop-change hook failed'
 
   svntest.actions.run_and_verify_svn(None, [], expected_error,
                                      'ps', '--revprop', '-r0', 'p', 'v',

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/svnmucc_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/svnmucc_tests.py?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/svnmucc_tests.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/svnmucc_tests.py Thu May 17 22:45:36 2012
@@ -39,7 +39,7 @@ def reject_bogus_mergeinfo(sbox):
 
   sbox.build(create_wc=False)
 
-  expected_error = ".*(E200020.*Invalid revision|E175008.*property change)"
+  expected_error = ".*(E200020.*Invalid revision|E175002.*PROPPATCH)"
 
   # At present this tests the server, but if we ever make svnmucc
   # validate the mergeinfo up front then it will only test the client

Modified: subversion/branches/ev2-export/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/svntest/main.py?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/svntest/main.py Thu May 17 22:45:36 2012
@@ -148,13 +148,12 @@ svnsync_binary = os.path.abspath('../../
 svnversion_binary = os.path.abspath('../../svnversion/svnversion' + _exe)
 svndumpfilter_binary = os.path.abspath('../../svndumpfilter/svndumpfilter' + \
                                        _exe)
+svnmucc_binary=os.path.abspath('../../svnmucc/svnmucc' + _exe)
 entriesdump_binary = os.path.abspath('entries-dump' + _exe)
 atomic_ra_revprop_change_binary = os.path.abspath('atomic-ra-revprop-change' + \
                                                   _exe)
 wc_lock_tester_binary = os.path.abspath('../libsvn_wc/wc-lock-tester' + _exe)
 wc_incomplete_tester_binary = os.path.abspath('../libsvn_wc/wc-incomplete-tester' + _exe)
-svnmucc_binary=os.path.abspath('../../../tools/client-side/svnmucc/svnmucc' + \
-                               _exe)
 
 # Location to the pristine repository, will be calculated from test_area_url
 # when we know what the user specified for --url.

Modified: subversion/branches/ev2-export/tools/dev/windows-build/Makefile
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/dev/windows-build/Makefile?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/tools/dev/windows-build/Makefile (original)
+++ subversion/branches/ev2-export/tools/dev/windows-build/Makefile Thu May 17 22:45:36 2012
@@ -128,7 +128,7 @@ all2: targetdir
 package:
 	test -d $(SVNDIR)\$(CONFIG)\Subversion\tests\cmdline || mkdir $(SVNDIR)\$(CONFIG)\Subversion\tests\cmdline
 	test -d $(TARGETDIR)\bin || mkdir $(TARGETDIR)\bin
-	for %%i in (svn svnadmin svndumpfilter svnlook svnserve svnsync svnversion svnrdump) do @$(CP) $(CONFIG)\subversion\%%i\%%i.exe $(TARGETDIR)\bin
+	for %%i in (svn svnadmin svndumpfilter svnlook svnserve svnsync svnversion svnrdump svnmucc) do @$(CP) $(CONFIG)\subversion\%%i\%%i.exe $(TARGETDIR)\bin
 	for %%i in (diff diff3 diff4) do @if exist $(CONFIG)\tools\diff\%%i.exe $(CP) $(CONFIG)\tools\diff\%%i.exe $(TARGETDIR)\bin
 	$(CP) $(APRDIR)\$(CONFIG)/*.dll $(TARGETDIR)\bin
 	$(CP) $(APRUTILDIR)\$(CONFIG)/*.dll $(TARGETDIR)\bin

Modified: subversion/branches/ev2-export/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/win-tests.py?rev=1339905&r1=1339904&r2=1339905&view=diff
==============================================================================
--- subversion/branches/ev2-export/win-tests.py (original)
+++ subversion/branches/ev2-export/win-tests.py Thu May 17 22:45:36 2012
@@ -660,8 +660,6 @@ if create_dirs:
     baton = copied_execs
     for dirpath, dirs, files in os.walk('subversion'):
       copy_execs(baton, dirpath, dirs + files)
-    for dirpath, dirs, files in os.walk('tools/client-side/svnmucc'):
-      copy_execs(baton, dirpath, dirs + files)
   except:
     os.chdir(old_cwd)
     raise