← Back to team overview

svn team mailing list archive

[Merge] lp:~mdiers/ubuntu/natty/subversion/ppa-proposed into lp:~svn/ubuntu/natty/subversion/ppa

 

Michael Diers has proposed merging lp:~mdiers/ubuntu/natty/subversion/ppa-proposed into lp:~svn/ubuntu/natty/subversion/ppa.

Requested reviews:
  Subversion (svn)

For more details, see:
https://code.launchpad.net/~mdiers/ubuntu/natty/subversion/ppa-proposed/+merge/54325

Merge Debian (1.6.16dfsg-1).
Fixes CVE-2011-0715: Remotely crash mod_dav_svn anonymously via a lock token.
-- 
https://code.launchpad.net/~mdiers/ubuntu/natty/subversion/ppa-proposed/+merge/54325
Your team Subversion is requested to review the proposed merge of lp:~mdiers/ubuntu/natty/subversion/ppa-proposed into lp:~svn/ubuntu/natty/subversion/ppa.
=== modified file 'CHANGES'
--- CHANGES	2011-01-05 22:59:03 +0000
+++ CHANGES	2011-03-22 11:15:25 +0000
@@ -1,3 +1,31 @@
+Version 1.6.16
+(02 Mar 2011, from /branches/1.6.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.6.16
+
+  User-visible changes:
+   * more improvement to the 'blame -g' memory leak from 1.6.15 (r1041438)
+   * avoid a crash in mod_dav_svn when using locks (r1071239, -307)
+            See CVE-2011-0715, and descriptive advisory at
+            http://subversion.apache.org/security/CVE-2011-0715-advisory.txt
+   * avoid unnecessary globbing for performance (r1068988)
+   * don't add tree conflicts when one already exists (issue #3486)
+   * fix potential crash when requesting mergeinfo (r902467)
+   * don't attempt to resolve prop conflicts in 'merge --dry-run' (r880146)
+   * more fixes for issue #3270.
+
+  Developer-visible changes:
+   * ensure report_info_t is properly initialized by ra_serf (r1058722)
+   * locate errors properly on a malfunction (r1053208)
+   * fix output param timing of svn_fs_commit_txn() on fsfs (r1051751)
+   * for svn_fs_commit_txn(), set invalid rev on failed commit (r1051632, -8)
+   * fix sporadic Ruby bindings test failures (r1038792)
+   * fix JavaHL JVM object leak when dumping large revisions (r947006)
+   * use Perl to resolve symlinks when building swig-pl (r1039040)
+   * allow Perl bindings to build within a symlinked working copy (r1036534)
+   * don't overwrite the LD_LIBRARY_PATH during make check-swig-pl (r946355)
+   * improve unit tests for some fs functions (r1051744, -5, -3185, -241)
+
+
 Version 1.6.15
 (26 Nov 2010, from /branches/1.6.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.6.15
@@ -444,6 +472,32 @@
     * fix building Ruby bindings with Ruby 1.9 (r35852, r35883)
 
 
+Version 1.5.8
+(?? ??? 2010, from /branches/1.5.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.5.8
+
+ User-visible changes:
+  * fix proxying of LOCK and UNLOCK requests with WebDAV proxies (r36159)
+  * improve performance of --ignore-ancestry merges (r36256)
+  * avoid crash with when using subtree mergeinfo (r36613, -13, -31, -41)
+  * improve merge correctness with non-inheritable mergeinfo (r36789)
+  * fixed: repeated mergeinfo of conflicting properties fails (issue #3250)
+  * fix segfault in wc->URL copy (r37646, -56)
+  * make 'svn up --set-depth infinity' expand shallow subtrees (r37169)
+  * make default depth of 'svn merge' infinity (r37156)
+  * error if attempting to reintegrate to/from the repo root (r37385)
+  * improve memory performance in 'svn merge' (issue #3393)
+  * fixed: 'SVNPathAuthz short_circuit' unsolicited read access (issue #3695)
+           See CVE-2010-3315, and descriptive advisory at
+           http://subversion.apache.org/security/CVE-2010-3315-advisory.txt
+  * prevent crash in mod_dav_svn when using SVNParentPath (r1033166)
+
+ Developer-visible changes:
+  * fix pointer dereference (r36783)
+  * fix error leak (r36860)
+  * make basic_tests 12 compatible with Windows and Python 2.5+ (r35930)
+
+
 Version 1.5.7
 (06 Aug 2009, from /branches/1.5.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.5.7

=== modified file 'Makefile.in'
--- Makefile.in	2011-01-05 22:59:03 +0000
+++ Makefile.in	2011-03-22 11:15:25 +0000
@@ -684,10 +684,16 @@
 $(SWIG_PL_DIR)/native/Makefile: $(SWIG_PL_DIR)/native/Makefile.PL
 	cd $(SWIG_PL_DIR)/native; $(PERL) Makefile.PL
 
+# There is a "readlink -f" command on some systems for the same purpose,
+# but it's not as portable (e.g. Mac OS X doesn't have it).  These should
+# only be used where Python/Perl are known to be available.
+READLINK_PY=$(PYTHON) -c 'import sys,os; print(os.path.realpath(sys.argv[1]))'
+READLINK_PL=$(PERL) -e 'use Cwd; print Cwd::realpath(shift)'
+
 swig-pl_DEPS = autogen-swig-pl libsvn_swig_perl \
   $(SWIG_PL_DIR)/native/Makefile
 swig-pl: $(swig-pl_DEPS)
-	if test "$(SWIG_PL_DIR)" != "$(SWIG_PL_SRC_DIR)"; then \
+	if test "`$(READLINK_PL) $(SWIG_PL_DIR)`" != "`$(READLINK_PL) $(SWIG_PL_SRC_DIR)`"; then \
 	  ln -sf $(SWIG_PL_SRC_DIR)/native/*.c $(SWIG_PL_DIR)/native; \
 	fi
 	cd $(SWIG_PL_DIR)/native; $(MAKE) OPTIMIZE="" OTHERLDFLAGS="$(SWIG_LDFLAGS)"

=== modified file 'README.Debian-tarball'
--- README.Debian-tarball	2011-01-05 22:59:03 +0000
+++ README.Debian-tarball	2011-03-22 11:15:25 +0000
@@ -1,4 +1,4 @@
-This tarball is the same as official subversion-1.6.15.tar.gz,
+This tarball is the same as official subversion-1.6.16.tar.gz,
 except that several unlicensed or unclearly-licensed files were
 removed:
 
@@ -12,4 +12,4 @@
   contrib/server-side/backup-recipe.sh
   contrib/server-side/load_repo_with_mergesensitive_copy.sh
 
-Max Bowsher, 5 Jan 2011
+Peter Samuelson, 25 Feb 2011

=== modified file 'configure'
--- configure	2011-01-05 22:59:03 +0000
+++ configure	2011-03-22 11:15:25 +0000
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64 for subversion 1.6.15.
+# Generated by GNU Autoconf 2.64 for subversion 1.6.16.
 #
 # Report bugs to <http://subversion.tigris.org/>.
 #
@@ -703,8 +703,8 @@
 # Identity of this package.
 PACKAGE_NAME='subversion'
 PACKAGE_TARNAME='subversion'
-PACKAGE_VERSION='1.6.15'
-PACKAGE_STRING='subversion 1.6.15'
+PACKAGE_VERSION='1.6.16'
+PACKAGE_STRING='subversion 1.6.16'
 PACKAGE_BUGREPORT='http://subversion.tigris.org/'
 PACKAGE_URL=''
 
@@ -1532,7 +1532,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures subversion 1.6.15 to adapt to many kinds of systems.
+\`configure' configures subversion 1.6.16 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1598,7 +1598,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of subversion 1.6.15:";;
+     short | recursive ) echo "Configuration of subversion 1.6.16:";;
    esac
   cat <<\_ACEOF
 
@@ -1784,7 +1784,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-subversion configure 1.6.15
+subversion configure 1.6.16
 generated by GNU Autoconf 2.64
 
 Copyright (C) 2009 Free Software Foundation, Inc.
@@ -2414,7 +2414,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by subversion $as_me 1.6.15, which was
+It was created by subversion $as_me 1.6.16, which was
 generated by GNU Autoconf 2.64.  Invocation command line was
 
   $ $0 $@
@@ -2787,8 +2787,8 @@
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.6.15" >&5
-$as_echo "$as_me: Configuring Subversion 1.6.15" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.6.16" >&5
+$as_echo "$as_me: Configuring Subversion 1.6.16" >&6;}
 
 abs_srcdir="`cd $srcdir && pwd`"
 
@@ -26819,7 +26819,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by subversion $as_me 1.6.15, which was
+This file was extended by subversion $as_me 1.6.16, which was
 generated by GNU Autoconf 2.64.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -26883,7 +26883,7 @@
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_version="\\
-subversion config.status 1.6.15
+subversion config.status 1.6.16
 configured by $0, generated by GNU Autoconf 2.64,
   with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 

=== modified file 'debian/changelog'
--- debian/changelog	2011-01-05 23:01:25 +0000
+++ debian/changelog	2011-03-22 11:15:25 +0000
@@ -1,3 +1,28 @@
+subversion (1.6.16dfsg-1svn1) natty; urgency=high
+
+  * Merge with Debian unstable. Remaining changes:
+    - Create pot file on build.
+    - Build a python-subversion-dbg package.
+    - (Build-)depend on default-jre-headless/-jdk.
+    - Do not apply java-build patch.
+    - debian/rules: Manually create the doxygen output directory, otherwise
+      we get weird build failures when running parallel builds.
+    - Disable the serf backend because serf is in universe.
+    - Fix FTBFS against Python 2.7 by disabling some problematic tests.
+
+ -- Michael Diers <mdiers@xxxxxxxx>  Tue, 22 Mar 2011 11:57:19 +0100
+
+subversion (1.6.16dfsg-1) unstable; urgency=high
+
+  * New upstream version.
+    - Fixes CVE-2011-0715: Remotely crash mod_dav_svn anonymously via a
+      lock token.
+  * patches/change-range: New patch to support -cA-B syntax on command line.
+  * Stop using svn-make-config.c; we can do the same just by running svn
+    itself in a controlled home directory.  Delete debian/tools/.
+
+ -- Peter Samuelson <peter@xxxxxxxx>  Thu, 03 Mar 2011 10:55:42 -0600
+
 subversion (1.6.15dfsg~ppa-0svn1) natty; urgency=low
 
   * Create a PPA build, merging:
@@ -8,10 +33,42 @@
 
  -- Max Bowsher <maxb@xxxxxxx>  Wed, 05 Jan 2011 23:01:20 +0000
 
+subversion (1.6.12dfsg-4ubuntu1) natty; urgency=low
+
+  * Merge with Debian unstable. Remaining changes:
+    - Create pot file on build.
+    - Build a python-subversion-dbg package.
+    - (Build-)depend on default-jre-headless/-jdk.
+    - Do not apply java-build patch.
+    - debian/rules: Manually create the doxygen output directory, otherwise
+      we get weird build failures when running parallel builds.
+    - Disable the serf backend because serf is in universe.
+    - Don't override LD_LIBRARY_PATH completely but prepend to it as to not
+      break fakeroot.
+    - Fix FTBFS against Python 2.7 by disabling some problematic tests.
+    - debian/tools/Makefile:
+      + Add APR_LIBS and use it when linking svn-make-config
+      + svn_config_ensure() moved from libsvn_client/libsvn_client-1.la to
+        libsvn_subr/libsvn_subr-1.la.
+
+ -- Michael Bienia <geser@xxxxxxxxxx>  Fri, 28 Jan 2011 14:14:19 +0100
+
+subversion (1.6.12dfsg-4) unstable; urgency=high
+
+  * patches/loosen-sqlite-version-check: New patch: Relax the SQLite
+    version check, to match the Debian sqlite3 packaging.
+    (Closes: #608925)
+  * patches/cve-2010-4539: New patch for CVE-2010-4539, fixing a remotely
+    triggered crash in mod_dav_svn involving use of the SVNParentPath
+    feature.  (Closes: #608989)
+
+ -- Peter Samuelson <peter@xxxxxxxx>  Wed, 05 Jan 2011 10:43:01 -0600
+
 subversion (1.6.12dfsg-3) unstable; urgency=medium
 
   * Apply two patches from upstream 1.6.15:
-    - patches/server-memleak: New patch: fix some server-side memory leaks.
+    - patches/server-memleak: New patch: fix some server-side memory
+      leaks, including CVE-2010-4644.
     - patches/no-wc1.7-check: New patch: Stop checking for being inside a
       1.7 working copy.  The value is too low and the performance penalty
       too high.
@@ -567,35 +624,6 @@
 
  -- Matthias Klose <doko@xxxxxxxxxx>  Wed, 30 Jan 2008 12:45:05 +0100
 
-subversion (1.4.6dfsg1-1) unstable; urgency=low
-
-  * New upstream version.
-  * Build with db 4.6, to match apr-util.
-  * patches/svn-clean-manpage: New patch, fix a small typo.  (Closes: #441827)
-  * patches/neon27: New patch from upstream trunk to support neon 0.27.
-    - control: build-depend on libneon27-dev.
-    - rules: no longer --disable-neon-version-check.
-  * patches/ruby-newswig: Support swig 1.3.33.  (Closes: #453166)
-  * patches/python-memleak: New patch to fix a serious memory leak in the
-    Python bindings.  Thanks to Jelmer Vernooij.  (Closes: #428755)
-  * control: Policy 3.7.3.
-  * control: spell 'Source-Version' as 'binary:Version' for political
-    correctness.  (Or for clarity.)
-  * control: add appropriate Vcs-Svn and Vcs-Browser fields.
-  * control: subversion-tools Recommends: rsync.  (Closes: #459023)
-  * patches/svn2cl: update svn2cl to 0.9 (from upstream trunk).
-  * patches/commit-email: use original 'sendmail' commit-email.pl mode,
-    rather than the direct SMTP feature.  (Closes: #447824)
-  * rules: do not run 'dh_testroot' or 'make extraclean' in clean rule.
-  * rules: rewrite DEB_BUILD_OPTIONS support; remove 'notest' synonym, as
-    the world seems to be standardizing on 'nocheck'.
-  * rules: remove 'DEB_BUILD_OPTIONS=-j[N]' support, add support for the
-    new 'dpkg-buildpackage -j[N]' feature.
-  * rules: add an option to disable ruby bindings.  Though it turns out
-    we don't need it ... yet.
-
- -- Peter Samuelson <peter@xxxxxxxx>  Mon, 11 Feb 2008 23:49:02 -0600
-
 subversion (1.4.4dfsg1-1ubuntu5) hardy; urgency=medium
 
   * Add debian/patches/python-memleak: Fix major memory leak in the 

=== modified file 'debian/patches/build-fixes'
--- debian/patches/build-fixes	2010-01-27 01:57:47 +0000
+++ debian/patches/build-fixes	2011-03-22 11:15:25 +0000
@@ -1,6 +1,6 @@
 --- a/build/generator/swig/checkout_swig_header.py
 +++ b/build/generator/swig/checkout_swig_header.py
-@@ -20,15 +20,14 @@
+@@ -20,15 +20,14 @@ class Generator(generator.swig.Generator
  
    def write_makefile_rules(self, makefile):
      """Write makefile rules to checkout files"""
@@ -22,7 +22,7 @@
                     % " ".join(checkout_locations))
 --- a/Makefile.in
 +++ b/Makefile.in
-@@ -249,14 +249,14 @@
+@@ -249,14 +249,14 @@ INSTALL_EXTRA_SWIG_PY=\
  
  # The path to generated and complementary source files for the SWIG
  # bindings.
@@ -42,7 +42,7 @@
  
  ### Automate JAR creation using Makefile generator's javahl-java.jar
  ### property.  Enhance generator to support JAR installation.
-@@ -532,6 +532,7 @@
+@@ -537,6 +537,7 @@ doc: doc-misc-docs doc-api doc-javahl
  # Generate API documentation for the C libraries.
  ### This could also generate POD for swig-perl, etc.
  doc-api:
@@ -50,16 +50,7 @@
  	( cd $(top_srcdir) && \
  	  sed "s,\(OUTPUT_DIRECTORY *= *\),\1$(abs_builddir)/," \
  	  doc/doxygen.conf | doxygen - )
-@@ -682,7 +683,7 @@
- swig-pl_DEPS = autogen-swig-pl libsvn_swig_perl \
-   $(SWIG_PL_DIR)/native/Makefile
- swig-pl: $(swig-pl_DEPS)
--	if test "$(SWIG_PL_DIR)" != "$(SWIG_PL_SRC_DIR)"; then \
-+	if test "$$(cd $(SWIG_PL_DIR);pwd)" != "$(SWIG_PL_SRC_DIR)"; then \
- 	  ln -sf $(SWIG_PL_SRC_DIR)/native/*.c $(SWIG_PL_DIR)/native; \
- 	fi
- 	cd $(SWIG_PL_DIR)/native; $(MAKE) OPTIMIZE="" OTHERLDFLAGS="$(SWIG_LDFLAGS)"
-@@ -705,8 +706,7 @@
+@@ -716,8 +717,7 @@ clean-swig-pl:
  	fi
  	for d in $(SWIG_PL_DIR)/libsvn_swig_perl; \
  	do \
@@ -69,7 +60,7 @@
  	done
  	if [ -f "$(SWIG_PL_DIR)/native/Makefile" ]; then \
  	  cd $(SWIG_PL_DIR)/native; $(MAKE) clean; \
-@@ -739,7 +739,7 @@
+@@ -750,7 +750,7 @@ clean-swig-py:
  	fi
  	for d in $(SWIG_PY_DIR) $(SWIG_PY_DIR)/libsvn_swig_py; \
  	do \
@@ -78,7 +69,7 @@
  	done
  	find $(SWIG_PY_SRC_DIR) $(SWIG_PY_DIR) -name "*.pyc" -exec rm {} ';'
  
-@@ -763,8 +763,7 @@
+@@ -774,8 +774,7 @@ clean-swig-rb:
  	fi
  	for d in $(SWIG_RB_DIR) $(SWIG_RB_DIR)/libsvn_swig_ruby; \
  	do \
@@ -90,7 +81,7 @@
  extraclean-swig-rb: clean-swig-rb
 --- a/build/generator/gen_make.py
 +++ b/build/generator/gen_make.py
-@@ -183,9 +183,9 @@
+@@ -183,9 +183,9 @@ class Generator(gen_base.GeneratorBase):
        source_dir = build_path_dirname(source)
        opts = self.swig.opts[objname.lang]
        if not self.release_mode:
@@ -103,7 +94,7 @@
          )
  
      self.ofile.write('\n')
-@@ -456,11 +456,11 @@
+@@ -456,11 +456,11 @@ class Generator(gen_base.GeneratorBase):
        self.ofile.write('%s: %s\n' % (objname, deps))
        cmd = objname.compile_cmd
        if cmd:
@@ -120,7 +111,7 @@
  
 --- a/build/generator/gen_base.py
 +++ b/build/generator/gen_base.py
-@@ -284,7 +284,8 @@
+@@ -284,7 +284,8 @@ class SourceFile(DependencyNode):
  
  class SWIGSource(SourceFile):
    def __init__(self, filename):
@@ -132,7 +123,7 @@
  lang_abbrev = {
 --- a/build/generator/swig/header_wrappers.py
 +++ b/build/generator/swig/header_wrappers.py
-@@ -32,7 +32,7 @@
+@@ -32,7 +32,7 @@ class Generator(generator.swig.Generator
      """Write makefile rules for generating SWIG wrappers for Subversion
      header files."""
      wrapper_fnames = []
@@ -143,7 +134,7 @@
      for fname in self.includes:
 --- a/configure.ac
 +++ b/configure.ac
-@@ -1010,6 +1010,11 @@
+@@ -1010,6 +1010,11 @@ SVN_CONFIG_SCRIPT(packages/solaris/pkgin
  AC_SUBST(SVN_CONFIG_SCRIPT_FILES)
  
  AC_OUTPUT
@@ -157,7 +148,7 @@
  
 --- a/build.conf
 +++ b/build.conf
-@@ -648,13 +648,14 @@
+@@ -648,13 +648,14 @@ libs = libsvn_test libsvn_repos libsvn_f
  # ----------------------------------------------------------------------------
  # Tests for libsvn_subr
  

=== added file 'debian/patches/change-range'
--- debian/patches/change-range	1970-01-01 00:00:00 +0000
+++ debian/patches/change-range	2011-03-22 11:15:25 +0000
@@ -0,0 +1,88 @@
+Support -cA-B syntax on command line, from upstream trunk r1004727,1004746.
+This is pure convenience.  -c12,15-20,25 is equivalent to -c12 -r14:20 -c25.
+
+
+--- a/subversion/svn/main.c
++++ b/subversion/svn/main.c
+@@ -1212,7 +1212,7 @@
+       case 'c':
+         {
+           char *end;
+-          svn_revnum_t changeno;
++          svn_revnum_t changeno, changeno_end;
+           svn_opt_revision_range_t *range;
+           apr_array_header_t *change_revs =
+             svn_cstring_split(opt_arg, ", \n\r\t\v", TRUE, pool);
+@@ -1236,7 +1236,22 @@
+                  ### "{DATE}" and the special words. */
+               while (*change_str == 'r')
+                 change_str++;
+-              changeno = strtol(change_str, &end, 10);
++              changeno = changeno_end = strtol(change_str, &end, 10);
++              if (end != change_str && *end == '-')
++                {
++                  if (changeno < 0)
++                    {
++                      err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
++                                              _("Negative number in range (%s)"
++                                                " not supported with -c"),
++                                              change_str);
++                      return svn_cmdline_handle_exit_error(err, pool, "svn: ");
++                    }
++                  change_str = end+1;
++                  while (*change_str == 'r')
++                    change_str++;
++                  changeno_end = strtol(change_str, &end, 10);
++                }
+               if (end == change_str || *end != '\0')
+                 {
+                   err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+@@ -1254,19 +1269,28 @@
+ 
+               /* Figure out the range:
+                     -c N  -> -r N-1:N
+-                    -c -N -> -r N:N-1 */
+-              range = apr_palloc(pool, sizeof(*range));
++                    -c -N -> -r N:N-1
++                    -c M-N -> -r M-1:N for M < N
++                    -c M-N -> -r M:N-1 for M > N
++                    -c -M-N -> error (too confusing/no valid use case)
++              */
+               if (changeno > 0)
+                 {
+-                  range->start.value.number = changeno - 1;
+-                  range->end.value.number = changeno;
++                  if (changeno <= changeno_end)
++                    changeno--;
++                  else
++                    changeno_end--;
+                 }
+               else
+                 {
+                   changeno = -changeno;
+-                  range->start.value.number = changeno;
+-                  range->end.value.number = changeno - 1;
++                  changeno_end = changeno - 1;
+                 }
++
++              range = apr_palloc(pool, sizeof(*range));
++              range->start.value.number = changeno;
++              range->end.value.number = changeno_end;
++
+               opt_state.used_change_arg = TRUE;
+               range->start.kind = svn_opt_revision_number;
+               range->end.kind = svn_opt_revision_number;
+--- a/subversion/svn/log-cmd.c
++++ b/subversion/svn/log-cmd.c
+@@ -481,9 +481,9 @@
+           range = APR_ARRAY_IDX(opt_state->revision_ranges, i,
+                                 svn_opt_revision_range_t *);
+           if (range->start.value.number < range->end.value.number)
+-            range->start = range->end;
++            range->start.value.number++;
+           else
+-            range->end = range->start;
++            range->end.value.number++;
+         }
+     }
+ 

=== added file 'debian/patches/loosen-sqlite-version-check'
--- debian/patches/loosen-sqlite-version-check	1970-01-01 00:00:00 +0000
+++ debian/patches/loosen-sqlite-version-check	2011-03-22 11:15:25 +0000
@@ -0,0 +1,18 @@
+The actual ABI compatibility of sqlite3 doesn't seem to depend on the
+patchlevel (the x in 3.7.x), so omit that in our sanity check here.
+
+This matters in Debian because the sqlite3 library package exports a
+slightly more liberal shlibs file than the library version itself.
+
+
+--- a/subversion/libsvn_subr/sqlite.c
++++ b/subversion/libsvn_subr/sqlite.c
+@@ -486,7 +486,7 @@ static volatile svn_atomic_t sqlite_init
+ static svn_error_t *
+ init_sqlite(void *baton, apr_pool_t *pool)
+ {
+-  if (sqlite3_libversion_number() < SQLITE_VERSION_NUMBER) {
++  if (sqlite3_libversion_number()/1000 < SQLITE_VERSION_NUMBER/1000) {
+     return svn_error_createf(SVN_ERR_SQLITE_ERROR, NULL,
+                              _("SQLite compiled for %s, but running with %s"),
+                              SQLITE_VERSION, sqlite3_libversion());

=== modified file 'debian/patches/series'
--- debian/patches/series	2011-01-05 23:01:25 +0000
+++ debian/patches/series	2011-03-22 11:15:25 +0000
@@ -21,3 +21,5 @@
 no-dbus-spam
 svn2cl-upstream
 kwallet-wid
+loosen-sqlite-version-check
+change-range

=== modified file 'debian/rules'
--- debian/rules	2011-01-05 22:45:51 +0000
+++ debian/rules	2011-03-22 11:15:25 +0000
@@ -156,7 +156,7 @@
 	dh_testdir
 
 	test -e patches || ln -s debian/patches patches
-	mkdir -p $(DEB_BUILDDIR)
+	mkdir -p $(DEB_BUILDDIR) $(HOME)
 	cd $(DEB_BUILDDIR) && \
 		PYTHON=/usr/bin/python RUBY=/usr/bin/$(RUBY) \
 		$(CURDIR)/configure $(confflags)
@@ -208,6 +208,8 @@
 	$(call allpydbg, $(MAKE_B) -j1 autogen-swig)
 	ln -sf python$(PYDEFAULT) $(PY_DIR)
 	+$(MAKE_B) all tools
+	# Run svn once, to make sure it populates $(HOME)/.subversion/*
+	$(DEB_BUILDDIR)/subversion/svn/svn --version > /dev/null
 	$(call allpy, \
 	  $(MAKE_B) swig-py PYTHON=python$$v PYVER=$$v \
 	            PYTHON_INCLUDES=-I/usr/include/python$$v \
@@ -266,7 +268,6 @@
 	dh_testdir
 	dh_clean
 	$(RM) patches
-	$(MAKE) -C debian/tools clean
 	! [ -f $(DEB_BUILDDIR)/Makefile ] || $(MAKE_B) extraclean-swig distclean
 	$(RM) -r $(DEB_BUILDDIR)
 	$(RM) build-outputs.mk gen-make.opts subversion/svn_private_config.h.in
@@ -364,12 +365,6 @@
 		javahl_javahdir=/usr/include/svn-javahl
 endif
 
-	# Create our default configuration files to be installed in
-	# /etc/subversion/
-	$(MAKE) -C debian/tools \
-	       LD_LIBRARY_PATH="$(CURDIR)/debian/tmp/usr/lib$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}" \
-	       DEB_SRCDIR=$(CURDIR) DEB_BUILDDIR=$(CURDIR)/$(DEB_BUILDDIR)
-
 	$(MAKE_B) install-swig-pl-lib \
 		DESTDIR=$(CURDIR)/debian/tmp
 	$(MAKE) -C $(PERL_DIR) install \

=== modified file 'debian/subversion.install'
--- debian/subversion.install	2009-06-06 22:57:04 +0000
+++ debian/subversion.install	2011-03-22 11:15:25 +0000
@@ -4,7 +4,7 @@
 debian/tmp/usr/share/man/man5		usr/share/man
 debian/tmp/usr/share/man/man8		usr/share/man
 
-debian/tools/svn-defaults/config	etc/subversion
-debian/tools/svn-defaults/servers	etc/subversion
+BUILD/dummy_home/.subversion/config	etc/subversion
+BUILD/dummy_home/.subversion/servers	etc/subversion
 contrib/client-side/emacs/psvn.el	usr/share/emacs/site-lisp
 debian/etc/50psvn.el			etc/emacs/site-start.d

=== removed directory 'debian/tools'
=== removed file 'debian/tools/Makefile'
--- debian/tools/Makefile	2010-11-20 11:21:18 +0000
+++ debian/tools/Makefile	1970-01-01 00:00:00 +0000
@@ -1,21 +0,0 @@
-APR_CFLAGS = `apr-config --cppflags --includes --cflags`
-APR_LIBS = `apr-config --ldflags --link-ld --libs`
-SVN_INC = -I$(DEB_SRCDIR)/subversion/include
-CFLAGS     += -Wall \
-		$(SVN_INC) \
-		$(APR_CFLAGS)
-
-all: default-config
-
-default-config: clean svn-make-config
-	./svn-make-config
-
-svn-make-config: svn-make-config.o
-	libtool --mode=link gcc  $(APR_LIBS) svn-make-config.o $(DEB_BUILDDIR)/subversion/libsvn_subr/libsvn_subr-1.la -o svn-make-config
-
-clean:
-	$(RM) svn-make-config svn-make-config.o
-	rm -rf svn-defaults
-	rm -rf .libs
-
-.PHONY: clean

=== removed file 'debian/tools/README'
--- debian/tools/README	2005-06-29 13:09:32 +0000
+++ debian/tools/README	1970-01-01 00:00:00 +0000
@@ -1,5 +0,0 @@
-The files in this directory are used to create the default
-/etc/subversion/config and /etc/subversion/servers on Debian systems.  The
-default configuration files are created by the subversion libraries.  This
-ensures that new configuration options and changes to existing options are
-reflected in the default /etc/subversion/ files in a timely manner.

=== removed file 'debian/tools/svn-make-config.c'
--- debian/tools/svn-make-config.c	2005-06-29 13:09:32 +0000
+++ debian/tools/svn-make-config.c	1970-01-01 00:00:00 +0000
@@ -1,60 +0,0 @@
-/*
- * Subversion will populate the user's ~/.subversion/ directory with
- * default configuration files if the directory does not exist.  Some
- * of these same files are useful to system administrators who want to
- * put files in /etc/subversion/ to control site-wide configuration.
- * This program creates a default set of subversion config files in
- * the current directory.
- */ 
-
-#include <apr.h>
-#include <apr_general.h>
-#include <apr_pools.h>
-#include <apr_file_io.h>
-#include <apr_file_info.h>
-#include <svn_config.h>
-#include <stdio.h>
-
-#define ROOT_DIR "svn-defaults"
-
-int
-main(int argc, char *argv[])
-{
-  char *root;
-  apr_pool_t *pool;
-  apr_file_t *fptr;
-  apr_finfo_t finfo;
-  
-  apr_initialize();
-  apr_pool_create(&pool, NULL);
- 
-  apr_file_open_stderr(&fptr, pool);
-
-  if (argc != 1)
-    {
-      apr_file_printf(fptr, "Usage: %s\n", argv[0]);
-      apr_file_printf(fptr, "Create a set of default config files"
-              "in $PWD/" ROOT_DIR "\n");
-      exit(0);
-    }
-  
-  root = apr_psprintf(pool, "%s/%s", getenv("PWD"), ROOT_DIR);
-
-  if (!root)
-    {
-      apr_file_printf(fptr, "apr_psprintf failed\n");
-      exit(1);
-    }
-
-  if (APR_SUCCESS == apr_stat(&finfo, root, 0, pool))
-    {
-      apr_file_printf(fptr, "%s exists\n", root);
-      exit(1);
-    }
-
-  svn_config_ensure(root, pool);
-  
-  apr_terminate();
-  
-  return 0;
-}

=== modified file 'subversion/bindings/javahl/native/Outputer.cpp'
--- subversion/bindings/javahl/native/Outputer.cpp	2009-06-06 22:57:04 +0000
+++ subversion/bindings/javahl/native/Outputer.cpp	2011-03-22 11:15:25 +0000
@@ -101,6 +101,10 @@
   if (JNIUtil::isJavaExceptionThrown())
     return SVN_NO_ERROR;
 
+  env->DeleteLocalRef(data);
+  if (JNIUtil::isJavaExceptionThrown())
+    return SVN_NO_ERROR;
+
   // return the number of bytes written
   *len = written;
 

=== modified file 'subversion/bindings/swig/perl/native/Makefile.PL.in'
--- subversion/bindings/swig/perl/native/Makefile.PL.in	2009-11-17 02:16:23 +0000
+++ subversion/bindings/swig/perl/native/Makefile.PL.in	2011-03-22 11:15:25 +0000
@@ -92,7 +92,7 @@
    my $module_c_files = join (' ',map { "svn_$_.c"} @modules);
    my $module_make_commands = join ('',map {"\t\$(MAKE) -f Makefile.$_\n"} @modules);
 
-  my $fullperlrun = "$apr_shlib_path_var=" . join(':',@ldpaths);
+  my $fullperlrun = "$apr_shlib_path_var=\${$apr_shlib_path_var}:" . join(':',@ldpaths);
   
    return <<"EOPOST";
 all :: modules

=== modified file 'subversion/bindings/swig/perl/native/core.c'
--- subversion/bindings/swig/perl/native/core.c	2011-01-05 22:59:03 +0000
+++ subversion/bindings/swig/perl/native/core.c	2011-03-22 11:15:25 +0000
@@ -33630,12 +33630,12 @@
   } while(0) /*@SWIG@*/;
   /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_PATCH", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(15)));
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(16)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_MICRO", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(15)));
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(16)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
@@ -33645,7 +33645,7 @@
   } while(0) /*@SWIG@*/;
   /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_TAG", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_FromCharPtr(" (r1038135)"));
+    sv_setsv(sv, SWIG_FromCharPtr(" (r1073529)"));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
@@ -33655,7 +33655,7 @@
   } while(0) /*@SWIG@*/;
   /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
     SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_REVISION", TRUE | 0x2 | GV_ADDMULTI);
-    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(1038135)));
+    sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(1073529)));
     SvREADONLY_on(sv);
   } while(0) /*@SWIG@*/;
   /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {

=== modified file 'subversion/bindings/swig/python/core.c'
--- subversion/bindings/swig/python/core.c	2011-01-05 22:59:03 +0000
+++ subversion/bindings/swig/python/core.c	2011-03-22 11:15:25 +0000
@@ -25569,12 +25569,12 @@
   SWIG_Python_SetConstant(d, "SVN_ALLOCATOR_RECOMMENDED_MAX_FREE",SWIG_From_long((long)((4096*1024))));
   SWIG_Python_SetConstant(d, "SVN_VER_MAJOR",SWIG_From_long((long)(1)));
   SWIG_Python_SetConstant(d, "SVN_VER_MINOR",SWIG_From_long((long)(6)));
-  SWIG_Python_SetConstant(d, "SVN_VER_PATCH",SWIG_From_long((long)(15)));
-  SWIG_Python_SetConstant(d, "SVN_VER_MICRO",SWIG_From_long((long)(15)));
+  SWIG_Python_SetConstant(d, "SVN_VER_PATCH",SWIG_From_long((long)(16)));
+  SWIG_Python_SetConstant(d, "SVN_VER_MICRO",SWIG_From_long((long)(16)));
   SWIG_Python_SetConstant(d, "SVN_VER_LIBRARY",SWIG_From_long((long)(1)));
-  SWIG_Python_SetConstant(d, "SVN_VER_TAG",SWIG_FromCharPtr(" (r1038135)"));
+  SWIG_Python_SetConstant(d, "SVN_VER_TAG",SWIG_FromCharPtr(" (r1073529)"));
   SWIG_Python_SetConstant(d, "SVN_VER_NUMTAG",SWIG_FromCharPtr(""));
-  SWIG_Python_SetConstant(d, "SVN_VER_REVISION",SWIG_From_long((long)(1038135)));
+  SWIG_Python_SetConstant(d, "SVN_VER_REVISION",SWIG_From_long((long)(1073529)));
   SWIG_Python_SetConstant(d, "svn_prop_entry_kind",SWIG_From_long((long)(svn_prop_entry_kind)));
   SWIG_Python_SetConstant(d, "svn_prop_wc_kind",SWIG_From_long((long)(svn_prop_wc_kind)));
   SWIG_Python_SetConstant(d, "svn_prop_regular_kind",SWIG_From_long((long)(svn_prop_regular_kind)));

=== modified file 'subversion/bindings/swig/ruby/core.c'
--- subversion/bindings/swig/ruby/core.c	2011-01-05 22:59:03 +0000
+++ subversion/bindings/swig/ruby/core.c	2011-03-22 11:15:25 +0000
@@ -29414,12 +29414,12 @@
   rb_define_module_function(mCore, "svn_pool_create", _wrap_svn_pool_create, -1);
   rb_define_const(mCore, "SVN_VER_MAJOR", SWIG_From_int((int)(1)));
   rb_define_const(mCore, "SVN_VER_MINOR", SWIG_From_int((int)(6)));
-  rb_define_const(mCore, "SVN_VER_PATCH", SWIG_From_int((int)(15)));
-  rb_define_const(mCore, "SVN_VER_MICRO", SWIG_From_int((int)(15)));
+  rb_define_const(mCore, "SVN_VER_PATCH", SWIG_From_int((int)(16)));
+  rb_define_const(mCore, "SVN_VER_MICRO", SWIG_From_int((int)(16)));
   rb_define_const(mCore, "SVN_VER_LIBRARY", SWIG_From_int((int)(1)));
-  rb_define_const(mCore, "SVN_VER_TAG", SWIG_FromCharPtr(" (r1038135)"));
+  rb_define_const(mCore, "SVN_VER_TAG", SWIG_FromCharPtr(" (r1073529)"));
   rb_define_const(mCore, "SVN_VER_NUMTAG", SWIG_FromCharPtr(""));
-  rb_define_const(mCore, "SVN_VER_REVISION", SWIG_From_int((int)(1038135)));
+  rb_define_const(mCore, "SVN_VER_REVISION", SWIG_From_int((int)(1073529)));
   
   cSvn_version_t.klass = rb_define_class_under(mCore, "Svn_version_t", rb_cObject);
   SWIG_TypeClientData(SWIGTYPE_p_svn_version_t, (void *) &cSvn_version_t);

=== modified file 'subversion/bindings/swig/ruby/test/util.rb'
--- subversion/bindings/swig/ruby/test/util.rb	2009-11-17 02:16:23 +0000
+++ subversion/bindings/swig/ruby/test/util.rb	2011-03-22 11:15:25 +0000
@@ -232,6 +232,9 @@
           @svnserve_port = port
           @repos_svnserve_uri =
             "svn://#{@svnserve_host}:#{@svnserve_port}#{@full_repos_path}"
+          # Avoid a race by waiting a short time for svnserve to start up.
+          # Without this, tests can fail with "Connection refused" errors.
+          sleep 0.1
           break
         end
       end

=== modified file 'subversion/include/svn_version.h'
--- subversion/include/svn_version.h	2011-01-05 22:59:03 +0000
+++ subversion/include/svn_version.h	2011-03-22 11:15:25 +0000
@@ -66,7 +66,7 @@
  *
  * @since New in 1.1.
  */
-#define SVN_VER_PATCH      15
+#define SVN_VER_PATCH      16
 
 
 /** @deprecated Provided for backward compatibility with the 1.0 API. */
@@ -89,7 +89,7 @@
  *
  * Always change this at the same time as SVN_VER_NUMTAG.
  */
-#define SVN_VER_TAG        " (r1038135)"
+#define SVN_VER_TAG        " (r1073529)"
 
 
 /** Number tag: a string describing the version.
@@ -115,7 +115,7 @@
  * When rolling a tarball, we automatically replace it with what we
  * guess to be the correct revision number.
  */
-#define SVN_VER_REVISION   1038135
+#define SVN_VER_REVISION   1073529
 
 
 /* Version strings composed from the above definitions. */

=== modified file 'subversion/libsvn_client/merge.c'
--- subversion/libsvn_client/merge.c	2011-01-05 22:59:03 +0000
+++ subversion/libsvn_client/merge.c	2011-03-22 11:15:25 +0000
@@ -502,7 +502,9 @@
 }
 
 /* Record a tree conflict in the WC, unless this is a dry run or a record-
- * only merge.
+ * only merge, or if a tree conflict is already flagged for the VICTIM_PATH.
+ * (The latter can happen if a merge-tracking-aware merge is doing multiple
+ * editor drives because of a gap in the range of eligible revisions.)
  *
  * The tree conflict, with its victim specified by VICTIM_PATH, is
  * assumed to have happened during a merge using merge baton MERGE_B.
@@ -523,16 +525,22 @@
               svn_wc_conflict_action_t action,
               svn_wc_conflict_reason_t reason)
 {
+  svn_wc_conflict_description_t *existing_conflict;
   svn_wc_conflict_description_t *conflict;
 
   if (merge_b->record_only || merge_b->dry_run)
     return SVN_NO_ERROR;
 
-  /* Construct the new conflict first to get the proper conflict->path */
-  SVN_ERR(make_tree_conflict(&conflict, merge_b, adm_access, victim_path,
-                             node_kind, action, reason));
+  SVN_ERR(svn_wc__get_tree_conflict(&existing_conflict, victim_path,
+                                    adm_access, merge_b->pool));
+  if (existing_conflict == NULL)
+    {
+      /* There is no existing tree conflict so it is safe to add one. */
+      SVN_ERR(make_tree_conflict(&conflict, merge_b, adm_access, victim_path,
+                                 node_kind, action, reason));
+      SVN_ERR(svn_wc__add_tree_conflict(conflict, adm_access, merge_b->pool));
+    }
 
-  SVN_ERR(svn_wc__add_tree_conflict(conflict, adm_access, merge_b->pool));
   return SVN_NO_ERROR;
 }
 

