[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r36880 - in branches/subtree-mergeinfo: . build build/ac-macros build/generator build/generator/util build/win32 contrib/client-side/svnmerge notes/api-errata packages/rpm/redhat-8+ packages/rpm/rhel-3 packages/rpm/rhel-4 packages/rpm

From: Greg Stein <gstein_at_gmail.com>
Date: Tue, 31 Mar 2009 04:50:23 -0700 (PDT)

For efficiency reasons, the system has converted the large body of this message into an attachment.

attached mail follows:


btw... why is a branch being used? Is this experimental in some way?
Is it potentially destabilizing in some way that the development can't
happen on trunk? (I did see the list of failing tests you posted last
week)

Is there a way to structure the changes to keep it stable, yet do the
work on trunk?

Cheers,
-g

On Tue, Mar 31, 2009 at 04:15, Paul T. Burba <pburba_at_collab.net> wrote:
> For efficiency reasons, the system has converted the large body of this message into an attachment.
>
> ---------- Forwarded message ----------
> From: pburba_at_tigris.org
> To: svn_at_subversion.tigris.org
> Date: Mon, 30 Mar 2009 19:14:32 -0700
> Subject: svn commit: r36880 - in branches/subtree-mergeinfo: . build build/ac-macros build/generator build/generator/util build/win32 contrib/client-side/svnmerge notes/api-errata packages/rpm/redhat-8+ packages/rpm/rhel-3 packages/rpm/rhel-4 packages/rpm/rhel-5 subversion/bindings/javahl/native subversion/bindings/javahl/tests/org/tigris/subversion/javahl subversion/bindings/swig/python/svn subversion/bindings/swig/python/tests subversion/include subversion/include/private subversion/libsvn_client subversion/libsvn_diff subversion/libsvn_fs subversion/libsvn_fs_base subversion/libsvn_fs_fs subversion/libsvn_fs_util subversion/libsvn_ra_serf subversion/libsvn_subr subversion/libsvn_wc subversion/mod_dav_svn subversion/svn subversion/tests/cmdline subversion/tests/cmdline/svntest subversion/tests/libsvn_client subversion/tests/libsvn_subr subversion/tests/libsvn_wc tools/backup tools/bdb tools/client-side tools/dev tools/dist tools/examples tools/hook-scripts tools/hook-script s/mailer www www/images
> Author: pburba
> Date: Mon Mar 30 19:14:31 2009
> New Revision: 36880
>
> Log:
> On the subtree-mergeinfo branch: Sync merge from trunk, r36660-36879.
>
> Added:
>   branches/subtree-mergeinfo/notes/api-errata/wc003.txt
>      - copied unchanged from r36879, trunk/notes/api-errata/wc003.txt
>   branches/subtree-mergeinfo/packages/rpm/rhel-4/apache.patch
>      - copied unchanged from r36879, trunk/packages/rpm/rhel-4/apache.patch
>   branches/subtree-mergeinfo/packages/rpm/rhel-4/python-2.4.patch
>      - copied unchanged from r36879, trunk/packages/rpm/rhel-4/python-2.4.patch
>   branches/subtree-mergeinfo/subversion/tests/cmdline/entries-dump.c
>      - copied unchanged from r36879, trunk/subversion/tests/cmdline/entries-dump.c
>   branches/subtree-mergeinfo/www/svn_1.6_releasenotes.zh.html
>      - copied unchanged from r36879, trunk/www/svn_1.6_releasenotes.zh.html
> Deleted:
>   branches/subtree-mergeinfo/packages/rpm/redhat-8+/
> Modified:
>   branches/subtree-mergeinfo/   (props changed)
>   branches/subtree-mergeinfo/CHANGES
>   branches/subtree-mergeinfo/Makefile.in
>   branches/subtree-mergeinfo/build.conf
>   branches/subtree-mergeinfo/build/ac-macros/berkeley-db.m4
>   branches/subtree-mergeinfo/build/generator/ezt.py
>   branches/subtree-mergeinfo/build/generator/gen_base.py
>   branches/subtree-mergeinfo/build/generator/gen_win.py
>   branches/subtree-mergeinfo/build/generator/util/executable.py
>   branches/subtree-mergeinfo/build/transform_sql.py
>   branches/subtree-mergeinfo/build/win32/make_dist.py
>   branches/subtree-mergeinfo/contrib/client-side/svnmerge/svnmerge.py
>   branches/subtree-mergeinfo/gen-make.py
>   branches/subtree-mergeinfo/packages/rpm/rhel-3/subversion.spec
>   branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion-0.31.0-rpath.patch
>   branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion.spec
>   branches/subtree-mergeinfo/packages/rpm/rhel-5/subversion.spec
>   branches/subtree-mergeinfo/subversion/bindings/javahl/native/StatusCallback.cpp
>   branches/subtree-mergeinfo/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
>   branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/core.py
>   branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/fs.py
>   branches/subtree-mergeinfo/subversion/bindings/swig/python/tests/client.py
>   branches/subtree-mergeinfo/subversion/include/private/svn_fs_util.h
>   branches/subtree-mergeinfo/subversion/include/svn_client.h
>   branches/subtree-mergeinfo/subversion/include/svn_repos.h
>   branches/subtree-mergeinfo/subversion/include/svn_wc.h
>   branches/subtree-mergeinfo/subversion/libsvn_client/add.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/cat.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/client.h
>   branches/subtree-mergeinfo/subversion/libsvn_client/copy.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/delete.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/deprecated.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/externals.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/list.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/locking_commands.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/log.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/merge.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/mergeinfo.c
>   branches/subtree-mergeinfo/subversion/libsvn_client/status.c
>   branches/subtree-mergeinfo/subversion/libsvn_diff/diff_file.c
>   branches/subtree-mergeinfo/subversion/libsvn_fs/fs-loader.c
>   branches/subtree-mergeinfo/subversion/libsvn_fs_base/fs.c
>   branches/subtree-mergeinfo/subversion/libsvn_fs_fs/fs_fs.c
>   branches/subtree-mergeinfo/subversion/libsvn_fs_util/fs-util.c
>   branches/subtree-mergeinfo/subversion/libsvn_ra_serf/auth.c
>   branches/subtree-mergeinfo/subversion/libsvn_ra_serf/merge.c
>   branches/subtree-mergeinfo/subversion/libsvn_ra_serf/update.c
>   branches/subtree-mergeinfo/subversion/libsvn_subr/cache-memcache.c
>   branches/subtree-mergeinfo/subversion/libsvn_subr/dirent_uri.c
>   branches/subtree-mergeinfo/subversion/libsvn_subr/sqlite.c
>   branches/subtree-mergeinfo/subversion/libsvn_subr/subst.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/adm_crawler.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/adm_ops.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/copy.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/crop.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/deprecated.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/diff.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/entries.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/entries.h
>   branches/subtree-mergeinfo/subversion/libsvn_wc/lock.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/lock.h
>   branches/subtree-mergeinfo/subversion/libsvn_wc/log.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/log.h
>   branches/subtree-mergeinfo/subversion/libsvn_wc/old-and-busted.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/patch.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/revision_status.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/status.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/update_editor.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/wc-metadata.sql
>   branches/subtree-mergeinfo/subversion/libsvn_wc/wc_db.c
>   branches/subtree-mergeinfo/subversion/libsvn_wc/wc_db.h
>   branches/subtree-mergeinfo/subversion/mod_dav_svn/liveprops.c
>   branches/subtree-mergeinfo/subversion/mod_dav_svn/repos.c
>   branches/subtree-mergeinfo/subversion/svn/checkout-cmd.c
>   branches/subtree-mergeinfo/subversion/svn/list-cmd.c
>   branches/subtree-mergeinfo/subversion/svn/util.c
>   branches/subtree-mergeinfo/subversion/tests/cmdline/   (props changed)
>   branches/subtree-mergeinfo/subversion/tests/cmdline/changelist_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/davautocheck.sh
>   branches/subtree-mergeinfo/subversion/tests/cmdline/depth_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/diff_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/externals_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/info_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/log_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/merge_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/special_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/svnadmin_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/svndumpfilter_tests.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/svntest/actions.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/svntest/main.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/svntest/tree.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/svntest/verify.py
>   branches/subtree-mergeinfo/subversion/tests/cmdline/svntest/wc.py
>   branches/subtree-mergeinfo/subversion/tests/libsvn_client/client-test.c
>   branches/subtree-mergeinfo/subversion/tests/libsvn_subr/opt-test.c
>   branches/subtree-mergeinfo/subversion/tests/libsvn_wc/db-test.c
>   branches/subtree-mergeinfo/tools/backup/hot-backup.py.in
>   branches/subtree-mergeinfo/tools/bdb/erase-all-text-data.py
>   branches/subtree-mergeinfo/tools/bdb/skel.py
>   branches/subtree-mergeinfo/tools/client-side/change-svn-wc-format.py
>   branches/subtree-mergeinfo/tools/client-side/server-version.py
>   branches/subtree-mergeinfo/tools/dev/check-license.py
>   branches/subtree-mergeinfo/tools/dev/contribulyze.py
>   branches/subtree-mergeinfo/tools/dev/graph-dav-servers.py
>   branches/subtree-mergeinfo/tools/dev/normalize-dump.py
>   branches/subtree-mergeinfo/tools/dev/po-merge.py
>   branches/subtree-mergeinfo/tools/dev/scramble-tree.py
>   branches/subtree-mergeinfo/tools/dev/svn-merge-revs.py
>   branches/subtree-mergeinfo/tools/dev/trails.py
>   branches/subtree-mergeinfo/tools/dev/verify-history.py
>   branches/subtree-mergeinfo/tools/dev/which-error.py
>   branches/subtree-mergeinfo/tools/dist/roll.sh
>   branches/subtree-mergeinfo/tools/examples/blame.py
>   branches/subtree-mergeinfo/tools/examples/getfile.py
>   branches/subtree-mergeinfo/tools/examples/svnlook.py
>   branches/subtree-mergeinfo/tools/examples/svnshell.py
>   branches/subtree-mergeinfo/tools/hook-scripts/mailer/mailer.py
>   branches/subtree-mergeinfo/tools/hook-scripts/svnperms.py
>   branches/subtree-mergeinfo/tools/hook-scripts/verify-po.py
>   branches/subtree-mergeinfo/win-tests.py
>   branches/subtree-mergeinfo/www/getting.html
>   branches/subtree-mergeinfo/www/images/svn-dav-securityspace-survey.png
>   branches/subtree-mergeinfo/www/index.html
>   branches/subtree-mergeinfo/www/release-history.html
>   branches/subtree-mergeinfo/www/roadmap.html
>   branches/subtree-mergeinfo/www/svn-dav-securityspace-survey.html
>   branches/subtree-mergeinfo/www/svn_1.6_releasenotes.html
>   branches/subtree-mergeinfo/www/tasks.html
>   branches/subtree-mergeinfo/www/toctool.py
>
> Merged:
>   /trunk:r36660-36879
>
> Modified: branches/subtree-mergeinfo/CHANGES
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/CHANGES?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/CHANGES  Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/CHANGES  Mon Mar 30 19:14:31 2009        (r36880)
> @@ -1,3 +1,21 @@
> +Version 1.6.1
> +(?? ??? 2009, from /branches/1.6.x)
> +http://svn.collab.net/repos/svn/tags/1.6.1
> +
> + User-visible changes:
> +  * recommend Neon 0.28.4. (r36388)
> +  * improve performance of 'svn merge --ignore-ancestry' (r36256)
> +  * improve 'svn merge' performance with subtree mergeinfo (r36444)
> +  * correctly proxy LOCK and UNLOCK requests (r36159)
> +  * fixed: parent directory handling on Windows (r36049, -50, -51, -131)
> +  * fixed: unintialized memory errors (r36252, -3)
> +  * fixed: potential working copy corruption (r36714)
> +  * fixed: working copy upgrade error (r36302)
> +
> + Developer-visible changes:
> +  * fixed: warning with Python 2.6 and ctypes bindings (r36559)
> +
> +
>  Version 1.6.0
>  (20 Mar 2009, from /branches/1.6.x)
>  http://svn.collab.net/repos/svn/tags/1.6.0
> @@ -10,13 +28,13 @@ http://svn.collab.net/repos/svn/tags/1.6
>     * identical files share storage space in repository (issue #2286)
>     * file-externals support for intra-repository files (issue #937)
>     * "tree" conflicts now handled more gracefully (issue #2282, #2908)
> +    * repository root relative URL support on most commands (issue #3193)
>
>   - Minor new features and improvements:
>     * pre-lock hook can now specify lock tokens via stdout (r32778)
>     * svnmucc: support '--with-revprop' (r29492)
>     * merge: log include-descendants in operational log (r30426, r30428)
>     * improved operational logging for 'svn switch' (r30517)
> -    * PKCS#11 (smartcard) support in libsvn_ra_neon (r29512)
>     * new 'Header' keyword, similar to 'Id' but with full URL (r35386)
>     * warn/disallow when storing plain-text passwords (r31046)
>     * support KWallet and GNOME keyring for password storage (r31241, -337)
> @@ -24,11 +42,11 @@ http://svn.collab.net/repos/svn/tags/1.6
>     * add '--prefix-file' option to 'svndumpfilter' (issue #2697)
>     * add '--ignore-externals' option to 'svn cp' (issue #3365)
>     * add '--with-no-revprops' to 'svn log' (issue #3286)
> -    * Improved Python 3 compatibility
>     * new 'svnadmin pack' command to compress FSFS filesystems
>     * new SVNAllowBulkUpdates mod_dav_svn directive (issue #3121)
>     * new public mod_dav_svn URI syntax:  path?[p=PEG][&r=REV] (r34076)
>     * new 'svnsync info' command to show synchronization information (r35053)
> +    * conflict resolver supports display-conflict, mine-conflict and theirs-conflict
>
>   - Client-side bugfixes:
>     * faulty reflexive merges (issue #2897)
> @@ -53,7 +71,6 @@ http://svn.collab.net/repos/svn/tags/1.6
>     * can't add .svn (and children) to your wc via '--parents' (r35819)
>     * improved performance removing unversioned directories (r36111)
>     * 'svn cp --parents' had path URL encoding issues (issue #3374)
> -    * repository root relative URLs support peg revisions (issue #3193)
>     * support shell quoting rules in externals definitions (issue #2461)
>     * new SVN_LOCALE_DIR environment variable for localization (issue #2879)
>     * scheme and domain name in urls handled case insensitive (issue #2475)
> @@ -99,6 +116,8 @@ http://svn.collab.net/repos/svn/tags/1.6
>   - Bindings:
>     * new: ctypes python bindings
>     * many improvements to all bindings (Java, Perl, Python, and Ruby)
> +    * respect CFLAGS in SWIG bindings (r35879)
> +    * fix building Ruby bindings with Ruby 1.9 (r35852, r35883)
>
>
>  Version 1.5.6
> @@ -215,7 +234,7 @@ http://svn.collab.net/repos/svn/tags/1.5
>
>  Developer-visible changes:
>   * make libsvn_ra_neon initialization thread-safe (r32497, r32510)
> -  * respect LDFLAGS in Swig bindings (r32416, r32421, r32442)
> +  * respect LDFLAGS in SWIG bindings (r32416, r32421, r32442)
>   * fixed: test failures in non-English locales (r32491)
>
>
>
> Modified: branches/subtree-mergeinfo/Makefile.in
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/Makefile.in?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/Makefile.in      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/Makefile.in      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -326,9 +326,11 @@ locale-gnu-po-update:
>  # to before 'make' was run.
>  fast-clean: doc-clean
>        @list='$(BUILD_DIRS)'; for i in $$list; do                   \
> +          if [ -d $$i ]; then                                        \
>             echo "Cleaning $$i ..." ;                                \
> -            (cd $$i && rm -f *.o *.lo *.la *.la-a *.spo *.mo && \
> -             rm -rf .libs) ; \
> +            (cd $$i && rm -f *.o *.lo *.la *.la-a *.spo *.mo &&      \
> +             rm -rf .libs);                                          \
> +          fi                                                         \
>         done
>        rm -f $(CLEAN_FILES) \
>             $(abs_srcdir)/subversion/libsvn_fs_fs/rep-cache-db.h \
> @@ -430,36 +432,36 @@ check: bin $(TEST_DEPS) @BDB_TEST_DEPS@
>
>  # First, set up Apache as documented in
>  # subversion/tests/cmdline/README.
> -davcheck:
> +davcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@
>        @$(MAKE) check BASE_URL=http://localhost
>
>  # Automatically configure and run Apache httpd on a random port, and then
>  # run make check.
> -davautocheck:
> +davautocheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@
>        @APXS=$(APXS) bash $(top_srcdir)/subversion/tests/cmdline/davautocheck.sh
>
>  # First, run:
>  #   subversion/svnserve/svnserve -d -r `pwd`/subversion/tests/cmdline
> -svncheck:
> +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
> +svnserveautocheck: svnserve bin $(TEST_DEPS) @BDB_TEST_DEPS@
>        bash $(top_srcdir)/subversion/tests/cmdline/svnserveautocheck.sh
>
>  # First, run:
>  #   subversion/svnserve/svnserve --listen-host "::1" -d -r `pwd`/subversion/tests/cmdline
>
> -svncheck6:
> +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:
> +svnsshcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@
>        @$(MAKE) check \
>          BASE_URL=svn+ssh://localhost`pwd`/subversion/tests/cmdline
>
> -bdbcheck:
> +bdbcheck: bin $(TEST_DEPS) @BDB_TEST_DEPS@
>        @$(MAKE) check FS_TYPE=bdb
>
>  check-clean:
>
> Modified: branches/subtree-mergeinfo/build.conf
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/build.conf?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/build.conf       Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/build.conf       Mon Mar 30 19:14:31 2009        (r36880)
> @@ -3,7 +3,7 @@
>  #
>  ######################################################################
>  #
> -# Copyright (c) 2000-2008 CollabNet.  All rights reserved.
> +# Copyright (c) 2000-2009 CollabNet.  All rights reserved.
>  #
>  # This software is licensed as described in the file COPYING, which
>  # you should have received as part of this distribution.  The terms
> @@ -259,7 +259,7 @@ description = Subversion Repository File
>  type = lib
>  path = subversion/libsvn_fs
>  install = ramod-lib
> -libs = libsvn_subr fs-libs apr
> +libs = libsvn_fs_util libsvn_subr fs-libs apr
>  # conditionally add more dependencies
>  add-deps = $(SVN_FS_LIB_DEPS)
>  add-install-deps = $(SVN_FS_LIB_INSTALL_DEPS)
> @@ -899,6 +899,14 @@ install = test
>  libs = libsvn_delta libsvn_subr apriconv apr
>  testing = skip
>
> +[entries-dump]
> +type = exe
> +path = subversion/tests/cmdline
> +sources = entries-dump.c
> +install = test
> +libs = libsvn_wc libsvn_subr apriconv apr
> +testing = skip
> +
>
>  # ----------------------------------------------------------------------------
>  #
>
> Modified: branches/subtree-mergeinfo/build/ac-macros/berkeley-db.m4
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/build/ac-macros/berkeley-db.m4?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/build/ac-macros/berkeley-db.m4   Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/build/ac-macros/berkeley-db.m4   Mon Mar 30 19:14:31 2009        (r36880)
> @@ -161,9 +161,9 @@ AC_DEFUN(SVN_LIB_BERKELEY_DB_TRY,
>     # Or that it resides in a non-standard location which we would have
>     # to compensate with using something like -R`$apu_config --prefix`/lib.
>     #
> -    SVN_DB_LIBS=["${SVN_DB_LIBS-`$apu_config --libs | $EGREP -o -- '-ldb[^[:space:]]*'`}"]
> +    SVN_DB_LIBS=["${SVN_DB_LIBS-`$apu_config --libs | sed -e 's/.*\(-ldb[^[:space:]]*\).*/\1/' | $EGREP -- '-ldb[^[:space:]]*'`}"]
>
> -    CPPFLAGS="$SVN_APRUTIL_INCLUDES $SVN_DB_INCLUDES $CPPFLAGS"
> +    CPPFLAGS="$SVN_DB_INCLUDES $SVN_APRUTIL_INCLUDES $CPPFLAGS"
>     LIBS="`$apu_config --ldflags` $SVN_DB_LIBS $LIBS"
>
>     if test -n "$svn_berkeley_db_header"; then
>
> Modified: branches/subtree-mergeinfo/build/generator/ezt.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/build/generator/ezt.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/build/generator/ezt.py   Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/build/generator/ezt.py   Mon Mar 30 19:14:31 2009        (r36880)
> @@ -356,7 +356,7 @@ class Template:
>
>     # if the value has a 'read' attribute, then it is a stream: copy it
>     if hasattr(value, 'read'):
> -      while 1:
> +      while True:
>         chunk = value.read(16384)
>         if not chunk:
>           break
>
> Modified: branches/subtree-mergeinfo/build/generator/gen_base.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/build/generator/gen_base.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/build/generator/gen_base.py      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/build/generator/gen_base.py      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -932,7 +932,7 @@ class IncludeDependencyInfo:
>       self._deps[fname] = {}
>
>     # Keep recomputing closures until we see no more changes
> -    while 1:
> +    while True:
>       changes = 0
>       for fname in self._deps.keys():
>         changes = self._include_closure(self._deps[fname]) or changes
>
> Modified: branches/subtree-mergeinfo/build/generator/gen_win.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/build/generator/gen_win.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/build/generator/gen_win.py       Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/build/generator/gen_win.py       Mon Mar 30 19:14:31 2009        (r36880)
> @@ -1173,27 +1173,32 @@ class WinGeneratorBase(GeneratorBase):
>     self.jdk_path = None
>     jdk_ver = None
>     try:
> -      import _winreg
> -      key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
> -                            r"SOFTWARE\JavaSoft\Java Development Kit")
> +      try:
> +        # Python >=3.0
> +        import winreg
> +      except ImportError:
> +        # Python <3.0
> +        import _winreg as winreg
> +      key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
> +                           r"SOFTWARE\JavaSoft\Java Development Kit")
>       # Find the newest JDK version.
> -      num_values = _winreg.QueryInfoKey(key)[1]
> +      num_values = winreg.QueryInfoKey(key)[1]
>       for i in range(num_values):
> -        (name, value, key_type) = _winreg.EnumValue(key, i)
> +        (name, value, key_type) = winreg.EnumValue(key, i)
>         if name == "CurrentVersion":
>           jdk_ver = value
>           break
>
>       # Find the JDK path.
>       if jdk_ver is not None:
> -        key = _winreg.OpenKey(key, jdk_ver)
> -        num_values = _winreg.QueryInfoKey(key)[1]
> +        key = winreg.OpenKey(key, jdk_ver)
> +        num_values = winreg.QueryInfoKey(key)[1]
>         for i in range(num_values):
> -          (name, value, key_type) = _winreg.EnumValue(key, i)
> +          (name, value, key_type) = winreg.EnumValue(key, i)
>           if name == "JavaHome":
>             self.jdk_path = value
>             break
> -      _winreg.CloseKey(key)
> +      winreg.CloseKey(key)
>     except (ImportError, EnvironmentError):
>       pass
>     if self.jdk_path:
>
> Modified: branches/subtree-mergeinfo/build/generator/util/executable.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/build/generator/util/executable.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/build/generator/util/executable.py       Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/build/generator/util/executable.py       Mon Mar 30 19:14:31 2009        (r36880)
> @@ -26,9 +26,9 @@ def output(cmd, strip=None):
>   """Run a command and collect all output"""
>   # Check that cmd is in PATH (otherwise we'd get a generic OSError later)
>   import distutils.spawn
> -  if type(cmd) == type(''):
> +  if isinstance(cmd, str):
>     cmdname = cmd
> -  elif type(cmd) == type([]):
> +  elif isinstance(cmd, list):
>     cmdname = cmd[0]
>   if distutils.spawn.find_executable(cmdname) is None:
>     return None
>
> Modified: branches/subtree-mergeinfo/build/transform_sql.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/build/transform_sql.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/build/transform_sql.py   Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/build/transform_sql.py   Mon Mar 30 19:14:31 2009        (r36880)
> @@ -42,7 +42,7 @@ def main(input, output, filename):
>
>     if line.strip():
>       # got something besides whitespace. write it out.
> -      output.write('  "' + line + '"\\\n')
> +      output.write('  "' + line + '\\n"\\\n')
>
>   output.write('  ""\n')
>
>
> Modified: branches/subtree-mergeinfo/build/win32/make_dist.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/build/win32/make_dist.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/build/win32/make_dist.py Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/build/win32/make_dist.py Mon Mar 30 19:14:31 2009        (r36880)
> @@ -443,7 +443,7 @@ def _make_dist(cfg):
>       action = _disttree[reldir]
>       if action is None:
>         continue
> -      if type(action) == type(()):
> +      if isinstance(action, tuple):
>         for subaction in action:
>           subaction.run(dir, cfg)
>       else:
>
> Modified: branches/subtree-mergeinfo/contrib/client-side/svnmerge/svnmerge.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/contrib/client-side/svnmerge/svnmerge.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/contrib/client-side/svnmerge/svnmerge.py Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/contrib/client-side/svnmerge/svnmerge.py Mon Mar 30 19:14:31 2009        (r36880)
> @@ -913,7 +913,7 @@ def set_props(dir, name, props):
>         # As of 1.6 propdel no longer supports deleting a
>         # non-existent property.
>         out = launchsvn('propget "%s" "%s"' % (name, dir))
> -        if (len(out) > 0):
> +        if out:
>             svn_command('propdel "%s" "%s"' % (name, dir))
>
>  def set_merge_props(dir, props):
>
> Modified: branches/subtree-mergeinfo/gen-make.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/gen-make.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/gen-make.py      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/gen-make.py      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -55,7 +55,7 @@ def main(fname, gentype, verfname=None,
>     gen_keys = sorted(generator.__dict__.keys())
>     for name in gen_keys:
>       value = generator.__dict__[name]
> -      if type(value) == type([]):
> +      if isinstance(value, list):
>         print(name + ": ")
>         for i in value:
>           print("  " + _objinfo(i))
> @@ -63,7 +63,7 @@ def main(fname, gentype, verfname=None,
>
>
>  def _objinfo(o):
> -  if type(o) == type(''):
> +  if isinstance(o, str):
>     return repr(o)
>   else:
>     t = o.__class__.__name__
>
> Copied: branches/subtree-mergeinfo/notes/api-errata/wc003.txt (from r36879, trunk/notes/api-errata/wc003.txt)
> ==============================================================================
> --- /dev/null   00:00:00 1970   (empty, because file is newly added)
> +++ branches/subtree-mergeinfo/notes/api-errata/wc003.txt       Mon Mar 30 19:14:31 2009        (r36880, copy of r36879, trunk/notes/api-errata/wc003.txt)
> @@ -0,0 +1,84 @@
> +API ERRATA -- $Id$
> +
> +Root Cause of Errata: incompatible
> + Library(s) Affected: libsvn_wc
> +Function(s) Affected: svn_wc_entry
> +                      svn_wc_entries_read
> +     New Behavior in: 1.7
> +      Related Issues: n/a
> +
> +
> +== Details of Previous Behavior ==
> +
> +Entries can record copyfrom_url and copyfrom_rev, indicating they are
> +the root of a copied subtree. Children of this subtree are marked as
> +COPIED, but have null information for the url and rev. These children
> +may also have revision values that different from their parent,
> +indicating a copy of a mixed-rev working copy subtree.
> +
> +The copyfrom information could be attached to a node, written into the
> +entries file, and retrieved as written.
> +
> +
> +== Details of New Behavior ==
> +
> +If the copyfrom_url of a child is equal to its parent's copyfrom_url
> +joined with the child's name, then it will be omitted from the entry
> +record.
> +
> +From a behavior standpoint, the two data representations are
> +equivalent. The child gets its copyfrom information inherited from its
> +parent, rather than explicitly stating what it will be.
> +
> +The copyfrom_rev is also left unset, since entry->revision contains
> +that information.
> +
> +
> +== Rationale for Change ==
> +
> +The old entries system allowed for a copied subtree to contain mixed
> +source revisions, but it would *not* record these in the copyfrom_rev
> +field. The variant revisions were stored in entry->revision instead.
> +
> +The new storage system only has the copyfrom_rev concept, but *not* a
> +separate revision. Thus, when a change in revision value is detected,
> +a second copyfrom record is constructed, indicating a copy of the
> +different revision.
> +
> +[ Note: This is conceptually correct, and is even how we perform the
> +        commit: at a series of copies of each source path/rev pair.
> +        Thus, our new storage system is closer to the intended changes
> +        to be made at commit time. ]
> +
> +On retrieval, subversion does not expect these extra copyfrom
> +records. They look like multiple "add with history", rather than the
> +*actual* operation of a single add of a mixed-rev subtree. Thus, we
> +look for these "introduced" copyfrom records at retrieval time, and
> +elide them, producing the original mixed-rev subtree.
> +
> +The variant behavior occurs when multiple add-with-history operations
> +*did* occur. The old behavior would report a copyfrom in multiple
> +locations, even though it is redundant due to the parent/child
> +relationship in the copyfrom_url. Some code "expects" these multiple
> +adds-with-histories.
> +
> +
> +== Impact on API Users ==
> +
> +The change could go in one of two directions:
> +
> +1) add the extra copies, and let API clients see them
> +2) hide the extra copies, but unknowningly hide true multiple-adds
> +
> +We've decided on the second because it removes information from the
> +data flow, rather than introducing new data. For all the callers may
> +know, this is simply an optimization made internally when we see a
> +parent/child pair of copyfrom records align with each other.
> +
> +There should be little impact on callers since the data represents the
> +exact same resulting state. We're simply removing some indication of
> +*how* that state was arrived at. Hopefully, API users do not care
> +about the historical aspect of the state.
> +
> +Note: we actually perform fewer operations during the commit process
> +as a result of collapsing the copyfrom information.
>
> Modified: branches/subtree-mergeinfo/packages/rpm/rhel-3/subversion.spec
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/packages/rpm/rhel-3/subversion.spec?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/packages/rpm/rhel-3/subversion.spec      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/packages/rpm/rhel-3/subversion.spec      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -99,6 +99,11 @@ Summary: Tools for Subversion
>  Tools for Subversion.
>
>  %changelog
> +* Sat Mar 28 2009 David Summers <david_at_summersoft.fay.ar.us> r36833
> +- [RHEL4] Changes to build 1.7 trunk, backported to 1.6.
> +- Added patch to build with with new required non-RHEL4 python-2.4.6.
> +- Added patch to fix Subversion APACHE APR version checking.
> +
>  * Sun Mar 01 2009 David Summers <david_at_summersoft.fay.ar.us> r36231
>  - [RHEL5] Changes to build 1.7 trunk, backported to 1.6.
>
>
> Copied: branches/subtree-mergeinfo/packages/rpm/rhel-4/apache.patch (from r36879, trunk/packages/rpm/rhel-4/apache.patch)
> ==============================================================================
> --- /dev/null   00:00:00 1970   (empty, because file is newly added)
> +++ branches/subtree-mergeinfo/packages/rpm/rhel-4/apache.patch Mon Mar 30 19:14:31 2009        (r36880, copy of r36879, trunk/packages/rpm/rhel-4/apache.patch)
> @@ -0,0 +1,17 @@
> +Fix the check for APACHE to correctly check APR version.
> +
> +--- build/ac-macros/apache.m4  2009/03/29 02:32:42     1.1
> ++++ build/ac-macros/apache.m4  2009/03/29 02:32:52
> +@@ -85,10 +85,10 @@
> +       AC_MSG_ERROR([unknown APR version])
> +       ;;
> +   esac
> +-  AC_EGREP_CPP([apache_minor_version= *$apache_minor_version_wanted_regex],
> ++  AC_EGREP_CPP([apache_minor_version=.*$apache_minor_version_wanted_regex],
> +                [
> + #include "$APXS_INCLUDE/ap_release.h"
> +-apache_minor_version=AP_SERVER_MINORVERSION_NUMBER],
> ++apache_minor_version=AP_SERVER_MINORVERSION],
> +                [AC_MSG_RESULT([yes])],
> +                [AC_MSG_RESULT([no])
> +                 AC_MSG_ERROR([Apache version incompatible with APR version])])
>
> Copied: branches/subtree-mergeinfo/packages/rpm/rhel-4/python-2.4.patch (from r36879, trunk/packages/rpm/rhel-4/python-2.4.patch)
> ==============================================================================
> --- /dev/null   00:00:00 1970   (empty, because file is newly added)
> +++ branches/subtree-mergeinfo/packages/rpm/rhel-4/python-2.4.patch     Mon Mar 30 19:14:31 2009        (r36880, copy of r36879, trunk/packages/rpm/rhel-4/python-2.4.patch)
> @@ -0,0 +1,14 @@
> +
> +Patch find_python.sh to find the python2.4 on older version of RHEL (3,4).
> +
> +--- build/find_python.sh.old
> ++++ build/find_python.sh
> +@@ -5,7 +5,7 @@
> + # Python 2.4 = 0x2040000
> + VERSION=${1:-0x2040000}
> +
> +-for pypath in "$PYTHON" "$PYTHON2" "$PYTHON3" python python2 python3; do
> ++for pypath in "$PYTHON" "$PYTHON2" "$PYTHON3" python2.4 python python2 python3; do
> +   if [ "x$pypath" != "x" ]; then
> +     DETECT_PYTHON="import sys;sys.exit((sys.hexversion < $VERSION) and 1 or 0)"
> +     if "$pypath" -c "$DETECT_PYTHON" >/dev/null 2>/dev/null; then
>
> Modified: branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion-0.31.0-rpath.patch
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion-0.31.0-rpath.patch?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion-0.31.0-rpath.patch        Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion-0.31.0-rpath.patch        Mon Mar 30 19:14:31 2009        (r36880)
> @@ -16,13 +16,13 @@ not programs.
>    def __init__(self, name, options, cfg, extmap):
>  --- subversion-0.31.0/Makefile.in.rpath
>  +++ subversion-0.31.0/Makefile.in
> -@@ -127,7 +127,8 @@
> - COMPILE_SWIG_JAVA = $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) $(SWIG_JAVA_INCLUDES) $(INCLUDES) -o $@ -c
> - COMPILE_SWIG_PL = $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) $(SWIG_PL_INCLUDES) $(INCLUDES) -o $@ -c
> +@@ -183,7 +183,8 @@
> + COMPILE_JAVAHL_JAVAC = $(JAVAC) $(JAVAC_FLAGS)
> + COMPILE_JAVAHL_JAVAH = $(JAVAH)
>
>  -LINK = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS) -rpath $(libdir)
>  +LINK = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS)
>  +LINK_LIB = $(LINK) -rpath $(libdir)
> + LINK_CXX = $(LIBTOOL) $(LTCXXFLAGS) --mode=link $(CXX) $(LT_LDFLAGS) $(CXXFLAGS) $(LDFLAGS) -rpath $(libdir)
>
>  # special link rule for mod_dav_svn
> - LINK_APACHE_MOD = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS) -rpath $(APACHE_LIBEXECDIR) -avoid-version -module
>
> Modified: branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion.spec
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion.spec?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion.spec      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/packages/rpm/rhel-4/subversion.spec      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -1,6 +1,8 @@
>  %define apache_version 2.0.52
>  %define apr_version 0.9.7
>  %define neon_version 0.26.1
> +%define python_version 2.4
> +%define sqlite_version 3.4
>  %define swig_version 1.3.25
>  %define apache_dir /usr
>  %define pyver 2.3
> @@ -21,12 +23,15 @@ URL: http://subversion.tigris.org
>  SOURCE0: subversion-%{version}-%{release}.tar.gz
>  SOURCE3: filter-requires.sh
>  Patch1: subversion-0.31.0-rpath.patch
> +Patch2: python-2.4.patch
> +Patch3: apache.patch
>  Vendor: Summersoft
>  Packager: David Summers <david_at_summersoft.fay.ar.us>
>  Requires: apr >= %{apr_version}
>  Requires: apr-util >= %{apr_version}
>  Requires: db4 >= 4.2.52
>  Requires: neon >= %{neon_version}
> +Requires: sqlite >= %{sqlite_version}
>  BuildPreReq: autoconf >= 2.53
>  BuildPreReq: db4-devel >= 4.2.52
>  BuildPreReq: docbook-style-xsl >= 1.58.1
> @@ -41,9 +46,10 @@ BuildPreReq: libxslt >= 1.0.27
>  BuildPreReq: neon-devel >= %{neon_version}
>  BuildPreReq: openssl-devel
>  BuildPreReq: perl
> -BuildPreReq: python
> -BuildPreReq: python-devel
> +BuildPreReq: python%{python_version} >= %{python_version}
> +BuildPreReq: python%{python_version}-devel >= %{python_version}
>  BuildPreReq: swig >= %{swig_version}
> +BuildPreReq: sqlite >= %{sqlite_version}
>  BuildPreReq: zlib-devel
>  Obsoletes: subversion-server
>  BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
> @@ -94,7 +100,7 @@ Provides Perl (SWIG) support for Subvers
>  %package python
>  Group: Utilities/System
>  Summary: Allows Python scripts to directly use Subversion repositories.
> -Requires: python >= 2
> +Requires: python%{python_version} >= %{python_version}
>  %description python
>  Provides Python (SWIG) support for Subversion.
>
> @@ -105,6 +111,11 @@ Summary: Tools for Subversion
>  Tools for Subversion.
>
>  %changelog
> +* Sat Mar 28 2009 David Summers <david_at_summersoft.fay.ar.us> r36833
> +- [RHEL4] Changes to build 1.7 trunk, backported to 1.6.
> +- Added patch to build with with new required non-RHEL4 python-2.4.6.
> +- Added patch to fix Subversion APACHE APR version checking.
> +
>  * Sun Mar 01 2009 David Summers <david_at_summersoft.fay.ar.us> r36231
>  - [RHEL5] Changes to build 1.7 trunk, backported to 1.6.
>
> @@ -492,7 +503,11 @@ Tools for Subversion.
>  %setup -q
>
>  # Patch for RPATH
> -%patch1 -p1
> +%patch1 -p1 -b .rpath
> +# Patch for python-2.4.6
> +%patch2 -p0 -b .python
> +# Patch for apache APR version checking.
> +%patch3 -p0 -b .apache
>
>  if [ -f /usr/bin/autoconf-2.53 ]; then
>    AUTOCONF="autoconf-2.53"
> @@ -506,6 +521,8 @@ sh autogen.sh
>  rm -rf apr apr-util neon
>
>
> +SED=/bin/sed
> +export SED
>  %configure \
>        --disable-mod-activation \
>        --with-swig \
> @@ -513,7 +530,8 @@ rm -rf apr apr-util neon
>        --with-python=%{_bindir}/python%{pyver} \
>        --with-apxs=%{apache_dir}/sbin/apxs \
>        --with-apr=%{apache_dir}/bin/apr-config \
> -       --with-apr-util=%{apache_dir}/bin/apu-config
> +       --with-apr-util=%{apache_dir}/bin/apu-config \
> +       --with-neon
>
>  %build
>  make clean
>
> Modified: branches/subtree-mergeinfo/packages/rpm/rhel-5/subversion.spec
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/packages/rpm/rhel-5/subversion.spec?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/packages/rpm/rhel-5/subversion.spec      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/packages/rpm/rhel-5/subversion.spec      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -108,6 +108,11 @@ Summary: Tools for Subversion
>  Tools for Subversion.
>
>  %changelog
> +* Sat Mar 28 2009 David Summers <david_at_summersoft.fay.ar.us> r36833
> +- [RHEL4] Changes to build 1.7 trunk, backported to 1.6.
> +- Added patch to build with with new required non-RHEL4 python-2.4.6.
> +- Added patch to fix Subversion APACHE APR version checking.
> +
>  * Sun Mar 01 2009 David Summers <david_at_summersoft.fay.ar.us> r36231
>  - [RHEL5] Changes to build 1.7 trunk, backported to 1.6.
>
>
> Modified: branches/subtree-mergeinfo/subversion/bindings/javahl/native/StatusCallback.cpp
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/bindings/javahl/native/StatusCallback.cpp?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/bindings/javahl/native/StatusCallback.cpp     Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/bindings/javahl/native/StatusCallback.cpp     Mon Mar 30 19:14:31 2009        (r36880)
> @@ -195,7 +195,7 @@ StatusCallback::createJavaStatus(const c
>       if (JNIUtil::isJavaExceptionThrown())
>         return NULL;
>
> -      svn_wc_entry_t *entry = status->entry;
> +      const svn_wc_entry_t *entry = status->entry;
>       if (entry != NULL)
>         {
>           jNodeKind = EnumMapper::mapNodeKind(entry->kind);
>
> Modified: branches/subtree-mergeinfo/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java    Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java    Mon Mar 30 19:14:31 2009        (r36880)
> @@ -2164,13 +2164,10 @@ public class BasicTests extends SVNTests
>             // examining the WC.
>             assertEquals("Unexpected repos file size for '" + info + '\'',
>                          -1, info.getReposSize());
> -        }
> -        Revision rev = new Revision.Number(1);
> -        infos = client.info2(thisTest.getWCPath(), rev, rev, true);
> -        assertEquals(failureMsg, 21, infos.length);
>
> -        // Examine default
> -        assertEquals(Depth.unknown, infos[0].getDepth());
> +           // Examine depth
> +           assertEquals(Depth.infinity, info.getDepth());
> +        }
>
>         // Create wc with a depth of Depth.empty
>         String secondWC = thisTest.getWCPath() + ".empty";
>
> Modified: branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/core.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/core.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/core.py      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/core.py      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -121,7 +121,7 @@ def svn_path_compare_paths(path1, path2)
>
>   # Common prefix was skipped above, next character is compared to
>   # determine order
> -  return cmp(char1, char2)
> +  return (char1 > char2) - (char1 < char2)
>
>  def svn_mergeinfo_merge(mergeinfo, changes):
>   return _libsvncore.svn_swig_mergeinfo_merge(mergeinfo, changes)
> @@ -144,7 +144,7 @@ class Stream:
>     if amt is None:
>       # read the rest of the stream
>       chunks = [ ]
> -      while 1:
> +      while True:
>         data = svn_stream_read(self._stream, SVN_STREAM_CHUNK_SIZE)
>         if not data:
>           break
>
> Modified: branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/fs.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/fs.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/fs.py        Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/bindings/swig/python/svn/fs.py        Mon Mar 30 19:14:31 2009        (r36880)
> @@ -73,7 +73,7 @@ class FileDiff:
>     if path is not None:
>       stream = file_contents(root, path, pool)
>       try:
> -        while 1:
> +        while True:
>           chunk = _svncore.svn_stream_read(stream, _svncore.SVN_STREAM_CHUNK_SIZE)
>           if not chunk:
>             break
>
> Modified: branches/subtree-mergeinfo/subversion/bindings/swig/python/tests/client.py
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/bindings/swig/python/tests/client.py?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/bindings/swig/python/tests/client.py  Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/bindings/swig/python/tests/client.py  Mon Mar 30 19:14:31 2009        (r36880)
> @@ -5,7 +5,12 @@ from svn.core import SubversionException
>
>  from trac.versioncontrol.tests.svn_fs import SubversionRepositoryTestSetup, \
>   REPOS_PATH, REPOS_URL
> -from urlparse import urljoin
> +try:
> +  # Python >=3.0
> +  from urllib.parse import urljoin
> +except ImportError:
> +  # Python <3.0
> +  from urlparse import urljoin
>
>  class SubversionClientTestCase(unittest.TestCase):
>   """Test cases for the basic SWIG Subversion client layer"""
>
> Modified: branches/subtree-mergeinfo/subversion/include/private/svn_fs_util.h
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/include/private/svn_fs_util.h?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/include/private/svn_fs_util.h Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/include/private/svn_fs_util.h Mon Mar 30 19:14:31 2009        (r36880)
> @@ -3,7 +3,7 @@
>  * consumed by only fs_* libs.
>  *
>  * ====================================================================
> - * Copyright (c) 2007 CollabNet.  All rights reserved.
> + * Copyright (c) 2007, 2009 CollabNet.  All rights reserved.
>  *
>  * This software is licensed as described in the file COPYING, which
>  * you should have received as part of this distribution.  The terms
> @@ -169,6 +169,17 @@ svn_fs__next_entry_name(const char **nex
>                         const char *path,
>                         apr_pool_t *pool);
>
> +/* Allocate an svn_fs_path_change2_t structure in POOL, initialize and
> +   return it.
> +
> +   Set the node_rev_id field of the created struct to NODE_REV_ID, and
> +   change_kind to CHANGE_KIND.  Set all other fields to their _unknown,
> +   NULL or invalid value, respectively. */
> +svn_fs_path_change2_t *
> +svn_fs__path_change2_create(const svn_fs_id_t *node_rev_id,
> +                            svn_fs_path_change_kind_t change_kind,
> +                            apr_pool_t *pool);
> +
>  #ifdef __cplusplus
>  }
>  #endif /* __cplusplus */
>
> Modified: branches/subtree-mergeinfo/subversion/include/svn_client.h
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/include/svn_client.h?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/include/svn_client.h  Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/include/svn_client.h  Mon Mar 30 19:14:31 2009        (r36880)
> @@ -1834,8 +1834,33 @@ svn_client_commit(svn_client_commit_info
>  * it's a member of one of those changelists.  If @a changelists is
>  * empty (or altogether @c NULL), no changelist filtering occurs.
>  *
> + * All temporary allocations are performed in @a scratch_pool.
> + *
> + * @since New in 1.7.
> + */
> +svn_error_t *
> +svn_client_status5(svn_revnum_t *result_rev,
> +                   const char *path,
> +                   const svn_opt_revision_t *revision,
> +                   svn_wc_status_func4_t status_func,
> +                   void *status_baton,
> +                   svn_depth_t depth,
> +                   svn_boolean_t get_all,
> +                   svn_boolean_t update,
> +                   svn_boolean_t no_ignore,
> +                   svn_boolean_t ignore_externals,
> +                   const apr_array_header_t *changelists,
> +                   svn_client_ctx_t *ctx,
> +                   apr_pool_t *scratch_pool);
> +
> +/**
> + * Same as svn_client_status5(), but using @c svn_wc_status_func3_t
> + * instead of @c svn_wc_status_func4_t.
> + *
>  * @since New in 1.6.
> + * @deprecated Provided for backward compatibility with the 1.6 API.
>  */
> +SVN_DEPRECATED
>  svn_error_t *
>  svn_client_status4(svn_revnum_t *result_rev,
>                    const char *path,
>
> Modified: branches/subtree-mergeinfo/subversion/include/svn_repos.h
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/include/svn_repos.h?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/include/svn_repos.h   Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/include/svn_repos.h   Mon Mar 30 19:14:31 2009        (r36880)
> @@ -2181,12 +2181,9 @@ svn_repos_dump_fs(svn_repos_t *repos,
>
>  /**
>  * Read and parse dumpfile-formatted @a dumpstream, reconstructing
> - * filesystem revisions in already-open @a repos, handling uuids
> - * in accordance with @a uuid_action.
> - *
> - * Read and parse dumpfile-formatted @a dumpstream, reconstructing
> - * filesystem revisions in already-open @a repos.  Use @a pool for all
> - * allocation.  If non-_at_c NULL, send feedback to @a feedback_stream.
> + * filesystem revisions in already-open @a repos, handling uuids in
> + * accordance with @a uuid_action.  If non-_at_c NULL, send feedback to
> + * @a feedback_stream.  Use @a pool for all allocation.
>  *
>  * If the dumpstream contains copy history that is unavailable in the
>  * repository, an error will be thrown.
>
> Modified: branches/subtree-mergeinfo/subversion/include/svn_wc.h
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/include/svn_wc.h?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/include/svn_wc.h      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/include/svn_wc.h      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -55,7 +55,6 @@
>  #include "svn_delta.h"     /* for svn_stream_t */
>  #include "svn_opt.h"
>  #include "svn_ra.h"        /* for svn_ra_reporter_t type */
> -#include "svn_ra_svn.h"    /* for svn_ra_svn_item_t type */
>  #include "svn_version.h"
>
>  #ifdef __cplusplus
> @@ -2837,7 +2836,7 @@ enum svn_wc_status_kind
>  typedef struct svn_wc_status2_t
>  {
>   /** Can be @c NULL if not under version control. */
> -  svn_wc_entry_t *entry;
> +  const svn_wc_entry_t *entry;
>
>   /** The status of the entries text. */
>   enum svn_wc_status_kind text_status;
> @@ -2952,7 +2951,7 @@ typedef struct svn_wc_status2_t
>  typedef struct svn_wc_status_t
>  {
>   /** Can be @c NULL if not under version control. */
> -  svn_wc_entry_t *entry;
> +  const svn_wc_entry_t *entry;
>
>   /** The status of the entries text. */
>   enum svn_wc_status_kind text_status;
> @@ -3060,9 +3059,25 @@ svn_wc_status(svn_wc_status_t **status,
>  * @a baton is a closure object; it should be provided by the
>  * implementation, and passed by the caller.
>  *
> - * @a pool will be cleared between invocations to the callback.
> + * @a scratch_pool will be cleared between invocations to the callback.
> + *
> + * ### we might be revamping the status infrastructure, and this callback
> + * ### could totally disappear by the end of 1.7 development. however, we
> + * ### need to mark the STATUS parameter as "const" so that it is easier
> + * ### to reason about who/what can modify those structures.
> + *
> + * @since New in 1.7.
> + */
> +typedef svn_error_t *(*svn_wc_status_func4_t)(void *baton,
> +                                              const char *path,
> +                                              const svn_wc_status2_t *status,
> +                                              apr_pool_t *scratch_pool);
> +
> +/**
> + * Same as svn_wc_status_func4_t, but with a non-const status.
>  *
>  * @since New in 1.6.
> + * @deprecated Provided for backward compatibility with the 1.6 API.
>  */
>  typedef svn_error_t *(*svn_wc_status_func3_t)(void *baton,
>                                               const char *path,
> @@ -3070,7 +3085,7 @@ typedef svn_error_t *(*svn_wc_status_fun
>                                               apr_pool_t *pool);
>
>  /**
> - * Same as svn_wc_status_func3_t(), but without a provided pool or
> + * Same as svn_wc_status_func3_t, but without a provided pool or
>  * the ability to propagate errors.
>  *
>  * @since New in 1.2.
> @@ -3081,7 +3096,7 @@ typedef void (*svn_wc_status_func2_t)(vo
>                                       svn_wc_status2_t *status);
>
>  /**
> - *  Same as svn_wc_status_func2_t(), but for older svn_wc_status_t structures.
> + *  Same as svn_wc_status_func2_t, but for older svn_wc_status_t structures.
>  *
>  * @deprecated Provided for backward compatibility with the 1.1 API.
>  */
> @@ -3146,8 +3161,37 @@ typedef void (*svn_wc_status_func_t)(voi
>  * Allocate the editor itself in @a pool, but the editor does temporary
>  * allocations in a subpool of @a pool.
>  *
> + * @since New in 1.7.
> + */
> +svn_error_t *
> +svn_wc_get_status_editor5(const svn_delta_editor_t **editor,
> +                          void **edit_baton,
> +                          void **set_locks_baton,
> +                          svn_revnum_t *edit_revision,
> +                          svn_wc_adm_access_t *anchor,
> +                          const char *target,
> +                          svn_depth_t depth,
> +                          svn_boolean_t get_all,
> +                          svn_boolean_t no_ignore,
> +                          const apr_array_header_t *ignore_patterns,
> +                          svn_wc_status_func4_t status_func,
> +                          void *status_baton,
> +                          svn_cancel_func_t cancel_func,
> +                          void *cancel_baton,
> +                          svn_wc_traversal_info_t *traversal_info,
> +                          apr_pool_t *result_pool,
> +                          apr_pool_t *scratch_pool);
> +
> +/**
> + * Same as svn_wc_get_status_editor5, but using @c svn_wc_status_func3_t
> + * instead of @c svn_wc_status_func4_t. This also uses a single pool
> + * parameter, stating that all temporary allocations are performed in
> + * manually constructed/destroyed subpool.
> + *
>  * @since New in 1.6.
> + * @deprecated Provided for backward compatibility with the 1.6 API.
>  */
> +SVN_DEPRECATED
>  svn_error_t *
>  svn_wc_get_status_editor4(const svn_delta_editor_t **editor,
>                           void **edit_baton,
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/add.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/add.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/add.c   Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/add.c   Mon Mar 30 19:14:31 2009        (r36880)
> @@ -82,6 +82,50 @@ trim_string(char **pstr)
>   str[i] = '\0';
>  }
>
> +/* Split PROPERTY and store each individual value in PROPS.
> +   Allocates from POOL. */
> +static void
> +split_props(apr_array_header_t **props,
> +            const char *property,
> +            apr_pool_t *pool)
> +{
> +  apr_array_header_t *temp_props;
> +  char *new_prop;
> +  int i = 0;
> +  int j = 0;
> +
> +  temp_props = apr_array_make(pool, 4, sizeof(char *));
> +  new_prop = apr_palloc(pool, strlen(property)+1);
> +
> +  for (i = 0; property[i] != '\0'; i++)
> +    {
> +      if (property[i] != ';')
> +        {
> +          new_prop[j] = property[i];
> +          j++;
> +        }
> +      else if (property[i] == ';')
> +        {
> +          if (property[i+1] == ';')
> +            {
> +              new_prop[j] = ';';
> +              j++;
> +              i++;
> +            }
> +          else
> +            {
> +              new_prop[j] = '\0';
> +              APR_ARRAY_PUSH(temp_props, char *) = new_prop;
> +              new_prop += j + 1;
> +              j = 0;
> +            }
> +        }
> +    }
> +  new_prop[j] = '\0';
> +  APR_ARRAY_PUSH(temp_props, char *) = new_prop;
> +  *props = temp_props;
> +}
> +
>  /* For one auto-props config entry (NAME, VALUE), if the filename pattern
>    NAME matches BATON->filename case insensitively then add the properties
>    listed in VALUE into BATON->properties.
> @@ -93,9 +137,9 @@ auto_props_enumerator(const char *name,
>                       void *baton,
>                       apr_pool_t *pool)
>  {
> +  int i;
>   auto_props_baton_t *autoprops = baton;
> -  char *property;
> -  char *last_token;
> +  apr_array_header_t *props;
>
>   /* nothing to do here without a value */
>   if (strlen(value) == 0)
> @@ -105,14 +149,13 @@ auto_props_enumerator(const char *name,
>   if (apr_fnmatch(name, autoprops->filename, APR_FNM_CASE_BLIND) == APR_FNM_NOMATCH)
>     return TRUE;
>
> -  /* parse the value (we dup it first to effectively lose the
> -     'const', and to avoid messing up the original value) */
> -  property = apr_pstrdup(autoprops->pool, value);
> -  property = apr_strtok(property, ";", &last_token);
> -  while (property)
> +  split_props(&props, value, autoprops->pool);
> +
> +  for (i = 0; i < props->nelts; i++)
>     {
>       int len;
>       const char *this_value;
> +      char *property = APR_ARRAY_IDX(props, i, char *);
>       char *equal_sign = strchr(property, '=');
>
>       if (equal_sign)
> @@ -128,10 +171,13 @@ auto_props_enumerator(const char *name,
>         }
>       trim_string(&property);
>       len = strlen(property);
> +
>       if (len > 0)
>         {
> -          svn_string_t *propval = svn_string_create(this_value,
> -                                                    autoprops->pool);
> +          svn_string_t *propval = apr_palloc(autoprops->pool,
> +                                             sizeof(*propval));
> +          propval->data = this_value;
> +          propval->len = strlen(this_value);
>
>           apr_hash_set(autoprops->properties, property, len, propval);
>           if (strcmp(property, SVN_PROP_MIME_TYPE) == 0)
> @@ -139,7 +185,6 @@ auto_props_enumerator(const char *name,
>           else if (strcmp(property, SVN_PROP_EXECUTABLE) == 0)
>             autoprops->have_executable = TRUE;
>         }
> -      property = apr_strtok(NULL, ";", &last_token);
>     }
>   return TRUE;
>  }
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/cat.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/cat.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/cat.c   Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/cat.c   Mon Mar 30 19:14:31 2009        (r36880)
> @@ -28,6 +28,7 @@
>  #include "svn_subst.h"
>  #include "svn_io.h"
>  #include "svn_time.h"
> +#include "svn_dirent_uri.h"
>  #include "svn_path.h"
>  #include "svn_props.h"
>  #include "client.h"
> @@ -109,7 +110,7 @@ cat_local_file(const char *path,
>
>   if (keywords)
>     {
> -      const char *fmt;
> +      const char *rev_str;
>       const char *author;
>
>       if (local_mod)
> @@ -118,19 +119,17 @@ cat_local_file(const char *path,
>              to the revision number, and set the author to
>              "(local)" since we can't always determine the
>              current user's username */
> -          fmt = "%ldM";
> +          rev_str = apr_psprintf(pool, "%ldM", entry->cmt_rev);
>           author = _("(local)");
>         }
>       else
>         {
> -          fmt = "%ld";
> +          rev_str = apr_psprintf(pool, "%ld", entry->cmt_rev);
>           author = entry->cmt_author;
>         }
>
>       SVN_ERR(svn_subst_build_keywords2
> -              (&kw, keywords->data,
> -               apr_psprintf(pool, fmt, entry->cmt_rev),
> -               entry->url, tm, author, pool));
> +              (&kw, keywords->data, rev_str, entry->url, tm, author, pool));
>     }
>
>   /* Our API contract says that OUTPUT will not be closed. The two paths
> @@ -183,8 +182,8 @@ svn_client_cat2(svn_stream_t *out,
>       svn_wc_adm_access_t *adm_access;
>
>       SVN_ERR(svn_wc_adm_open3(&adm_access, NULL,
> -                               svn_path_dirname(path_or_url, pool), FALSE,
> -                               0, ctx->cancel_func, ctx->cancel_baton,
> +                               svn_dirent_dirname(path_or_url, pool),
> +                               FALSE, 0, ctx->cancel_func, ctx->cancel_baton,
>                                pool));
>
>       SVN_ERR(cat_local_file(path_or_url, out, adm_access, revision,
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/client.h
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/client.h?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/client.h        Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/client.h        Mon Mar 30 19:14:31 2009        (r36880)
> @@ -1054,7 +1054,7 @@ svn_client__fetch_externals(apr_hash_t *
>    other options are the same as those passed to svn_client_status(). */
>  svn_error_t *
>  svn_client__do_external_status(svn_wc_traversal_info_t *traversal_info,
> -                               svn_wc_status_func3_t status_func,
> +                               svn_wc_status_func4_t status_func,
>                                void *status_baton,
>                                svn_depth_t depth,
>                                svn_boolean_t get_all,
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/copy.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/copy.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/copy.c  Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/copy.c  Mon Mar 30 19:14:31 2009        (r36880)
> @@ -26,6 +26,7 @@
>  #include "svn_client.h"
>  #include "svn_error.h"
>  #include "svn_error_codes.h"
> +#include "svn_dirent_uri.h"
>  #include "svn_path.h"
>  #include "svn_opt.h"
>  #include "svn_time.h"
> @@ -242,7 +243,7 @@ do_wc_to_wc_copies(const apr_array_heade
>
>   get_copy_pair_ancestors(copy_pairs, NULL, &dst_parent, NULL, pool);
>   if (copy_pairs->nelts == 1)
> -    dst_parent = svn_path_dirname(dst_parent, pool);
> +    dst_parent = svn_dirent_dirname(dst_parent, pool);
>
>   /* Because all copies are to the same destination directory, we can open
>      the directory once, and use it for each copy. */
> @@ -306,7 +307,7 @@ do_wc_to_wc_moves(const apr_array_header
>       if (ctx->cancel_func)
>         SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
>
> -      svn_path_split(pair->src, &src_parent, NULL, iterpool);
> +      svn_dirent_split(pair->src, &src_parent, NULL, iterpool);
>
>       SVN_ERR(svn_wc_adm_open3(&src_access, NULL, src_parent, TRUE,
>                                pair->src_kind == svn_node_dir ? -1 : 0,
> @@ -405,7 +406,7 @@ wc_to_wc_copy(const apr_array_header_t *
>                                  _("Path '%s' already exists"),
>                                  svn_path_local_style(pair->dst, pool));
>
> -      svn_path_split(pair->dst, &pair->dst_parent, &pair->base_name, pool);
> +      svn_dirent_split(pair->dst, &pair->dst_parent, &pair->base_name, pool);
>
>       /* Make sure the destination parent is a directory and produce a clear
>          error message if it is not. */
> @@ -583,7 +584,7 @@ find_absent_parents1(svn_ra_session_t *r
>       svn_pool_clear(iterpool);
>
>       APR_ARRAY_PUSH(new_dirs, const char *) = dir;
> -      svn_path_split(dir, &dir, NULL, pool);
> +      svn_dirent_split(dir, &dir, NULL, pool);
>
>       SVN_ERR(svn_ra_check_path(ra_session, dir, SVN_INVALID_REVNUM,
>                                 &kind, iterpool));
> @@ -622,7 +623,7 @@ find_absent_parents2(svn_ra_session_t *r
>   while (kind == svn_node_none)
>     {
>       APR_ARRAY_PUSH(new_dirs, const char *) = root_url;
> -      svn_path_split(root_url, &root_url, NULL, pool);
> +      svn_uri_split(root_url, &root_url, NULL, pool);
>
>       SVN_ERR(svn_ra_reparent(ra_session, root_url, pool));
>       SVN_ERR(svn_ra_check_path(ra_session, "", SVN_INVALID_REVNUM, &kind,
> @@ -698,7 +699,7 @@ repos_to_repos_copy(svn_commit_info_t **
>              *parent* of all three. */
>           if (strcmp(pair->src, top_url) == 0)
>             {
> -              top_url = svn_path_dirname(top_url, pool);
> +              top_url = svn_uri_dirname(top_url, pool);
>             }
>         }
>     }
> @@ -756,7 +757,7 @@ repos_to_repos_copy(svn_commit_info_t **
>       const char *dir;
>
>       new_dirs = apr_array_make(pool, 0, sizeof(const char *));
> -      dir = svn_path_is_child(top_url, svn_path_dirname(pair->dst, pool),
> +      dir = svn_path_is_child(top_url, svn_uri_dirname(pair->dst, pool),
>                               pool);
>
>       /* Imagine a situation where the user tries to copy an existing source
> @@ -794,7 +795,7 @@ repos_to_repos_copy(svn_commit_info_t **
>           && svn_path_is_child(pair->dst, pair->src, pool) != NULL)
>         {
>           info->resurrection = TRUE;
> -          top_url = svn_path_dirname(top_url, pool);
> +          top_url = svn_uri_dirname(top_url, pool);
>
>           SVN_ERR(svn_ra_reparent(ra_session, top_url, pool));
>         }
> @@ -1047,9 +1048,9 @@ wc_to_repos_copy(svn_commit_info_t **com
>   /* Determine the longest common ancestor for the destinations, and open an RA
>      session to that location. */
>   /* ### But why start by getting the _parent_ of the first one? */
> -  svn_path_split(APR_ARRAY_IDX(copy_pairs, 0, svn_client__copy_pair_t *)->dst,
> -                 &top_dst_url,
> -                 NULL, pool);
> +  svn_uri_split(APR_ARRAY_IDX(copy_pairs, 0, svn_client__copy_pair_t *)->dst,
> +                &top_dst_url,
> +                NULL, pool);
>   for (i = 1; i < copy_pairs->nelts; i++)
>     {
>       svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
> @@ -1472,7 +1473,7 @@ repos_to_wc_copy(const apr_array_header_
>
>   get_copy_pair_ancestors(copy_pairs, &top_src_url, &top_dst_path, NULL, pool);
>   if (copy_pairs->nelts == 1)
> -    top_src_url = svn_path_dirname(top_src_url, pool);
> +    top_src_url = svn_uri_dirname(top_src_url, pool);
>
>   /* Open a repository session to the longest common src ancestor.  We do not
>      (yet) have a working copy, so we don't have a corresponding path and
> @@ -1534,7 +1535,7 @@ repos_to_wc_copy(const apr_array_header_
>
>       /* Make sure the destination parent is a directory and produce a clear
>          error message if it is not. */
> -      dst_parent = svn_path_dirname(pair->dst, iterpool);
> +      dst_parent = svn_dirent_dirname(pair->dst, iterpool);
>       SVN_ERR(svn_io_check_path(dst_parent, &dst_parent_kind, iterpool));
>       if (make_parents && dst_parent_kind == svn_node_none)
>         {
> @@ -1603,7 +1604,7 @@ repos_to_wc_copy(const apr_array_header_
>        not exist.  ### TODO:  we should probably walk up the wc here,
>        in case the parent dir has an imaginary URL.  */
>     if (copy_pairs->nelts == 1)
> -      parent = svn_path_dirname(top_dst_path, pool);
> +      parent = svn_dirent_dirname(top_dst_path, pool);
>     else
>       parent = top_dst_path;
>     dst_err = svn_client_uuid_from_path(&dst_uuid, parent, adm_access,
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/delete.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/delete.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/delete.c        Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/delete.c        Mon Mar 30 19:14:31 2009        (r36880)
> @@ -37,12 +37,12 @@
>  /*** Code. ***/
>
>
> -/* An svn_wc_status_func3_t callback function for finding
> +/* An svn_wc_status_func4_t callback function for finding
>    status structures which are not safely deletable. */
>  static svn_error_t *
>  find_undeletables(void *baton,
>                   const char *path,
> -                  svn_wc_status2_t *status,
> +                  const svn_wc_status2_t *status,
>                   apr_pool_t *pool)
>  {
>   /* Check for error-ful states. */
> @@ -83,9 +83,9 @@ svn_client__can_delete(const char *path,
>      status callback function find_undeletables() makes the
>      determination, returning an error if it finds anything that shouldn't
>      be deleted. */
> -  return svn_client_status4
> -         (NULL, path, &revision, find_undeletables, NULL,
> -          svn_depth_infinity, FALSE, FALSE, FALSE, FALSE, NULL, ctx, pool);
> +  return svn_client_status5(NULL, path, &revision, find_undeletables, NULL,
> +                            svn_depth_infinity, FALSE, FALSE, FALSE, FALSE,
> +                            NULL, ctx, pool);
>  }
>
>
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/deprecated.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/deprecated.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/deprecated.c    Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/deprecated.c    Mon Mar 30 19:14:31 2009        (r36880)
> @@ -1388,6 +1388,47 @@ svn_client_proplist(apr_array_header_t *
>  }
>
>  /*** From status.c ***/
> +
> +struct status4_wrapper_baton
> +{
> +  svn_wc_status_func3_t old_func;
> +  void *old_baton;
> +};
> +
> +static svn_error_t *
> +status4_wrapper_func(void *baton,
> +                     const char *path,
> +                     const svn_wc_status2_t *status,
> +                     apr_pool_t *scratch_pool)
> +{
> +  struct status4_wrapper_baton *swb = baton;
> +  svn_wc_status2_t *dup = svn_wc_dup_status2(status, scratch_pool);
> +
> +  return (*swb->old_func)(swb->old_baton, path, dup, scratch_pool);
> +}
> +
> +svn_error_t *
> +svn_client_status4(svn_revnum_t *result_rev,
> +                   const char *path,
> +                   const svn_opt_revision_t *revision,
> +                   svn_wc_status_func3_t status_func,
> +                   void *status_baton,
> +                   svn_depth_t depth,
> +                   svn_boolean_t get_all,
> +                   svn_boolean_t update,
> +                   svn_boolean_t no_ignore,
> +                   svn_boolean_t ignore_externals,
> +                   const apr_array_header_t *changelists,
> +                   svn_client_ctx_t *ctx,
> +                   apr_pool_t *pool)
> +{
> +  struct status4_wrapper_baton swb = { status_func, status_baton };
> +
> +  return svn_client_status5(result_rev, path, revision, status4_wrapper_func,
> +                            &swb, depth, get_all, update, no_ignore,
> +                            ignore_externals, changelists, ctx, pool);
> +}
> +
>  struct status3_wrapper_baton
>  {
>   svn_wc_status_func2_t old_func;
> @@ -1421,12 +1462,12 @@ svn_client_status3(svn_revnum_t *result_
>                    svn_client_ctx_t *ctx,
>                    apr_pool_t *pool)
>  {
> -  struct status3_wrapper_baton swb = { status_func, status_baton };
> -
> +  struct status3_wrapper_baton swb = { 0 };
> +  swb.old_func = status_func;
> +  swb.old_baton = status_baton;
>   return svn_client_status4(result_rev, path, revision, status3_wrapper_func,
>                             &swb, depth, get_all, update, no_ignore,
>                             ignore_externals, changelists, ctx, pool);
> -
>  }
>
>  svn_error_t *
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/externals.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/externals.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/externals.c     Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/externals.c     Mon Mar 30 19:14:31 2009        (r36880)
> @@ -1276,7 +1276,7 @@ svn_client__fetch_externals(apr_hash_t *
>
>  svn_error_t *
>  svn_client__do_external_status(svn_wc_traversal_info_t *traversal_info,
> -                               svn_wc_status_func3_t status_func,
> +                               svn_wc_status_func4_t status_func,
>                                void *status_baton,
>                                svn_depth_t depth,
>                                svn_boolean_t get_all,
> @@ -1348,7 +1348,7 @@ svn_client__do_external_status(svn_wc_tr
>                                     iterpool), iterpool);
>
>           /* And then do the status. */
> -          SVN_ERR(svn_client_status4(NULL, fullpath,
> +          SVN_ERR(svn_client_status5(NULL, fullpath,
>                                      &(external->revision),
>                                      status_func, status_baton,
>                                      depth, get_all, update,
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/list.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/list.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/list.c  Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/list.c  Mon Mar 30 19:14:31 2009        (r36880)
> @@ -17,6 +17,7 @@
>  */
>
>  #include "svn_client.h"
> +#include "svn_dirent_uri.h"
>  #include "svn_path.h"
>  #include "svn_pools.h"
>  #include "svn_time.h"
> @@ -163,7 +164,7 @@ svn_client_list2(const char *path_or_url
>
>               /* Open another session to the path's parent.  This server
>                  doesn't support svn_ra_reparent anyway, so don't try it. */
> -              svn_path_split(url, &parent_url, &base_name, pool);
> +              svn_uri_split(url, &parent_url, &base_name, pool);
>
>               /* 'base_name' is now the last component of an URL, but we want
>                  to use it as a plain file name. Therefore, we must URI-decode
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/locking_commands.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/locking_commands.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/locking_commands.c      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/locking_commands.c      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -24,6 +24,7 @@
>
>  #include "svn_client.h"
>  #include "client.h"
> +#include "svn_dirent_uri.h"
>  #include "svn_path.h"
>  #include "svn_xml.h"
>  #include "svn_pools.h"
> @@ -193,8 +194,8 @@ organize_lock_targets(const char **commo
>      1 member, so we special case that. */
>   if (apr_is_empty_array(rel_targets))
>     {
> -      char *base_name = svn_path_basename(*common_parent, pool);
> -      *common_parent = svn_path_dirname(*common_parent, pool);
> +      char *base_name = svn_uri_basename(*common_parent, pool);
> +      *common_parent = svn_uri_dirname(*common_parent, pool);
>
>       APR_ARRAY_PUSH(rel_targets, char *) = base_name;
>     }
> @@ -279,8 +280,8 @@ organize_lock_targets(const char **commo
>          1 member, so we special case that (again). */
>       if (apr_is_empty_array(rel_urls))
>         {
> -          char *base_name = svn_path_basename(common_url, pool);
> -          common_url = svn_path_dirname(common_url, pool);
> +          char *base_name = svn_uri_basename(common_url, pool);
> +          common_url = svn_uri_dirname(common_url, pool);
>           APR_ARRAY_PUSH(rel_urls, char *) = base_name;
>         }
>
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/log.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/log.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/log.c   Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/log.c   Mon Mar 30 19:14:31 2009        (r36880)
> @@ -124,12 +124,17 @@ svn_client__get_copy_source(const char *
>                             apr_pool_t *pool)
>  {
>   svn_error_t *err;
> -  copyfrom_info_t copyfrom_info = { TRUE, NULL, SVN_INVALID_REVNUM, pool };
> +  copyfrom_info_t copyfrom_info = { 0 };
>   apr_pool_t *sesspool = svn_pool_create(pool);
>   svn_ra_session_t *ra_session;
>   svn_revnum_t at_rev;
>   const char *at_url;
>
> +  copyfrom_info.is_first = TRUE;
> +  copyfrom_info.path = NULL;
> +  copyfrom_info.rev = SVN_INVALID_REVNUM;
> +  copyfrom_info.pool = pool;
> +
>   SVN_ERR(svn_client__ra_session_from_path(&ra_session, &at_rev, &at_url,
>                                            path_or_url, NULL,
>                                            revision, revision,
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/merge.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/merge.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/merge.c Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/merge.c Mon Mar 30 19:14:31 2009        (r36880)
> @@ -618,20 +618,27 @@ split_mergeinfo_on_revision(svn_mergeinf
>  }
>
>
> -/* Helper for merge_props_changed().  Filter out mergeinfo property additions
> -   to PATH when those additions refer to the same line of history as PATH.
> +/* Helper for merge_props_changed().
>
>    *PROPS is an array of svn_prop_t structures representing regular properties
>    to be added to the working copy PATH.  ADM_ACCESS and MERGE_B are cascaded
>    from the arguments of the same name in merge_props_changed().
>
> -   If mergeinfo is not being honored, do nothing.  Otherwise examine the added
> -   mergeinfo, looking at each range (or single rev) of each source path.  If a
> -   source_path/range refers to the same line of history as PATH (pegged at its
> -   base revision), then filter out that range.  If the entire rangelist for a
> -   given path is filtered then filter out the path as well.  Set outgoing
> -   *PROPS to a shallow copy (allocated in POOL) of incoming *PROPS minus the
> -   filtered self-referential mergeinfo. */
> +   If mergeinfo is not being honored and MERGE_B->SAME_REPOS is true, do
> +   nothing.  If MERGE_B->SAME_REPOS is false then filter out all mergeinfo
> +   property additions (Issue #3383) from *PROPS.  If MERGE_B->SAME_REPOS is
> +   true then filter out mergeinfo property additions to PATH when those
> +   additions refer to the same line of history as PATH as described below.
> +
> +   If mergeinfo is being honored and MERGE_B->SAME_REPOS is true
> +   then examine the added mergeinfo, looking at each range (or single rev)
> +   of each source path.  If a source_path/range refers to the same line of
> +   history as PATH (pegged at its base revision), then filter out that range.
> +   If the entire rangelist for a given path is filtered then filter out the
> +   path as well.
> +
> +   If any filtering occurs, set outgoing *PROPS to a shallow copy (allocated
> +   in POOL) of incoming *PROPS minus the filtered mergeinfo. */
>  static svn_error_t*
>  filter_self_referential_mergeinfo(apr_array_header_t **props,
>                                   const char *path,
> @@ -644,16 +651,19 @@ filter_self_referential_mergeinfo(apr_ar
>   int i;
>   const svn_wc_entry_t *target_entry;
>
> -  /* If we aren't honoring mergeinfo, get outta here. */
> +  /* If we aren't honoring mergeinfo and this is a merge from the
> +     same repository, then get outta here. */
>   mergeinfo_behavior(&honor_mergeinfo, NULL, merge_b);
> -  if (! honor_mergeinfo)
> +  if (! honor_mergeinfo && merge_b->same_repos)
>     return SVN_NO_ERROR;
>
> -  /* If PATH itself is newly added or replaced there is no need to filter. */
> +  /* If this is a merge from the same repository and PATH itself is
> +     newly added or replaced there is no need to filter. */
>   SVN_ERR(svn_wc__entry_versioned(&target_entry, path, adm_access,
>                                   FALSE, pool));
> -  if (target_entry->schedule == svn_wc_schedule_add
> -      || target_entry->schedule == svn_wc_schedule_replace)
> +  if (merge_b->same_repos
> +      && (target_entry->schedule == svn_wc_schedule_add
> +          || target_entry->schedule == svn_wc_schedule_replace))
>     return SVN_NO_ERROR;
>
>   adjusted_props = apr_array_make(pool, (*props)->nelts, sizeof(svn_prop_t));
> @@ -661,12 +671,20 @@ filter_self_referential_mergeinfo(apr_ar
>     {
>       svn_prop_t *prop = &APR_ARRAY_IDX((*props), i, svn_prop_t);
>
> -      /* If this property isn't mergeinfo or is NULL valued (i.e. prop removal)
> +      /* If this is a merge from a foreign repository we must strip all
> +         incoming mergeinfo (including mergeinfo deletions).  Otherwise if
> +         this property isn't mergeinfo or is NULL valued (i.e. prop removal)
>          or empty mergeinfo it does not require any special handling.  There
>          is nothing to filter out of empty mergeinfo and the concept of
>          filtering doesn't apply if we are trying to remove mergeinfo
>          entirely. */
> -      if ((strcmp(prop->name, SVN_PROP_MERGEINFO) != 0)
> +      if ((strcmp(prop->name, SVN_PROP_MERGEINFO) == 0)
> +          && (! merge_b->same_repos))
> +        {
> +          /* Issue #3383: We don't want mergeinfo from a foreign repos. */
> +          continue;
> +        }
> +      else if ((strcmp(prop->name, SVN_PROP_MERGEINFO) != 0)
>           || (! prop->value)       /* Removal of mergeinfo */
>           || (! prop->value->len)) /* Empty mergeinfo */
>         {
> @@ -1276,9 +1294,13 @@ merge_file_changed(svn_wc_adm_access_t *
>           const char *right_label = apr_psprintf(subpool,
>                                                  _(".merge-right.r%ld"),
>                                                  yours_rev);
> -          conflict_resolver_baton_t conflict_baton =
> -            { merge_b->ctx->conflict_func, merge_b->ctx->conflict_baton,
> -              &merge_b->conflicted_paths, merge_b->pool };
> +          conflict_resolver_baton_t conflict_baton = { 0 };
> +
> +          conflict_baton.wrapped_func = merge_b->ctx->conflict_func;
> +          conflict_baton.wrapped_baton = merge_b->ctx->conflict_baton;
> +          conflict_baton.conflicted_paths = &merge_b->conflicted_paths;
> +          conflict_baton.pool = merge_b->pool;
> +
>           SVN_ERR(svn_wc_merge3(&merge_outcome,
>                                 older, yours, mine, adm_access,
>                                 left_label, right_label, target_label,
> @@ -1362,6 +1384,11 @@ merge_file_added(svn_wc_adm_access_t *ad
>           && (svn_property_kind(NULL, prop->name) != svn_prop_regular_kind))
>         continue;
>
> +      /* Issue #3383: We don't want mergeinfo from a foreign repository. */
> +      if ((! merge_b->same_repos)
> +          && strcmp(prop->name, SVN_PROP_MERGEINFO) == 0)
> +        continue;
> +
>       apr_hash_set(new_props, prop->name, APR_HASH_KEY_STRING, prop->value);
>     }
>
> @@ -4375,9 +4402,8 @@ struct get_mergeinfo_walk_baton
>    Given PATH, its corresponding ENTRY, and WB, where WB is the WALK_BATON
>    of type "struct get_mergeinfo_walk_baton *":  If PATH is switched,
>    has explicit working svn:mergeinfo, is missing a child due to a sparse
> -   checkout, is absent from disk, is scheduled for deletion, or if the walk
> -   is being done as part of a reverse merge, then create a
> -   svn_client__merge_path_t *representing *PATH, allocated in
> +   checkout, is absent from disk, or is scheduled for deletion, then create
> +   a svn_client__merge_path_t * representing *PATH, allocated in
>    WB->CHILDREN_WITH_MERGEINFO->POOL, and push it onto the
>    WB->CHILDREN_WITH_MERGEINFO array. */
>  static svn_error_t *
> @@ -4672,7 +4698,6 @@ insert_parent_and_sibs_of_sw_absent_del_
>         DEPTH is svn_depth_immediates.
>      9) Path is an immediate *file* child of MERGE_CMD_BATON->TARGET and
>         DEPTH is svn_depth_files.
> -    10) do_directory_merge() is processing a reverse merge.
>
>    If HONOR_MERGEINFO is FALSE, then create an svn_client__merge_path_t * only
>    for MERGE_CMD_BATON->TARGET (i.e. only criteria 7 is applied).
> @@ -4718,11 +4743,20 @@ get_mergeinfo_paths(apr_array_header_t *
>   apr_pool_t *iterpool;
>   static const svn_wc_entry_callbacks2_t walk_callbacks =
>     { get_mergeinfo_walk_cb, get_mergeinfo_error_handler };
> -  struct get_mergeinfo_walk_baton wb =
> -    { adm_access, children_with_mergeinfo,
> -      merge_src_canon_path, merge_cmd_baton->target, source_root_url,
> -      url1, url2, revision1, revision2,
> -      depth, ra_session, merge_cmd_baton->ctx };
> +  struct get_mergeinfo_walk_baton wb = { 0 };
> +
> +  wb.base_access = adm_access;
> +  wb.children_with_mergeinfo = children_with_mergeinfo;
> +  wb.merge_src_canon_path = merge_src_canon_path;
> +  wb.merge_target_path = merge_cmd_baton->target;
> +  wb.source_root_url = source_root_url;
> +  wb.url1 = url1;
> +  wb.url2 = url2;
> +  wb.revision1 = revision1;
> +  wb.revision2 = revision2;
> +  wb.depth = depth;
> +  wb.ra_session = ra_session;
> +  wb.ctx = merge_cmd_baton->ctx;
>
>   /* Cover cases 1), 2), 6), and 7) by walking the WC to get all paths which
>      have mergeinfo and/or are switched or are absent from disk or is the
> @@ -4830,10 +4864,16 @@ get_mergeinfo_paths(apr_array_header_t *
>                     {
>                       svn_boolean_t inherited;
>                       svn_mergeinfo_t mergeinfo;
> +                      const svn_wc_entry_t *child_entry;
> +
> +                      SVN_ERR(svn_wc__entry_versioned(
> +                        &child_entry, child_of_noninheritable->path,
> +                        adm_access, FALSE, iterpool));
> +
>                       SVN_ERR(svn_client__get_wc_mergeinfo
>                               (&mergeinfo, &inherited, FALSE,
>                                svn_mergeinfo_nearest_ancestor,
> -                               entry, child_of_noninheritable->path,
> +                               child_entry, child_of_noninheritable->path,
>                                merge_cmd_baton->target, NULL, adm_access,
>                                merge_cmd_baton->ctx, iterpool));
>
> @@ -7647,7 +7687,7 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
>
>   /* Limit new_catalog to the youngest revisions previously merged from
>      the target to the source. */
> -  if (SVN_IS_VALID_REVNUM(youngest_merged_rev))
> +  if (SVN_IS_VALID_REVNUM(*youngest_merged_rev))
>     {
>       SVN_ERR(svn_mergeinfo__filter_catalog_by_ranges(&new_catalog,
>                                                       new_catalog,
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/mergeinfo.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/mergeinfo.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/mergeinfo.c     Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/mergeinfo.c     Mon Mar 30 19:14:31 2009        (r36880)
> @@ -1008,11 +1008,13 @@ svn_client__elide_mergeinfo_catalog(svn_
>   apr_array_header_t *elidable_paths = apr_array_make(pool, 1,
>                                                       sizeof(const char *));
>   svn_delta_editor_t *editor = svn_delta_default_editor(pool);
> -  struct elide_mergeinfo_catalog_cb_baton cb = {elidable_paths,
> -                                                mergeinfo_catalog,
> -                                                pool};
> +  struct elide_mergeinfo_catalog_cb_baton cb = { 0 };
>   int i;
>
> +  cb.elidable_paths = elidable_paths;
> +  cb.mergeinfo_catalog = mergeinfo_catalog;
> +  cb.result_pool = pool;
> +
>   editor->open_root = elide_mergeinfo_catalog_open_root;
>   editor->open_directory = elide_mergeinfo_catalog_open_directory;
>
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_client/status.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_client/status.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_client/status.c        Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_client/status.c        Mon Mar 30 19:14:31 2009        (r36880)
> @@ -47,7 +47,7 @@ struct status_baton
>  {
>   svn_boolean_t deleted_in_repos;          /* target is deleted in repos */
>   apr_hash_t *changelist_hash;             /* keys are changelist names */
> -  svn_wc_status_func3_t real_status_func;  /* real status function */
> +  svn_wc_status_func4_t real_status_func;  /* real status function */
>   void *real_status_baton;                 /* real status baton */
>  };
>
> @@ -56,12 +56,12 @@ struct status_baton
>    need to make (such as noting that the target of the status is
>    missing from HEAD in the repository).
>
> -   This implements the 'svn_wc_status_func3_t' function type. */
> +   This implements the 'svn_wc_status_func4_t' function type.  */
>  static svn_error_t *
>  tweak_status(void *baton,
>              const char *path,
> -             svn_wc_status2_t *status,
> -             apr_pool_t *pool)
> +             const svn_wc_status2_t *status,
> +             apr_pool_t *scratch_pool)
>  {
>   struct status_baton *sb = baton;
>
> @@ -69,7 +69,11 @@ tweak_status(void *baton,
>      we need to note that fact in all the status structures that come
>      through here. */
>   if (sb->deleted_in_repos)
> -    status->repos_text_status = svn_wc_status_deleted;
> +    {
> +      svn_wc_status2_t *new_status = svn_wc_dup_status2(status, scratch_pool);
> +      new_status->repos_text_status = svn_wc_status_deleted;
> +      status = new_status;
> +    }
>
>   /* If the status item has an entry, but doesn't belong to one of the
>      changelists our caller is interested in, we filter our this status
> @@ -78,7 +82,8 @@ tweak_status(void *baton,
>     return SVN_NO_ERROR;
>
>   /* Call the real status function/baton. */
> -  return sb->real_status_func(sb->real_status_baton, path, status, pool);
> +  return sb->real_status_func(sb->real_status_baton, path, status,
> +                              scratch_pool);
>  }
>
>  /* A baton for our reporter that is used to collect locks. */
> @@ -207,10 +212,10 @@ static svn_ra_reporter3_t lock_fetch_rep
>
>
>  svn_error_t *
> -svn_client_status4(svn_revnum_t *result_rev,
> +svn_client_status5(svn_revnum_t *result_rev,
>                    const char *path,
>                    const svn_opt_revision_t *revision,
> -                   svn_wc_status_func3_t status_func,
> +                   svn_wc_status_func4_t status_func,
>                    void *status_baton,
>                    svn_depth_t depth,
>                    svn_boolean_t get_all,
> @@ -219,7 +224,7 @@ svn_client_status4(svn_revnum_t *result_
>                    svn_boolean_t ignore_externals,
>                    const apr_array_header_t *changelists,
>                    svn_client_ctx_t *ctx,
> -                   apr_pool_t *pool)
> +                   apr_pool_t *pool)  /* ### aka scratch_pool */
>  {
>   svn_wc_adm_access_t *anchor_access, *target_access;
>   svn_wc_traversal_info_t *traversal_info = svn_wc_init_traversal_info(pool);
> @@ -269,12 +274,12 @@ svn_client_status4(svn_revnum_t *result_
>   /* Get the status edit, and use our wrapping status function/baton
>      as the callback pair. */
>   SVN_ERR(svn_wc_get_default_ignores(&ignores, ctx->config, pool));
> -  SVN_ERR(svn_wc_get_status_editor4(&editor, &edit_baton, &set_locks_baton,
> +  SVN_ERR(svn_wc_get_status_editor5(&editor, &edit_baton, &set_locks_baton,
>                                     &edit_revision, anchor_access, target,
>                                     depth, get_all, no_ignore, ignores,
>                                     tweak_status, &sb, ctx->cancel_func,
>                                     ctx->cancel_baton, traversal_info,
> -                                    pool));
> +                                    pool, pool));
>
>   /* If we want to know about out-of-dateness, we crawl the working copy and
>      let the RA layer drive the editor for real.  Otherwise, we just close the
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_diff/diff_file.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_diff/diff_file.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_diff/diff_file.c       Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_diff/diff_file.c       Mon Mar 30 19:14:31 2009        (r36880)
> @@ -371,7 +371,11 @@ datasource_get_next_token(apr_uint32_t *
>                                  &file_baton->normalize_state[idx],
>                                  curp, file_baton->options);
>
> -      file_token->norm_offset = file_token->offset + (c - curp);
> +      file_token->norm_offset = file_token->offset;
> +      if (file_token->length == 0)
> +        /* move past leading ignored characters */
> +        file_token->norm_offset += (c - curp);
> +
>       file_token->length += length;
>
>       *hash = svn_diff__adler32(h, c, length);
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_fs/fs-loader.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_fs/fs-loader.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_fs/fs-loader.c Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_fs/fs-loader.c Mon Mar 30 19:14:31 2009        (r36880)
> @@ -2,7 +2,7 @@
>  * fs_loader.c:  Front-end to the various FS back ends
>  *
>  * ====================================================================
> - * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
> + * Copyright (c) 2000-2009 CollabNet.  All rights reserved.
>  *
>  * This software is licensed as described in the file COPYING, which
>  * you should have received as part of this distribution.  The terms
> @@ -34,6 +34,7 @@
>  #include "svn_string.h"
>  #include "svn_private_config.h"
>
> +#include "private/svn_fs_util.h"
>  #include "private/svn_utf_private.h"
>
>  #include "fs-loader.h"
> @@ -1320,6 +1321,13 @@ svn_fs_print_modules(svn_stringbuf_t *ou
>   return SVN_NO_ERROR;
>  }
>
> +svn_fs_path_change2_t *
> +svn_fs_path_change2_create(const svn_fs_id_t *node_rev_id,
> +                           svn_fs_path_change_kind_t change_kind,
> +                           apr_pool_t *pool)
> +{
> +  return svn_fs__path_change2_create(node_rev_id, change_kind, pool);
> +}
>
>  /* Return the library version number. */
>  const svn_version_t *
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_fs_base/fs.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_fs_base/fs.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_fs_base/fs.c   Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_fs_base/fs.c   Mon Mar 30 19:14:31 2009        (r36880)
> @@ -819,12 +819,20 @@ base_upgrade(svn_fs_t *fs, const char *p
>  {
>   const char *version_file_path;
>   int old_format_number;
> +  svn_error_t *err;
>
>   version_file_path = svn_path_join(path, FORMAT_FILE, pool);
>
>   /* Read the old number so we've got it on hand later on. */
> -  SVN_ERR(svn_io_read_version_file(&old_format_number, version_file_path,
> -                                   pool));
> +  err = svn_io_read_version_file(&old_format_number, version_file_path, pool);
> +  if (err && APR_STATUS_IS_ENOENT(err->apr_err))
> +    {
> +      /* Pre-1.2 filesystems do not have a 'format' file. */
> +      old_format_number = 0;
> +      svn_error_clear(err);
> +      err = SVN_NO_ERROR;
> +    }
> +  SVN_ERR(err);
>
>   /* Bump the format file's stored version number. */
>   SVN_ERR(svn_io_write_version_file(version_file_path,
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_fs_fs/fs_fs.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_fs_fs/fs_fs.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_fs_fs/fs_fs.c  Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_fs_fs/fs_fs.c  Mon Mar 30 19:14:31 2009        (r36880)
> @@ -918,6 +918,7 @@ read_format(int *pformat, int *max_files
>
>       return SVN_NO_ERROR;
>     }
> +  SVN_ERR(err);
>
>   len = sizeof(buf);
>   err = svn_io_read_length_line(file, buf, &len, pool);
> @@ -1089,10 +1090,10 @@ write_config(svn_fs_t *fs,
>  ""                                                                           NL
>  "[" CONFIG_SECTION_REP_SHARING "]"                                           NL
>  "### To conserve space, the filesystem can optionally avoid storing"         NL
> -"### duplicate representations.  This comes at a slight cost in performace," NL
> -"### as maintaining a database of shared representations can increase"       NL
> -"### commit times.  The space savings are dependent upon the size of the"    NL
> -"### repository, the number of objects it contains and the amount of"        NL
> +"### duplicate representations.  This comes at a slight cost in"             NL
> +"### performance, as maintaining a database of shared representations can"   NL
> +"### increase commit times.  The space savings are dependent upon the size"  NL
> +"### of the repository, the number of objects it contains and the amount of" NL
>  "### duplication between them, usually a function of the branching and"      NL
>  "### merging process."                                                       NL
>  "###"                                                                        NL
> @@ -2521,7 +2522,7 @@ move_into_place(const char *old_filename
>     const char *dirname;
>     apr_file_t *file;
>
> -    dirname = svn_path_dirname(new_filename, pool);
> +    dirname = svn_dirent_dirname(new_filename, pool);
>     SVN_ERR(svn_io_file_open(&file, dirname, APR_READ, APR_OS_DEFAULT,
>                              pool));
>     SVN_ERR(svn_io_file_flush_to_disk(file, pool));
> @@ -7041,7 +7042,11 @@ svn_fs_fs__pack(svn_fs_t *fs,
>                 void *cancel_baton,
>                 apr_pool_t *pool)
>  {
> -  struct pack_baton pb = { fs, notify_func, notify_baton,
> -                           cancel_func, cancel_baton };
> +  struct pack_baton pb = { 0 };
> +  pb.fs = fs;
> +  pb.notify_func = notify_func;
> +  pb.notify_baton = notify_baton;
> +  pb.cancel_func = cancel_func;
> +  pb.cancel_baton = cancel_baton;
>   return svn_fs_fs__with_write_lock(fs, pack_body, &pb, pool);
>  }
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_fs_util/fs-util.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_fs_util/fs-util.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_fs_util/fs-util.c      Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_fs_util/fs-util.c      Mon Mar 30 19:14:31 2009        (r36880)
> @@ -2,7 +2,7 @@
>  * ends.
>  *
>  * ====================================================================
> - * Copyright (c) 2007 CollabNet.  All rights reserved.
> + * Copyright (c) 2007, 2009 CollabNet.  All rights reserved.
>  *
>  * This software is licensed as described in the file COPYING, which
>  * you should have received as part of this distribution.  The terms
> @@ -131,9 +131,9 @@ svn_fs__next_entry_name(const char **nex
>  }
>
>  svn_fs_path_change2_t *
> -svn_fs_path_change2_create(const svn_fs_id_t *node_rev_id,
> -                           svn_fs_path_change_kind_t change_kind,
> -                           apr_pool_t *pool)
> +svn_fs__path_change2_create(const svn_fs_id_t *node_rev_id,
> +                            svn_fs_path_change_kind_t change_kind,
> +                            apr_pool_t *pool)
>  {
>   svn_fs_path_change2_t *change;
>
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_ra_serf/auth.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_ra_serf/auth.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_ra_serf/auth.c Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_ra_serf/auth.c Mon Mar 30 19:14:31 2009        (r36880)
> @@ -201,7 +201,7 @@ handle_auth_header(void *baton,
>       ++auth_attr;
>     }
>   else
> -    auth_name = NULL;
> +    auth_name = header;
>
>   ab->last_prot_name = auth_name;
>
>
> Modified: branches/subtree-mergeinfo/subversion/libsvn_ra_serf/merge.c
> URL: http://svn.collab.net/viewvc/svn/branches/subtree-mergeinfo/subversion/libsvn_ra_serf/merge.c?pathrev=36880&r1=36879&r2=36880
> ==============================================================================
> --- branches/subtree-mergeinfo/subversion/libsvn_ra_serf/merge.c        Mon Mar 30 18:45:13 2009        (r36879)
> +++ branches/subtree-mergeinfo/subversion/libsvn_ra_serf/merge.c        Mon Mar 30 19:14:31 2009        (r36880)
> @@ -287,40 +287,46 @@ end_merge(svn_ra_serf__xml_parser_t *par
>                          apr_hash_get(info->props,
>                                       "post-commit-err", APR_HASH_KEY_STRING));
>         }
> -      else if (ctx->session->wc_callbacks->push_wc_prop)
> +      else
>         {
> -          const char *href, *checked_in;
> -          svn_string_t checked_in_str;
> +          const char *href;
>
>           href = apr_hash_get(info->props, "href", APR_HASH_KEY_STRING);
> -          checked_in = apr_hash_get(info->props, "checked-in",
> -                                    APR_HASH_KEY_STRING);
> -
>           if (! svn_path_is_ancestor(ctx->merge_url, href))
>             {
>               /* ### need something better than APR_EGENERAL */
>               return svn_error_createf(APR_EGENERAL, NULL,
> -                                       _("A MERGE response for '%s' is not a child "
> -                                         "of the destination ('%s')"),
> +                                       _("A MERGE response for '%s' is not "
> +                                         "a child of the destination ('%s')"),
>                                        href, ctx->merge_url);
>             }
> -          href = svn_path_is_child(ctx->merge_url, href, NULL);
> -          if (! href) /* the paths are equal */
> -            href = "";
> -
> -          checked_in_str.data = checked_in;
> -          checked_in_str.len = strlen(checked_in);
>
>           /* We now need to dive all the way into the WC to update the
>            * base VCC url.
>            */
> -          SVN_ERR(ctx->session->wc_callbacks->push_wc_prop(
> -                                       ctx->session->wc_callback_baton,
> -                                       href,
> -                                       SVN_RA_SERF__WC_CHECKED_IN_URL,
> -                                       &checked_in_str,
> -                                       info->pool));
> +          if ((! SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(ctx->session))
> +              && ctx->session->wc_callbacks->push_wc_prop)
> +            {
> +              svn_string_t checked_in_str;
> +              const char *checked_in;
>
> +              /* From the above check, we know that CTX->MERGE_URL is
> +                 an ancestor of HREF.  All that remains is to
> +                 determine of HREF is the same as CTX->MERGE_URL, or --
> +                 if not -- is relative value as a child thereof. */
> +              href = svn_path_is_child(ctx->merge_url, href, NULL);
> +              if (! href)
> +                href = "";
> +
> +
>
Received on 2009-03-31 13:50:47 CEST

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.