=== modified file 'subversion/libsvn_fs/fs-loader.c'
--- subversion/libsvn_fs/fs-loader.c	2009-11-17 02:16:23 +0000
+++ subversion/libsvn_fs/fs-loader.c	2011-03-22 11:15:25 +0000
@@ -658,6 +658,7 @@
   svn_fs_t *fs;
   const char *fs_path;
 
+  *new_rev = SVN_INVALID_REVNUM;
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
   fs = svn_fs_root_fs(txn_root);
   fs_path = svn_fs_path(fs, pool);

=== modified file 'subversion/libsvn_fs_fs/fs_fs.c'
--- subversion/libsvn_fs_fs/fs_fs.c	2011-01-05 22:59:03 +0000
+++ subversion/libsvn_fs_fs/fs_fs.c	2011-03-22 11:15:25 +0000
@@ -5903,13 +5903,19 @@
   /* Update the 'current' file. */
   SVN_ERR(write_final_current(cb->fs, cb->txn->id, new_rev, start_node_id,
                               start_copy_id, pool));
+
+  /* At this point the new revision is committed and globally visible
+     so let the caller know it succeeded by giving it the new revision
+     number, which fulfills svn_fs_commit_txn() contract.  Any errors
+     after this point do not change the fact that a new revision was
+     created. */
+  *cb->new_rev_p = new_rev;
+
   ffd->youngest_rev_cache = new_rev;
 
   /* Remove this transaction directory. */
   SVN_ERR(svn_fs_fs__purge_txn(cb->fs, cb->txn->id, pool));
 
-  *cb->new_rev_p = new_rev;
-
   return SVN_NO_ERROR;
 }
 

=== modified file 'subversion/libsvn_ra_neon/mergeinfo.c'
--- subversion/libsvn_ra_neon/mergeinfo.c	2009-11-17 02:16:23 +0000
+++ subversion/libsvn_ra_neon/mergeinfo.c	2011-03-22 11:15:25 +0000
@@ -171,6 +171,8 @@
   static const char minfo_report_tail[] =
     "</S:" SVN_DAV__MERGEINFO_REPORT ">" DEBUG_CR;
 
+  *catalog = NULL;
+
   /* Construct the request body. */
   svn_stringbuf_appendcstr(request_body, minfo_report_head);
   svn_stringbuf_appendcstr(request_body,
@@ -237,7 +239,7 @@
                                       FALSE,
                                       pool));
 
-  if (mb.err == SVN_NO_ERROR)
+  if (mb.err == SVN_NO_ERROR && apr_hash_count(mb.catalog))
     *catalog = mb.catalog;
 
   return mb.err;

=== modified file 'subversion/libsvn_ra_neon/options.c'
--- subversion/libsvn_ra_neon/options.c	2009-11-17 02:16:23 +0000
+++ subversion/libsvn_ra_neon/options.c	2011-03-22 11:15:25 +0000
@@ -110,6 +110,23 @@
 
 /** Capabilities exchange. */
 
+/* Return TRUE iff STR exactly matches any of the elements of LIST. */
+static svn_boolean_t
+match_list(const char *str, const apr_array_header_t *list)
+{
+  int i;
+
+  for (i = 0; i < list->nelts; i++)
+    {
+      const char *this_str = APR_ARRAY_IDX(list, i, char *);
+
+      if (strcmp(this_str, str) == 0)
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
 /* Both server and repository support the capability. */
 static const char *capability_yes = "yes";
 /* Either server or repository does not support the capability. */
@@ -167,22 +184,21 @@
          slightly more efficiently, but that wouldn't be worth it
          until we have many more capabilities. */
 
-      if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
+      if (match_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
         apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_DEPTH,
                      APR_HASH_KEY_STRING, capability_yes);
 
-      if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
+      if (match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
         /* The server doesn't know what repository we're referring
            to, so it can't just say capability_yes. */
         apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
                      APR_HASH_KEY_STRING, capability_server_yes);
 
-      if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
+      if (match_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
         apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_LOG_REVPROPS,
                      APR_HASH_KEY_STRING, capability_yes);
 
-      if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY,
-                                      vals))
+      if (match_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY, vals))
         apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_PARTIAL_REPLAY,
                      APR_HASH_KEY_STRING, capability_yes);
     }

=== modified file 'subversion/libsvn_ra_serf/mergeinfo.c'
--- subversion/libsvn_ra_serf/mergeinfo.c	2011-01-05 22:45:51 +0000
+++ subversion/libsvn_ra_serf/mergeinfo.c	2011-03-22 11:15:25 +0000
@@ -238,6 +238,8 @@
   const char *relative_url, *basecoll_url;
   const char *path;
 
+  *catalog = NULL;
+
   SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
                                          NULL, NULL, revision, NULL, pool));
 
@@ -297,7 +299,7 @@
   else
     SVN_ERR(err);
 
-  if (mergeinfo_ctx->done)
+  if (mergeinfo_ctx->done && apr_hash_count(mergeinfo_ctx->result_catalog))
     *catalog = mergeinfo_ctx->result_catalog;
 
   return SVN_NO_ERROR;

=== modified file 'subversion/libsvn_ra_serf/serf.c'
--- subversion/libsvn_ra_serf/serf.c	2011-01-05 22:45:51 +0000
+++ subversion/libsvn_ra_serf/serf.c	2011-03-22 11:15:25 +0000
@@ -67,6 +67,22 @@
   apr_pool_t *pool;
 };
 
+/* Return TRUE iff STR exactly matches any of the elements of LIST. */
+static svn_boolean_t
+match_list(const char *str, const apr_array_header_t *list)
+{
+  int i;
+
+  for (i = 0; i < list->nelts; i++)
+    {
+      const char *this_str = APR_ARRAY_IDX(list, i, char *);
+
+      if (strcmp(this_str, str) == 0)
+        return TRUE;
+    }
+
+  return FALSE;
+}
 
 /* This implements serf_bucket_headers_do_callback_fn_t.
  * BATON is a 'struct capabilities_response_baton *'.
@@ -91,13 +107,13 @@
          efficiently, but that wouldn't be worth it until we have many
          more capabilities. */
 
-      if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
+      if (match_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
         {
           apr_hash_set(crb->capabilities, SVN_RA_CAPABILITY_DEPTH,
                        APR_HASH_KEY_STRING, capability_yes);
         }
 
-      if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
+      if (match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
         {
           /* The server doesn't know what repository we're referring
              to, so it can't just say capability_yes. */
@@ -105,13 +121,13 @@
                        APR_HASH_KEY_STRING, capability_server_yes);
         }
 
-      if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
+      if (match_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
         {
           apr_hash_set(crb->capabilities, SVN_RA_CAPABILITY_LOG_REVPROPS,
                        APR_HASH_KEY_STRING, capability_yes);
         }
 
-      if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY, vals))
+      if (match_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY, vals))
         {
           apr_hash_set(crb->capabilities, SVN_RA_CAPABILITY_PARTIAL_REPLAY,
                        APR_HASH_KEY_STRING, capability_yes);

=== modified file 'subversion/libsvn_ra_serf/update.c'
--- subversion/libsvn_ra_serf/update.c	2011-01-05 22:59:03 +0000
+++ subversion/libsvn_ra_serf/update.c	2011-03-22 11:15:25 +0000
@@ -1633,7 +1633,8 @@
     }
   else if (state == IGNORE_PROP_NAME)
     {
-      push_state(parser, ctx, PROP);
+      report_info_t *info = push_state(parser, ctx, PROP);
+      info->prop_encoding = svn_xml_get_attr_value("encoding", attrs);
     }
   else if (state == NEED_PROP_NAME)
     {
@@ -1643,6 +1644,7 @@
 
       info->prop_ns = name.namespace;
       info->prop_name = apr_pstrdup(parser->state->pool, name.name);
+      info->prop_encoding = svn_xml_get_attr_value("encoding", attrs);
       info->prop_val = NULL;
       info->prop_val_len = 0;
     }

=== modified file 'subversion/libsvn_repos/fs-wrap.c'
--- subversion/libsvn_repos/fs-wrap.c	2009-11-17 02:16:23 +0000
+++ subversion/libsvn_repos/fs-wrap.c	2011-03-22 11:15:25 +0000
@@ -43,6 +43,8 @@
   svn_error_t *err;
   const char *txn_name;
 
+  *new_rev = SVN_INVALID_REVNUM;
+
   /* Run pre-commit hooks. */
   SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool));
   SVN_ERR(svn_repos__hooks_pre_commit(repos, txn_name, pool));

=== modified file 'subversion/libsvn_repos/log.c'
--- subversion/libsvn_repos/log.c	2011-01-05 22:59:03 +0000
+++ subversion/libsvn_repos/log.c	2011-03-22 11:15:25 +0000
@@ -1043,6 +1043,7 @@
 {
   svn_fs_root_t *root;
   apr_pool_t *iterpool;
+  svn_error_t *err;
   int i;
 
   /* Create a history object for each path so we can walk through
@@ -1084,7 +1085,6 @@
 
       if (i < MAX_OPEN_HISTORIES)
         {
-          svn_error_t *err;
           err = svn_fs_node_history(&info->hist, root, this_path, pool);
           if (err
               && ignore_missing_locations
@@ -1106,10 +1106,20 @@
           info->newpool = NULL;
         }
 
-      SVN_ERR(get_history(info, fs,
-                          strict_node_history,
-                          authz_read_func, authz_read_baton,
-                          hist_start, pool));
+      err = get_history(info, fs,
+                        strict_node_history,
+                        authz_read_func, authz_read_baton,
+                        hist_start, pool);
+      if (err
+          && ignore_missing_locations
+          && (err->apr_err == SVN_ERR_FS_NOT_FOUND ||
+              err->apr_err == SVN_ERR_FS_NOT_DIRECTORY ||
+              err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION))
+        {
+          svn_error_clear(err);
+          continue;
+        }
+      SVN_ERR(err);
       APR_ARRAY_PUSH(*histories, struct path_info *) = info;
     }
   svn_pool_destroy(iterpool);

=== modified file 'subversion/libsvn_repos/rev_hunt.c'
--- subversion/libsvn_repos/rev_hunt.c	2011-01-05 22:59:03 +0000
+++ subversion/libsvn_repos/rev_hunt.c	2011-03-22 11:15:25 +0000
@@ -1090,8 +1090,8 @@
 
   /* We switch between two pools while looping, since we need information from
      the last iteration to be available. */
-  iterpool = svn_pool_create(result_pool);
-  last_pool = svn_pool_create(result_pool);
+  iterpool = svn_pool_create(scratch_pool);
+  last_pool = svn_pool_create(scratch_pool);
 
   /* The path had better be a file in this revision. */
   SVN_ERR(svn_fs_revision_root(&root, repos->fs, end, scratch_pool));
@@ -1170,6 +1170,7 @@
     }
 
   svn_pool_destroy(iterpool);
+  svn_pool_destroy(last_pool);
 
   return SVN_NO_ERROR;
 }

=== modified file 'subversion/libsvn_subr/error.c'
--- subversion/libsvn_subr/error.c	2009-11-17 02:16:23 +0000
+++ subversion/libsvn_subr/error.c	2011-03-22 11:15:25 +0000
@@ -36,7 +36,15 @@
 #include "svn_private_config.h"
 
 
-/*** Helpers for creating errors ***/
+/*
+ * Undefine the helpers for creating errors.
+ *
+ * *NOTE*: Any use of these functions in any other function may need
+ * to call svn_error__locate() because the macro that would otherwise
+ * do this is being undefined and the filename and line number will
+ * not be properly set in the static error_file and error_line
+ * variables.
+ */
 #undef svn_error_create
 #undef svn_error_createf
 #undef svn_error_quick_wrap
@@ -504,6 +512,11 @@
   if (!can_return)
     abort(); /* Nothing else we can do as a library */
 
+  /* The filename and line number of the error source needs to be set
+     here because svn_error_createf() is not the macro defined in
+     svn_error.h but the real function. */
+  svn_error__locate(file, line);
+
   if (expr)
     return svn_error_createf(SVN_ERR_ASSERTION_FAIL, NULL,
                              _("In file '%s' line %d: assertion failed (%s)"),

=== modified file 'subversion/libsvn_wc/props.c'
--- subversion/libsvn_wc/props.c	2011-01-05 22:59:03 +0000
+++ subversion/libsvn_wc/props.c	2011-03-22 11:15:25 +0000
@@ -1135,6 +1135,7 @@
                             const svn_string_t *working_val,
                             svn_wc_conflict_resolver_func_t conflict_func,
                             void *conflict_baton,
+                            svn_boolean_t dry_run,
                             apr_pool_t *pool)
 {
   svn_wc_conflict_result_t *result = NULL;
@@ -1143,7 +1144,7 @@
   svn_wc_conflict_description_t *cdesc;
   const char *dirpath = svn_path_dirname(path, filepool);
 
-  if (! conflict_func)
+  if (! conflict_func || dry_run)
     {
       /* Just postpone the conflict. */
       *conflict_remains = TRUE;
@@ -1364,6 +1365,7 @@
                       const svn_string_t *new_val,
                       svn_wc_conflict_resolver_func_t conflict_func,
                       void *conflict_baton,
+                      svn_boolean_t dry_run,
                       svn_wc_adm_access_t *adm_access,
                       apr_pool_t *pool)
 
@@ -1400,7 +1402,7 @@
                                                   NULL, new_val,
                                                   base_val, working_val,
                                                   conflict_func, conflict_baton,
-                                                  pool));
+                                                  dry_run, pool));
               if (got_conflict)
                 *conflict = svn_string_createf
                     (pool,
@@ -1416,7 +1418,8 @@
                                           is_dir, propname,
                                           working_props, NULL, new_val,
                                           base_val, NULL,
-                                          conflict_func, conflict_baton, pool));
+                                          conflict_func, conflict_baton,
+                                          dry_run, pool));
       if (got_conflict)
         *conflict = svn_string_createf
             (pool, _("Trying to create property '%s' with value '%s',\n"
@@ -1459,6 +1462,7 @@
                          const svn_string_t *old_val,
                          svn_wc_conflict_resolver_func_t conflict_func,
                          void *conflict_baton,
+                         svn_boolean_t dry_run,
                          svn_wc_adm_access_t *adm_access,
                          apr_pool_t *pool)
 {
@@ -1489,7 +1493,7 @@
                                                    old_val, NULL,
                                                    base_val, working_val,
                                                    conflict_func, conflict_baton,
-                                                   pool));
+                                                   dry_run, pool));
                if (got_conflict)
                  *conflict = svn_string_createf
                      (pool,
@@ -1510,7 +1514,8 @@
                                           is_dir, propname,
                                           working_props, old_val, NULL,
                                           base_val, working_val,
-                                          conflict_func, conflict_baton, pool));
+                                          conflict_func, conflict_baton,
+                                          dry_run, pool));
       if (got_conflict)
         *conflict = svn_string_createf
             (pool,
@@ -1542,6 +1547,7 @@
                                    const svn_string_t *new_val,
                                    svn_wc_conflict_resolver_func_t conflict_func,
                                    void *conflict_baton,
+                                   svn_boolean_t dry_run,
                                    svn_wc_adm_access_t *adm_access,
                                    apr_pool_t *pool)
 {
@@ -1583,7 +1589,7 @@
                                               old_val, new_val,
                                               base_val, working_val,
                                               conflict_func, conflict_baton,
-                                              pool));
+                                              dry_run, pool));
           if (got_conflict)
             *conflict = svn_string_createf
                 (pool,
@@ -1648,6 +1654,7 @@
                                  const svn_string_t *new_val,
                                  svn_wc_conflict_resolver_func_t conflict_func,
                                  void *conflict_baton,
+                                 svn_boolean_t dry_run,
                                  svn_wc_adm_access_t *adm_access,
                                  apr_pool_t *pool)
 {
@@ -1671,7 +1678,7 @@
                                           old_val, new_val,
                                           base_val, working_val,
                                           conflict_func, conflict_baton,
-                                          pool));
+                                          dry_run, pool));
       if (got_conflict)
         {
           /* Describe the conflict, referring to base_val as well as
@@ -1746,6 +1753,7 @@
                          const svn_string_t *new_val,
                          svn_wc_conflict_resolver_func_t conflict_func,
                          void *conflict_baton,
+                         svn_boolean_t dry_run,
                          svn_wc_adm_access_t *adm_access,
                          apr_pool_t *pool)
 {
@@ -1764,8 +1772,8 @@
                                                  working_props, conflict,
                                                  propname, base_val, old_val,
                                                  new_val, conflict_func,
-                                                 conflict_baton, adm_access,
-                                                 pool));
+                                                 conflict_baton,
+                                                 dry_run, adm_access, pool));
     }
   else
     {
@@ -1776,8 +1784,8 @@
                                                working_props, conflict,
                                                propname, base_val, old_val,
                                                new_val, conflict_func,
-                                               conflict_baton, adm_access,
-                                               pool));
+                                               conflict_baton,
+                                               dry_run, adm_access, pool));
     }
 
   return SVN_NO_ERROR;
@@ -1862,21 +1870,21 @@
                                       working_props, &conflict,
                                       propname, base_val, to_val,
                                       conflict_func, conflict_baton,
-                                      adm_access, pool));
+                                      dry_run, adm_access, pool));
 
       else if (! to_val) /* delete an existing property */
         SVN_ERR(apply_single_prop_delete(is_normal ? state : NULL, path, is_dir,
                                          working_props, &conflict,
                                          propname, base_val, from_val,
                                          conflict_func, conflict_baton,
-                                         adm_access, pool));
+                                         dry_run, adm_access, pool));
 
       else  /* changing an existing property */
         SVN_ERR(apply_single_prop_change(is_normal ? state : NULL, path, is_dir,
                                          working_props, &conflict,
                                          propname, base_val, from_val, to_val,
                                          conflict_func, conflict_baton,
-                                         adm_access, pool));
+                                         dry_run, adm_access, pool));
 
 
       /* merging logic complete, now we need to possibly log conflict

=== modified file 'subversion/mod_dav_svn/repos.c'
--- subversion/mod_dav_svn/repos.c	2011-01-05 22:59:03 +0000
+++ subversion/mod_dav_svn/repos.c	2011-03-22 11:15:25 +0000
@@ -1607,6 +1607,23 @@
 }
 
 
+/* Return TRUE iff STR exactly matches any of the elements of LIST. */
+static svn_boolean_t
+match_list(const char *str, const apr_array_header_t *list)
+{
+  int i;
+
+  for (i = 0; i < list->nelts; i++)
+    {
+      const char *this_str = APR_ARRAY_IDX(list, i, char *);
+
+      if (strcmp(this_str, str) == 0)
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
 
 static dav_error *
 get_resource(request_rec *r,
@@ -1815,8 +1832,7 @@
             apr_array_header_t *vals
               = svn_cstring_split(val, ",", TRUE, r->pool);
 
-            if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_MERGEINFO,
-                                            vals))
+            if (match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
               {
                 apr_hash_set(repos->client_capabilities,
                              SVN_RA_CAPABILITY_MERGEINFO,
@@ -1923,8 +1939,10 @@
       dav_locktoken_list *list = ltl;
 
       serr = svn_fs_get_access(&access_ctx, repos->fs);
-      if (serr)
+      if (serr || !access_ctx)
         {
+          if (serr == NULL)
+            serr = svn_error_create(SVN_ERR_FS_LOCK_OWNER_MISMATCH, NULL, NULL);
           return dav_svn__sanitize_error(serr, "Lock token is in request, "
                                          "but no user name",
                                          HTTP_BAD_REQUEST, r);

=== modified file 'subversion/mod_dav_svn/version.c'
--- subversion/mod_dav_svn/version.c	2009-11-17 02:16:23 +0000
+++ subversion/mod_dav_svn/version.c	2011-03-22 11:15:25 +0000
@@ -1172,11 +1172,13 @@
   svn_error_t *serr;
 
   serr = svn_fs_get_access(&fsaccess, resource->info->repos->fs);
-  if (serr)
+  if (serr || !fsaccess)
     {
       /* If an authenticated user name was attached to the request,
          then dav_svn_get_resource() should have already noticed and
          created an fs_access_t in the filesystem.  */
+      if (serr == NULL)
+        serr = svn_error_create(SVN_ERR_FS_LOCK_OWNER_MISMATCH, NULL, NULL);
       return dav_svn__sanitize_error(serr, "Lock token(s) in request, but "
                                      "missing an user name", HTTP_BAD_REQUEST,
                                      resource->info->r);

=== modified file 'subversion/po/zh_CN.po'
--- subversion/po/zh_CN.po	2011-01-05 22:59:03 +0000
+++ subversion/po/zh_CN.po	2011-03-22 11:15:25 +0000
@@ -38,8 +38,8 @@
 msgstr ""
 "Project-Id-Version: subversion 1.6\n"
 "Report-Msgid-Bugs-To: dev@xxxxxxxxxxxxxxxxxxxxx\n"
-"POT-Creation-Date: 2010-09-05 21:45+0800\n"
-"PO-Revision-Date: 2010-09-05 21:33+0800\n"
+"POT-Creation-Date: 2010-12-26 12:00+0800\n"
+"PO-Revision-Date: 2010-12-26 12:00+0800\n"
 "Last-Translator: Subversion Developers <dev@xxxxxxxxxxxxxxxxxxxxx>\n"
 "Language-Team: Simplified Chinese <dev@xxxxxxxxxxxxxxxxxxxxx>\n"
 "Language: \n"
@@ -3541,10 +3541,6 @@
 msgid "Incomplete or unterminated property block"
 msgstr "不完整或未结束的属性块"
 
-#, c-format
-msgid " removing '\\r' from %s ..."
-msgstr "正在从 '%s' 删除 '\\r' ..."
-
 msgid "Unexpected EOF writing contents"
 msgstr "写内容时意外结束"
 
@@ -3603,6 +3599,10 @@
 msgid "Unrecognized node-action on node '%s'"
 msgstr "节点“%s”的动作不能识别"
 
+#, c-format
+msgid " removing '\\r' from %s ..."
+msgstr "正在从 '%s' 删除 '\\r' ..."
+
 msgid " done.\n"
 msgstr "完成。\n"
 
@@ -4323,14 +4323,14 @@
 
 msgid ""
 "Copyright (C) 2000-2009 CollabNet.\n"
-"Subversion is open source software, see http://subversion.tigris.org/\n";
+"Subversion is open source software, see http://subversion.apache.org/\n";
 "This product includes software developed by CollabNet (http://www.Collab.";
 "Net/).\n"
 "\n"
 msgstr ""
 "版权所有 (C) 2000-2009 CollabNet。\n"
-"Subversion 是开放源代码软件,请参阅 http://subversion.tigris.org/ 站点。\n"
-"此产品包含由 CollabNet(http://www.Collab.Net/) 开发的软件。\n"
+"Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。\n"
+"此产品包含由 CollabNet (http://www.Collab.Net/) 开发的软件。\n"
 "\n"
 
 #, c-format
@@ -5181,15 +5181,6 @@
 
 #, c-format
 msgid ""
-"The path '%s' appears to be part of a Subversion 1.7 or greater\n"
-"working copy rooted at '%s'.\n"
-"Please upgrade your Subversion client to use this working copy."
-msgstr ""
-"路径 '%s' 好像是 Subversion 1.7 或更高版本的工作副本,根路径是 '%s'。\n"
-"请升级你的 Subversion 客户端,以使用此工作副本。"
-
-#, c-format
-msgid ""
 "Working copy format of '%s' is too old (%d); please check out your working "
 "copy again"
 msgstr "“%s”的工作副本格式太旧(%d);请重新取出工作副本"
@@ -5372,6 +5363,15 @@
 msgid "'%s' does not appear to be a URL"
 msgstr "“%s”不像是URL"
 
+#, c-format
+msgid ""
+"svn: warning: The depth of this commit is '%s', but copied directories will "
+"regardless be committed with depth '%s'. You must remove unwanted children of "
+"those directories in a separate commit.\n"
+msgstr ""
+"svn: 警告: 此提交的深度是 '%s',但是复制的目录将被提交的深度是 '%s'。你必须在"
+"独立的提交中删除这些目录中不需要的项目。\n"
+
 msgid "||||||| ORIGINAL"
 msgstr "||||||| 原始版本"
 

=== modified file 'subversion/tests/libsvn_fs/fs-test.c'
--- subversion/tests/libsvn_fs/fs-test.c	2009-11-17 02:16:23 +0000
+++ subversion/tests/libsvn_fs/fs-test.c	2011-03-22 11:15:25 +0000
@@ -54,6 +54,7 @@
  * EXPECTED_CONFLICT.  If they don't match, return error.
  *
  * If a conflict is expected but the commit succeeds anyway, return
+ * error.  If the commit fails but does not provide an error, return
  * error.
  */
 static svn_error_t *
@@ -94,13 +95,24 @@
              conflict, expected_conflict);
         }
     }
-  else if (err)   /* commit failed, but not due to conflict */
+  else if (err)   /* commit may have succeeded, but always report an error */
     {
-      return svn_error_quick_wrap
-        (err, "commit failed due to something other than a conflict");
+      if (SVN_IS_VALID_REVNUM(*new_rev))
+        return svn_error_quick_wrap
+          (err, "commit succeeded but something else failed");
+      else
+        return svn_error_quick_wrap
+          (err, "commit failed due to something other than a conflict");
     }
-  else            /* err == NULL, so commit succeeded */
+  else            /* err == NULL, commit should have succeeded */
     {
+      if (! SVN_IS_VALID_REVNUM(*new_rev))
+        {
+          return svn_error_create
+            (SVN_ERR_FS_GENERAL, NULL,
+             "commit failed but no error was returned");
+        }
+
       if (expected_conflict)
         {
           return svn_error_createf
@@ -1150,6 +1162,7 @@
 
   /* Commit it. */
   SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
 
   /* Make sure it's a different revision than before. */
   if (after_rev == before_rev)
@@ -1226,6 +1239,7 @@
 
     /* Go ahead and commit the tree, and destroy the txn object.  */
     SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
 
     /* Carefully validate that tree in the new revision, now. */
     SVN_ERR(svn_fs_revision_root(&revision_root, fs, after_rev, subpool));
@@ -1287,6 +1301,7 @@
 
     /* Go ahead and commit the tree, and destroy the txn object.  */
     SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
 
     /* Carefully validate that tree in the new revision, now. */
     SVN_ERR(svn_fs_revision_root(&revision_root, fs, after_rev, subpool));
@@ -2707,6 +2722,7 @@
 
   /* Commit the greek tree. */
   SVN_ERR(svn_fs_commit_txn(NULL, &new_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(new_rev));
 
   /* Create new transaction. */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, new_rev, pool));
@@ -2935,6 +2951,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
 
   after_commit = apr_time_now();
 
@@ -2989,6 +3006,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
   svn_pool_clear(subpool);
 
   /* Modify and commit iota a few times, then test to see if we can
@@ -3024,6 +3042,7 @@
     SVN_ERR(svn_test__set_file_contents
             (txn_root, "iota", iota_contents_2, subpool));
     SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
     svn_pool_clear(subpool);
 
     /* Revision 3. */
@@ -3032,6 +3051,7 @@
     SVN_ERR(svn_test__set_file_contents
             (txn_root, "iota", iota_contents_3, subpool));
     SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
     svn_pool_clear(subpool);
 
     /* Revision 4. */
@@ -3040,6 +3060,7 @@
     SVN_ERR(svn_test__set_file_contents
             (txn_root, "iota", iota_contents_4, subpool));
     SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
     svn_pool_clear(subpool);
 
     /* Revision 5. */
@@ -3048,6 +3069,7 @@
     SVN_ERR(svn_test__set_file_contents
             (txn_root, "iota", iota_contents_5, subpool));
     SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
     svn_pool_clear(subpool);
 
     /* Revision 6. */
@@ -3056,6 +3078,7 @@
     SVN_ERR(svn_test__set_file_contents
             (txn_root, "iota", iota_contents_6, subpool));
     SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
     svn_pool_clear(subpool);
 
     /* Revision 7. */
@@ -3064,6 +3087,7 @@
     SVN_ERR(svn_test__set_file_contents
             (txn_root, "iota", iota_contents_7, subpool));
     SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
     svn_pool_clear(subpool);
 
     /** Now check the full Greek Tree in all of those revisions,
@@ -3366,6 +3390,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /***********************************************************************/
   /* REVISION 1 */
@@ -3423,6 +3448,7 @@
                                       subpool));
   }
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /***********************************************************************/
   /* REVISION 2 */
@@ -3474,6 +3500,7 @@
                                       subpool));
   }
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /***********************************************************************/
   /* REVISION 3 */
@@ -3523,6 +3550,7 @@
     SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 2, subpool));
   }
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /***********************************************************************/
   /* REVISION 4 */
@@ -3699,6 +3727,7 @@
           (&wh_func, &wh_baton, txn_root, "bigfile", NULL, NULL, subpool));
   SVN_ERR(svn_txdelta_send_string(&contents, wh_func, wh_baton, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
   checksum_list[youngest_rev] = checksum;
   svn_pool_clear(subpool);
@@ -3714,6 +3743,7 @@
           (&wh_func, &wh_baton, txn_root, "bigfile", NULL, NULL, subpool));
   SVN_ERR(svn_txdelta_send_string(&contents, wh_func, wh_baton, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
   checksum_list[youngest_rev] = checksum;
   svn_pool_clear(subpool);
@@ -3728,6 +3758,7 @@
           (&wh_func, &wh_baton, txn_root, "bigfile", NULL, NULL, subpool));
   SVN_ERR(svn_txdelta_send_string(&contents, wh_func, wh_baton, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
   checksum_list[youngest_rev] = checksum;
   svn_pool_clear(subpool);
@@ -3744,6 +3775,7 @@
           (&wh_func, &wh_baton, txn_root, "bigfile", NULL, NULL, subpool));
   SVN_ERR(svn_txdelta_send_string(&contents, wh_func, wh_baton, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
   checksum_list[youngest_rev] = checksum;
   svn_pool_clear(subpool);
@@ -3763,6 +3795,7 @@
       SVN_ERR(svn_txdelta_send_string
               (&contents, wh_func, wh_baton, subpool));
       SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+      SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
       SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
       checksum_list[youngest_rev] = checksum;
       svn_pool_clear(subpool);
@@ -3883,6 +3916,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /* Root node's revision should be the same as YOUNGEST_REV. */
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, subpool));
@@ -3904,6 +3938,7 @@
                apr_psprintf(subpool, "iota version %d", i + 2), subpool));
 
       SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+      SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
       /* Root node's revision should be the same as YOUNGEST_REV. */
       SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, subpool));
@@ -4018,6 +4053,7 @@
 
   /* Now commit the transaction. */
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /* Now, we have a new revision, and all paths in it should have a
      created rev of 1.  Verify this. */
@@ -4057,6 +4093,7 @@
   SVN_ERR(verify_path_revs(txn_root, path_revs, 20, subpool));
   /* commit transaction */
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   /* get a revision root for the new revision */
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, subpool));
   /* verify created revs */
@@ -4081,6 +4118,7 @@
   SVN_ERR(verify_path_revs(txn_root, path_revs, 20, subpool));
   /* commit transaction */
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   /* get a revision root for the new revision */
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, subpool));
   /* verify created revs */
@@ -4147,18 +4185,21 @@
   SVN_ERR(svn_fs_make_file(txn_root, "A", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A", "1", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 2 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A", "2", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 3 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A", "3", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 4 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
@@ -4171,6 +4212,7 @@
   SVN_ERR(svn_fs_copy(rev_root, "A", txn_root, "C", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "C", "4", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 5 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
@@ -4178,6 +4220,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "B", "5", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "C", "5", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 6 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
@@ -4188,6 +4231,7 @@
   SVN_ERR(svn_fs_copy(rev_root, "B", txn_root, "D", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "D", "5", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 7 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
@@ -4196,12 +4240,14 @@
   SVN_ERR(svn_fs_make_file(txn_root, "E", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "E", "7", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 8 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "E", "8", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 9 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
@@ -4210,12 +4256,14 @@
   SVN_ERR(svn_fs_copy(rev_root, "E", txn_root, "F", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "F", "9", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
   /* Revision 10 */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "F", "10", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /*** Step II: Exhaustively verify relationship between all nodes in
@@ -4334,6 +4382,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /*** Revision 2:  Copy A/D/G/rho to A/D/G/rho2.  ***/
@@ -4342,6 +4391,7 @@
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
   SVN_ERR(svn_fs_copy(rev_root, "A/D/G/rho", txn_root, "A/D/G/rho2", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /*** Revision 3:  Copy A/D/G to A/D/G2.  ***/
@@ -4350,6 +4400,7 @@
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
   SVN_ERR(svn_fs_copy(rev_root, "A/D/G", txn_root, "A/D/G2", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /*** Revision 4:  Copy A/D to A/D2.  ***/
@@ -4358,6 +4409,7 @@
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
   SVN_ERR(svn_fs_copy(rev_root, "A/D", txn_root, "A/D2", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /*** Revision 5:  Edit all the rho's! ***/
@@ -4381,6 +4433,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D2/G2/rho2",
                                       "Edited text.", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   svn_pool_destroy(spool);
 
@@ -4816,6 +4869,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 2: Modify A/D/H/chi and A/B/E/alpha.  */
@@ -4824,6 +4878,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "2", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/alpha", "2", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 3: Copy A/D to A/D2, and create A/D2/floop new.  */
@@ -4833,6 +4888,7 @@
   SVN_ERR(svn_fs_copy(root, "A/D", txn_root, "A/D2", subpool));
   SVN_ERR(svn_fs_make_file(txn_root, "A/D2/floop", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 4: Modify A/D/H/chi and A/D2/H/chi.  */
@@ -4841,6 +4897,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "4", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D2/H/chi", "4", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 5: Delete A/D2/G, add A/B/E/alfalfa.  */
@@ -4849,6 +4906,7 @@
   SVN_ERR(svn_fs_delete(txn_root, "A/D2/G", subpool));
   SVN_ERR(svn_fs_make_file(txn_root, "A/B/E/alfalfa", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 6: Restore A/D2/G (from version 4).  */
@@ -4857,6 +4915,7 @@
   SVN_ERR(svn_fs_revision_root(&root, fs, 4, subpool));
   SVN_ERR(svn_fs_copy(root, "A/D2/G", txn_root, "A/D2/G", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 7: Move A/D2 to A/D (replacing it), Add a new file A/D2,
@@ -4870,6 +4929,7 @@
   SVN_ERR(svn_fs_make_file(txn_root, "A/D2", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/floop", "7", subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Now test some origin revisions. */

=== modified file 'subversion/tests/libsvn_fs/locks-test.c'
--- subversion/tests/libsvn_fs/locks-test.c	2009-11-17 02:16:23 +0000
+++ subversion/tests/libsvn_fs/locks-test.c	2011-03-22 11:15:25 +0000
@@ -121,6 +121,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* We are now 'bubba'. */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -167,6 +168,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* We are now 'bubba'. */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -217,6 +219,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* We are now 'bubba'. */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -276,6 +279,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* We are now 'bubba'. */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -411,6 +415,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* We are now 'bubba'. */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -469,6 +474,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* We are now 'bubba'. */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -492,6 +498,7 @@
 
   /* Try to commit the file change.  Should fail, because we're nobody. */
   err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
+  SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
   if (! err)
     return svn_error_create
       (SVN_ERR_TEST_FAILED, NULL,
@@ -504,6 +511,7 @@
 
   /* Try to commit the file change.  Should fail, because we're 'hortense'. */
   err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
+  SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
   if (! err)
     return svn_error_create
       (SVN_ERR_TEST_FAILED, NULL,
@@ -516,6 +524,7 @@
 
   /* Try to commit the file change.  Should fail, because there's no token. */
   err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
+  SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
   if (! err)
     return svn_error_create
       (SVN_ERR_TEST_FAILED, NULL,
@@ -527,6 +536,7 @@
 
   /* Commit should now succeed. */
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   return SVN_NO_ERROR;
 }
@@ -566,6 +576,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* Make a new transaction and delete "/A" */
   SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
@@ -584,6 +595,7 @@
   /* Try to commit the transaction.  Should fail, because a child of
      the deleted directory is locked by someone else. */
   err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
+  SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
   if (! err)
     return svn_error_create
       (SVN_ERR_TEST_FAILED, NULL,
@@ -594,6 +606,7 @@
   SVN_ERR(svn_fs_set_access(fs, access));
   SVN_ERR(svn_fs_access_add_lock_token(access, mylock->token));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   return SVN_NO_ERROR;
 }
@@ -630,6 +643,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* Become 'bubba' and lock "/A/D/G/rho". */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -650,6 +664,7 @@
   /* Commit should succeed;  this means we're doing a non-recursive
      lock-check on directory, rather than a recursive one.  */
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   return SVN_NO_ERROR;
 }
@@ -687,6 +702,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* Become 'bubba' and lock imaginary path  "/A/D/G2/blooga". */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -824,6 +840,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* Make a new transaction and change rho. */
   SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
@@ -846,6 +863,7 @@
   /* Try to commit.  Should fail because we're 'nobody', and the lock
      hasn't expired yet. */
   err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
+  SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
   if (! err)
     return svn_error_create
       (SVN_ERR_TEST_FAILED, NULL,
@@ -882,6 +900,7 @@
   }
 
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   return SVN_NO_ERROR;
 }
@@ -915,6 +934,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* Become 'bubba' and lock "/A/D/G/rho". */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
@@ -1002,6 +1022,7 @@
   /* Create the greek tree and commit it. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* Commit a small change to /A/D/G/rho, creating revision 2. */
   SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
@@ -1009,6 +1030,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "/A/D/G/rho",
                                       "new contents", pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
 
   /* We are now 'bubba'. */
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));

=== modified file 'subversion/tests/libsvn_fs_base/changes-test.c'
--- subversion/tests/libsvn_fs_base/changes-test.c	2011-01-05 22:45:51 +0000
+++ subversion/tests/libsvn_fs_base/changes-test.c	2011-03-22 11:15:25 +0000
@@ -595,6 +595,7 @@
     SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 5, subpool));
   }
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /*** REVISION 2: Delete and add some stuff, non-depth-first. ***/
@@ -615,6 +616,7 @@
     SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 7, subpool));
   }
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /*** TEST:  We should have only three changes, the deletion of 'file1'
@@ -663,6 +665,7 @@
     SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 5, subpool));
   }
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /*** REVISION 4: Do the same stuff as in revision 2, but use a copy
@@ -687,6 +690,7 @@
     SVN_ERR(svn_fs_make_dir(txn_root, "dir4", subpool));
   }
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /*** TEST:  We should have only three changes, the deletion of 'file1'

=== modified file 'subversion/tests/libsvn_fs_base/fs-base-test.c'
--- subversion/tests/libsvn_fs_base/fs-base-test.c	2009-11-17 02:16:23 +0000
+++ subversion/tests/libsvn_fs_base/fs-base-test.c	2011-03-22 11:15:25 +0000
@@ -476,6 +476,7 @@
     SVN_ERR(svn_fs_begin_txn(&txn4, fs, 0, pool));
     SVN_ERR(svn_fs_txn_name(&txn4_name, txn4, pool));
     SVN_ERR(svn_fs_commit_txn(&conflict, &new_rev, txn4, pool));
+    SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(new_rev));
     err = svn_fs_abort_txn(txn4, pool);
     if (! err)
       return svn_error_create
@@ -874,6 +875,7 @@
 
   /* Commit the greek tree. */
   SVN_ERR(svn_fs_commit_txn(NULL, &new_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(new_rev));
 
   /* Create new transaction. */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, new_rev, pool));
@@ -1208,6 +1210,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /*** Revision 2:  Copy A/D to A/D3 ***/
@@ -1216,6 +1219,7 @@
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
   SVN_ERR(svn_fs_copy(rev_root, "A/D", txn_root, "A/D3", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /*** Revision 3:  Copy A/D/G to A/D/G2 ***/
@@ -1224,6 +1228,7 @@
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
   SVN_ERR(svn_fs_copy(rev_root, "A/D/G", txn_root, "A/D/G2", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /*** Revision 4: Copy A/D to A/D2 and create up and I in the existing
@@ -1239,6 +1244,7 @@
   SVN_ERR(svn_fs_make_dir(txn_root, "A/D2/G2/I", spool));
   SVN_ERR(svn_fs_make_file(txn_root, "A/D2/G2/up", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /*** Revision 5:  Create A/D3/down and A/D3/J ***/
@@ -1247,6 +1253,7 @@
   SVN_ERR(svn_fs_make_file(txn_root, "A/D3/down", spool));
   SVN_ERR(svn_fs_make_dir(txn_root, "A/D3/J", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   {
@@ -1338,6 +1345,7 @@
   SVN_ERR(svn_fs_make_file(txn_root, "f", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "f", f->data, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
   svn_pool_clear(subpool);
 
@@ -1352,6 +1360,7 @@
       SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
       SVN_ERR(svn_test__set_file_contents(txn_root, "f", f->data, subpool));
       SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+      SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
       SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
       svn_pool_clear(subpool);
     }
@@ -1416,6 +1425,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /* In a transaction, copy A to Z. */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, pool));
@@ -1491,6 +1501,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 2:  Start to change "iota", but don't complete the work. */
@@ -1507,6 +1518,7 @@
      testing that misbehaving callers don't introduce more damage to
      the repository than they have to. */
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Fetch changed paths for the youngest revision.  We should find none. */

=== modified file 'subversion/tests/libsvn_fs_fs/fs-pack-test.c'
--- subversion/tests/libsvn_fs_fs/fs-pack-test.c	2010-06-21 11:53:14 +0000
+++ subversion/tests/libsvn_fs_fs/fs-pack-test.c	2011-03-22 11:15:25 +0000
@@ -132,6 +132,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
 
   /* Revisions 2-11: A bunch of random changes. */
   iterpool = svn_pool_create(subpool);
@@ -145,6 +146,7 @@
                                                            iterpool),
                                           iterpool));
       SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, iterpool));
+      SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
     }
   svn_pool_destroy(iterpool);
   svn_pool_destroy(subpool);
@@ -363,6 +365,7 @@
           "How much better is it to get wisdom than gold! and to get "
           "understanding rather to be chosen than silver!", pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
 
   return SVN_NO_ERROR;
 }

=== modified file 'subversion/tests/libsvn_repos/repos-test.c'
--- subversion/tests/libsvn_repos/repos-test.c	2009-11-17 02:16:23 +0000
+++ subversion/tests/libsvn_repos/repos-test.c	2011-03-22 11:15:25 +0000
@@ -91,6 +91,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /***********************************************************************/
   /* REVISION 1 */
@@ -152,6 +153,7 @@
                                       subpool));
   }
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /***********************************************************************/
   /* REVISION 2 */
@@ -206,6 +208,7 @@
     SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 4, subpool));
   }
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /***********************************************************************/
   /* REVISION 3 */
@@ -259,6 +262,7 @@
                       txn_root, "A/B/epsilon",
                       subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /***********************************************************************/
   /* REVISION 4 */
@@ -398,6 +402,7 @@
   /* Create and commit the greek tree. */
   SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /* Now, commit again, this time after copying a directory, and then
      deleting some paths under that directory. */
@@ -408,6 +413,7 @@
   SVN_ERR(svn_fs_delete(txn_root, "Z/D/G/rho", pool));
   SVN_ERR(svn_fs_delete(txn_root, "Z/D/H", pool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /* Now, we run the node_tree editor code, and see that a) it doesn't
      bomb out, and b) that our nodes are all good. */
@@ -545,6 +551,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 2 - mu, alpha, omega */
@@ -554,6 +561,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/alpha", "2", spool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/omega", "2", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 3 - iota, lambda, psi, omega */
@@ -564,6 +572,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/psi", "3", spool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/omega", "3", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 4 - iota, beta, gamma, pi, rho */
@@ -575,6 +584,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/G/pi", "4", spool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/G/rho", "4", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 5 - mu, alpha, tau, chi */
@@ -585,6 +595,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/G/tau", "5", spool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "5", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 6 - move A/D to A/Z */
@@ -594,6 +605,7 @@
   SVN_ERR(svn_fs_copy(rev_root, "A/D", txn_root, "A/Z", spool));
   SVN_ERR(svn_fs_delete(txn_root, "A/D", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 7 - edit A/Z/G/pi */
@@ -601,6 +613,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/Z/G/pi", "7", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 8 - move A/Z back to A/D, edit iota */
@@ -611,6 +624,7 @@
   SVN_ERR(svn_fs_delete(txn_root, "A/Z", spool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "iota", "8", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 9 - copy A/D/G to A/D/Q */
@@ -619,6 +633,7 @@
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
   SVN_ERR(svn_fs_copy(rev_root, "A/D/G", txn_root, "A/D/Q", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Revision 10 - edit A/D/Q/pi and A/D/Q/rho */
@@ -627,6 +642,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/Q/pi", "10", spool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/Q/rho", "10", spool));
   SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(spool);
 
   /* Now, it's time to verify our results. */
@@ -793,6 +809,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Move a file. Rev 2. */
@@ -801,6 +818,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_fs_copy(root, "/A/mu", txn_root, "/mu.new", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   {
     struct locations_info info[] =
       {
@@ -848,6 +866,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_fs_make_dir(txn_root, "/foo", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 2: Copy /foo to /bar, and add /bar/baz  */
@@ -857,6 +876,7 @@
   SVN_ERR(svn_fs_copy(root, "/foo", txn_root, "/bar", subpool));
   SVN_ERR(svn_fs_make_file(txn_root, "/bar/baz", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 3: Modify /bar/baz  */
@@ -864,6 +884,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "/bar/baz", "brrt", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 4: Modify /bar/baz again  */
@@ -871,6 +892,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "/bar/baz", "bzzz", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Now, check locations. */
@@ -1061,6 +1083,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   SVN_ERR(svn_fs_create_access(&fs_access, "user1", pool));
@@ -1413,6 +1436,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /* Load the authz rules for the greek tree. */
   authz_contents =
@@ -1631,6 +1655,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
   SVN_ERR(svn_fs_txn_name(&txn_name, txn, subpool));
@@ -1817,6 +1842,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 2: Modify A/D/H/chi and A/B/E/alpha.  */
@@ -1825,6 +1851,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "2", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/alpha", "2", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 3: Copy A/D to A/D2.  */
@@ -1833,6 +1860,7 @@
   SVN_ERR(svn_fs_revision_root(&root, fs, youngest_rev, subpool));
   SVN_ERR(svn_fs_copy(root, "A/D", txn_root, "A/D2", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 4: Modify A/D/H/chi and A/D2/H/chi.  */
@@ -1841,6 +1869,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "4", subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/D2/H/chi", "4", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 5: Delete A/D2/G.  */
@@ -1848,6 +1877,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_fs_delete(txn_root, "A/D2/G", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 6: Restore A/D2/G (from version 4).  */
@@ -1856,6 +1886,7 @@
   SVN_ERR(svn_fs_revision_root(&root, fs, 4, subpool));
   SVN_ERR(svn_fs_copy(root, "A/D2/G", txn_root, "A/D2/G", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 7: Move A/D2 to A/D (replacing it).  */
@@ -1866,6 +1897,7 @@
   SVN_ERR(svn_fs_copy(root, "A/D2", txn_root, "A/D", subpool));
   SVN_ERR(svn_fs_delete(txn_root, "A/D2", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Check locations for /@HEAD. */
@@ -2010,6 +2042,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Revision 2: make a bunch of changes */
@@ -2032,6 +2065,7 @@
                                       subpool));
   }
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
   /* Confirm the contents of r2. */
@@ -2369,6 +2403,7 @@
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /* Revision 2:  Tweak A/mu and A/B/E/alpha. */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
@@ -2378,6 +2413,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/alpha",
                                       "Revision 2", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
   /* Revision 3:  Tweak A/B/E/alpha and A/B/E/beta. */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
@@ -2387,6 +2423,7 @@
   SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/beta",
                                       "Revision 3", subpool));
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
 
   for (start = 0; start <= youngest_rev; start++)

=== modified file 'subversion/tests/svn_test.h'
--- subversion/tests/svn_test.h	2009-11-17 02:16:23 +0000
+++ subversion/tests/svn_test.h	2011-03-22 11:15:25 +0000
@@ -35,6 +35,17 @@
 #endif /* __cplusplus */
 
 
+/** Handy macro to test a condition, returning SVN_ERR_TEST_FAILED if FALSE
+ *
+ * This macro should be used in place of SVN_ERR_ASSERT() since we don't
+ * want to core-dump the test.
+ */
+#define SVN_TEST_ASSERT(expr)                                     \
+  do {                                                            \
+    if (!(expr))                                                  \
+      return svn_error_create(SVN_ERR_TEST_FAILED, NULL, #expr);  \
+  } while (0)
+
 /* Baton for any arguments that need to be passed from main() to svn
  * test functions.
  */


Follow ups