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

Proposed by Michael Diers
Status: Merged
Approved by: Max Bowsher
Approved revision: 55
Merged at revision: 54
Proposed branch: lp:~mdiers/ubuntu/natty/subversion/ppa-proposed
Merge into: lp:~svn/ubuntu/natty/subversion/ppa
Diff against target: 2645 lines (+603/-244)
44 files modified
CHANGES (+54/-0)
Makefile.in (+7/-1)
README.Debian-tarball (+2/-2)
configure (+11/-11)
debian/changelog (+58/-30)
debian/patches/build-fixes (+12/-21)
debian/patches/change-range (+88/-0)
debian/patches/loosen-sqlite-version-check (+18/-0)
debian/patches/series (+2/-0)
debian/rules (+3/-8)
debian/subversion.install (+2/-2)
debian/tools/Makefile (+0/-21)
debian/tools/README (+0/-5)
debian/tools/svn-make-config.c (+0/-60)
subversion/bindings/javahl/native/Outputer.cpp (+4/-0)
subversion/bindings/swig/perl/native/Makefile.PL.in (+1/-1)
subversion/bindings/swig/perl/native/core.c (+4/-4)
subversion/bindings/swig/python/core.c (+4/-4)
subversion/bindings/swig/ruby/core.c (+4/-4)
subversion/bindings/swig/ruby/test/util.rb (+3/-0)
subversion/include/svn_version.h (+3/-3)
subversion/libsvn_client/merge.c (+13/-5)
subversion/libsvn_fs/fs-loader.c (+1/-0)
subversion/libsvn_fs_fs/fs_fs.c (+8/-2)
subversion/libsvn_ra_neon/mergeinfo.c (+3/-1)
subversion/libsvn_ra_neon/options.c (+21/-5)
subversion/libsvn_ra_serf/mergeinfo.c (+3/-1)
subversion/libsvn_ra_serf/serf.c (+20/-4)
subversion/libsvn_ra_serf/update.c (+3/-1)
subversion/libsvn_repos/fs-wrap.c (+2/-0)
subversion/libsvn_repos/log.c (+15/-5)
subversion/libsvn_repos/rev_hunt.c (+3/-2)
subversion/libsvn_subr/error.c (+14/-1)
subversion/libsvn_wc/props.c (+22/-14)
subversion/mod_dav_svn/repos.c (+21/-3)
subversion/mod_dav_svn/version.c (+3/-1)
subversion/po/zh_CN.po (+18/-18)
subversion/tests/libsvn_fs/fs-test.c (+64/-4)
subversion/tests/libsvn_fs/locks-test.c (+22/-0)
subversion/tests/libsvn_fs_base/changes-test.c (+4/-0)
subversion/tests/libsvn_fs_base/fs-base-test.c (+12/-0)
subversion/tests/libsvn_fs_fs/fs-pack-test.c (+3/-0)
subversion/tests/libsvn_repos/repos-test.c (+37/-0)
subversion/tests/svn_test.h (+11/-0)
To merge this branch: bzr merge lp:~mdiers/ubuntu/natty/subversion/ppa-proposed
Reviewer Review Type Date Requested Status
Max Bowsher (community) Approve
Review via email: mp+54325@code.launchpad.net

Description of the change

Merge Debian (1.6.16dfsg-1).
Fixes CVE-2011-0715: Remotely crash mod_dav_svn anonymously via a lock token.

To post a comment you must log in.
Revision history for this message
Max Bowsher (maxb) wrote :

Looks good to me.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CHANGES'
2--- CHANGES 2011-01-05 22:59:03 +0000
3+++ CHANGES 2011-03-22 11:15:25 +0000
4@@ -1,3 +1,31 @@
5+Version 1.6.16
6+(02 Mar 2011, from /branches/1.6.x)
7+http://svn.apache.org/repos/asf/subversion/tags/1.6.16
8+
9+ User-visible changes:
10+ * more improvement to the 'blame -g' memory leak from 1.6.15 (r1041438)
11+ * avoid a crash in mod_dav_svn when using locks (r1071239, -307)
12+ See CVE-2011-0715, and descriptive advisory at
13+ http://subversion.apache.org/security/CVE-2011-0715-advisory.txt
14+ * avoid unnecessary globbing for performance (r1068988)
15+ * don't add tree conflicts when one already exists (issue #3486)
16+ * fix potential crash when requesting mergeinfo (r902467)
17+ * don't attempt to resolve prop conflicts in 'merge --dry-run' (r880146)
18+ * more fixes for issue #3270.
19+
20+ Developer-visible changes:
21+ * ensure report_info_t is properly initialized by ra_serf (r1058722)
22+ * locate errors properly on a malfunction (r1053208)
23+ * fix output param timing of svn_fs_commit_txn() on fsfs (r1051751)
24+ * for svn_fs_commit_txn(), set invalid rev on failed commit (r1051632, -8)
25+ * fix sporadic Ruby bindings test failures (r1038792)
26+ * fix JavaHL JVM object leak when dumping large revisions (r947006)
27+ * use Perl to resolve symlinks when building swig-pl (r1039040)
28+ * allow Perl bindings to build within a symlinked working copy (r1036534)
29+ * don't overwrite the LD_LIBRARY_PATH during make check-swig-pl (r946355)
30+ * improve unit tests for some fs functions (r1051744, -5, -3185, -241)
31+
32+
33 Version 1.6.15
34 (26 Nov 2010, from /branches/1.6.x)
35 http://svn.apache.org/repos/asf/subversion/tags/1.6.15
36@@ -444,6 +472,32 @@
37 * fix building Ruby bindings with Ruby 1.9 (r35852, r35883)
38
39
40+Version 1.5.8
41+(?? ??? 2010, from /branches/1.5.x)
42+http://svn.apache.org/repos/asf/subversion/tags/1.5.8
43+
44+ User-visible changes:
45+ * fix proxying of LOCK and UNLOCK requests with WebDAV proxies (r36159)
46+ * improve performance of --ignore-ancestry merges (r36256)
47+ * avoid crash with when using subtree mergeinfo (r36613, -13, -31, -41)
48+ * improve merge correctness with non-inheritable mergeinfo (r36789)
49+ * fixed: repeated mergeinfo of conflicting properties fails (issue #3250)
50+ * fix segfault in wc->URL copy (r37646, -56)
51+ * make 'svn up --set-depth infinity' expand shallow subtrees (r37169)
52+ * make default depth of 'svn merge' infinity (r37156)
53+ * error if attempting to reintegrate to/from the repo root (r37385)
54+ * improve memory performance in 'svn merge' (issue #3393)
55+ * fixed: 'SVNPathAuthz short_circuit' unsolicited read access (issue #3695)
56+ See CVE-2010-3315, and descriptive advisory at
57+ http://subversion.apache.org/security/CVE-2010-3315-advisory.txt
58+ * prevent crash in mod_dav_svn when using SVNParentPath (r1033166)
59+
60+ Developer-visible changes:
61+ * fix pointer dereference (r36783)
62+ * fix error leak (r36860)
63+ * make basic_tests 12 compatible with Windows and Python 2.5+ (r35930)
64+
65+
66 Version 1.5.7
67 (06 Aug 2009, from /branches/1.5.x)
68 http://svn.apache.org/repos/asf/subversion/tags/1.5.7
69
70=== modified file 'Makefile.in'
71--- Makefile.in 2011-01-05 22:59:03 +0000
72+++ Makefile.in 2011-03-22 11:15:25 +0000
73@@ -684,10 +684,16 @@
74 $(SWIG_PL_DIR)/native/Makefile: $(SWIG_PL_DIR)/native/Makefile.PL
75 cd $(SWIG_PL_DIR)/native; $(PERL) Makefile.PL
76
77+# There is a "readlink -f" command on some systems for the same purpose,
78+# but it's not as portable (e.g. Mac OS X doesn't have it). These should
79+# only be used where Python/Perl are known to be available.
80+READLINK_PY=$(PYTHON) -c 'import sys,os; print(os.path.realpath(sys.argv[1]))'
81+READLINK_PL=$(PERL) -e 'use Cwd; print Cwd::realpath(shift)'
82+
83 swig-pl_DEPS = autogen-swig-pl libsvn_swig_perl \
84 $(SWIG_PL_DIR)/native/Makefile
85 swig-pl: $(swig-pl_DEPS)
86- if test "$(SWIG_PL_DIR)" != "$(SWIG_PL_SRC_DIR)"; then \
87+ if test "`$(READLINK_PL) $(SWIG_PL_DIR)`" != "`$(READLINK_PL) $(SWIG_PL_SRC_DIR)`"; then \
88 ln -sf $(SWIG_PL_SRC_DIR)/native/*.c $(SWIG_PL_DIR)/native; \
89 fi
90 cd $(SWIG_PL_DIR)/native; $(MAKE) OPTIMIZE="" OTHERLDFLAGS="$(SWIG_LDFLAGS)"
91
92=== modified file 'README.Debian-tarball'
93--- README.Debian-tarball 2011-01-05 22:59:03 +0000
94+++ README.Debian-tarball 2011-03-22 11:15:25 +0000
95@@ -1,4 +1,4 @@
96-This tarball is the same as official subversion-1.6.15.tar.gz,
97+This tarball is the same as official subversion-1.6.16.tar.gz,
98 except that several unlicensed or unclearly-licensed files were
99 removed:
100
101@@ -12,4 +12,4 @@
102 contrib/server-side/backup-recipe.sh
103 contrib/server-side/load_repo_with_mergesensitive_copy.sh
104
105-Max Bowsher, 5 Jan 2011
106+Peter Samuelson, 25 Feb 2011
107
108=== modified file 'configure'
109--- configure 2011-01-05 22:59:03 +0000
110+++ configure 2011-03-22 11:15:25 +0000
111@@ -1,6 +1,6 @@
112 #! /bin/sh
113 # Guess values for system-dependent variables and create Makefiles.
114-# Generated by GNU Autoconf 2.64 for subversion 1.6.15.
115+# Generated by GNU Autoconf 2.64 for subversion 1.6.16.
116 #
117 # Report bugs to <http://subversion.tigris.org/>.
118 #
119@@ -703,8 +703,8 @@
120 # Identity of this package.
121 PACKAGE_NAME='subversion'
122 PACKAGE_TARNAME='subversion'
123-PACKAGE_VERSION='1.6.15'
124-PACKAGE_STRING='subversion 1.6.15'
125+PACKAGE_VERSION='1.6.16'
126+PACKAGE_STRING='subversion 1.6.16'
127 PACKAGE_BUGREPORT='http://subversion.tigris.org/'
128 PACKAGE_URL=''
129
130@@ -1532,7 +1532,7 @@
131 # Omit some internal or obsolete options to make the list less imposing.
132 # This message is too long to be a string in the A/UX 3.1 sh.
133 cat <<_ACEOF
134-\`configure' configures subversion 1.6.15 to adapt to many kinds of systems.
135+\`configure' configures subversion 1.6.16 to adapt to many kinds of systems.
136
137 Usage: $0 [OPTION]... [VAR=VALUE]...
138
139@@ -1598,7 +1598,7 @@
140
141 if test -n "$ac_init_help"; then
142 case $ac_init_help in
143- short | recursive ) echo "Configuration of subversion 1.6.15:";;
144+ short | recursive ) echo "Configuration of subversion 1.6.16:";;
145 esac
146 cat <<\_ACEOF
147
148@@ -1784,7 +1784,7 @@
149 test -n "$ac_init_help" && exit $ac_status
150 if $ac_init_version; then
151 cat <<\_ACEOF
152-subversion configure 1.6.15
153+subversion configure 1.6.16
154 generated by GNU Autoconf 2.64
155
156 Copyright (C) 2009 Free Software Foundation, Inc.
157@@ -2414,7 +2414,7 @@
158 This file contains any messages produced by compilers while
159 running configure, to aid debugging if configure makes a mistake.
160
161-It was created by subversion $as_me 1.6.15, which was
162+It was created by subversion $as_me 1.6.16, which was
163 generated by GNU Autoconf 2.64. Invocation command line was
164
165 $ $0 $@
166@@ -2787,8 +2787,8 @@
167
168
169
170-{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.6.15" >&5
171-$as_echo "$as_me: Configuring Subversion 1.6.15" >&6;}
172+{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Subversion 1.6.16" >&5
173+$as_echo "$as_me: Configuring Subversion 1.6.16" >&6;}
174
175 abs_srcdir="`cd $srcdir && pwd`"
176
177@@ -26819,7 +26819,7 @@
178 # report actual input values of CONFIG_FILES etc. instead of their
179 # values after options handling.
180 ac_log="
181-This file was extended by subversion $as_me 1.6.15, which was
182+This file was extended by subversion $as_me 1.6.16, which was
183 generated by GNU Autoconf 2.64. Invocation command line was
184
185 CONFIG_FILES = $CONFIG_FILES
186@@ -26883,7 +26883,7 @@
187 _ACEOF
188 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
189 ac_cs_version="\\
190-subversion config.status 1.6.15
191+subversion config.status 1.6.16
192 configured by $0, generated by GNU Autoconf 2.64,
193 with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
194
195
196=== modified file 'debian/changelog'
197--- debian/changelog 2011-01-05 23:01:25 +0000
198+++ debian/changelog 2011-03-22 11:15:25 +0000
199@@ -1,3 +1,28 @@
200+subversion (1.6.16dfsg-1svn1) natty; urgency=high
201+
202+ * Merge with Debian unstable. Remaining changes:
203+ - Create pot file on build.
204+ - Build a python-subversion-dbg package.
205+ - (Build-)depend on default-jre-headless/-jdk.
206+ - Do not apply java-build patch.
207+ - debian/rules: Manually create the doxygen output directory, otherwise
208+ we get weird build failures when running parallel builds.
209+ - Disable the serf backend because serf is in universe.
210+ - Fix FTBFS against Python 2.7 by disabling some problematic tests.
211+
212+ -- Michael Diers <mdiers@elego.de> Tue, 22 Mar 2011 11:57:19 +0100
213+
214+subversion (1.6.16dfsg-1) unstable; urgency=high
215+
216+ * New upstream version.
217+ - Fixes CVE-2011-0715: Remotely crash mod_dav_svn anonymously via a
218+ lock token.
219+ * patches/change-range: New patch to support -cA-B syntax on command line.
220+ * Stop using svn-make-config.c; we can do the same just by running svn
221+ itself in a controlled home directory. Delete debian/tools/.
222+
223+ -- Peter Samuelson <peter@p12n.org> Thu, 03 Mar 2011 10:55:42 -0600
224+
225 subversion (1.6.15dfsg~ppa-0svn1) natty; urgency=low
226
227 * Create a PPA build, merging:
228@@ -8,10 +33,42 @@
229
230 -- Max Bowsher <maxb@f2s.com> Wed, 05 Jan 2011 23:01:20 +0000
231
232+subversion (1.6.12dfsg-4ubuntu1) natty; urgency=low
233+
234+ * Merge with Debian unstable. Remaining changes:
235+ - Create pot file on build.
236+ - Build a python-subversion-dbg package.
237+ - (Build-)depend on default-jre-headless/-jdk.
238+ - Do not apply java-build patch.
239+ - debian/rules: Manually create the doxygen output directory, otherwise
240+ we get weird build failures when running parallel builds.
241+ - Disable the serf backend because serf is in universe.
242+ - Don't override LD_LIBRARY_PATH completely but prepend to it as to not
243+ break fakeroot.
244+ - Fix FTBFS against Python 2.7 by disabling some problematic tests.
245+ - debian/tools/Makefile:
246+ + Add APR_LIBS and use it when linking svn-make-config
247+ + svn_config_ensure() moved from libsvn_client/libsvn_client-1.la to
248+ libsvn_subr/libsvn_subr-1.la.
249+
250+ -- Michael Bienia <geser@ubuntu.com> Fri, 28 Jan 2011 14:14:19 +0100
251+
252+subversion (1.6.12dfsg-4) unstable; urgency=high
253+
254+ * patches/loosen-sqlite-version-check: New patch: Relax the SQLite
255+ version check, to match the Debian sqlite3 packaging.
256+ (Closes: #608925)
257+ * patches/cve-2010-4539: New patch for CVE-2010-4539, fixing a remotely
258+ triggered crash in mod_dav_svn involving use of the SVNParentPath
259+ feature. (Closes: #608989)
260+
261+ -- Peter Samuelson <peter@p12n.org> Wed, 05 Jan 2011 10:43:01 -0600
262+
263 subversion (1.6.12dfsg-3) unstable; urgency=medium
264
265 * Apply two patches from upstream 1.6.15:
266- - patches/server-memleak: New patch: fix some server-side memory leaks.
267+ - patches/server-memleak: New patch: fix some server-side memory
268+ leaks, including CVE-2010-4644.
269 - patches/no-wc1.7-check: New patch: Stop checking for being inside a
270 1.7 working copy. The value is too low and the performance penalty
271 too high.
272@@ -567,35 +624,6 @@
273
274 -- Matthias Klose <doko@ubuntu.com> Wed, 30 Jan 2008 12:45:05 +0100
275
276-subversion (1.4.6dfsg1-1) unstable; urgency=low
277-
278- * New upstream version.
279- * Build with db 4.6, to match apr-util.
280- * patches/svn-clean-manpage: New patch, fix a small typo. (Closes: #441827)
281- * patches/neon27: New patch from upstream trunk to support neon 0.27.
282- - control: build-depend on libneon27-dev.
283- - rules: no longer --disable-neon-version-check.
284- * patches/ruby-newswig: Support swig 1.3.33. (Closes: #453166)
285- * patches/python-memleak: New patch to fix a serious memory leak in the
286- Python bindings. Thanks to Jelmer Vernooij. (Closes: #428755)
287- * control: Policy 3.7.3.
288- * control: spell 'Source-Version' as 'binary:Version' for political
289- correctness. (Or for clarity.)
290- * control: add appropriate Vcs-Svn and Vcs-Browser fields.
291- * control: subversion-tools Recommends: rsync. (Closes: #459023)
292- * patches/svn2cl: update svn2cl to 0.9 (from upstream trunk).
293- * patches/commit-email: use original 'sendmail' commit-email.pl mode,
294- rather than the direct SMTP feature. (Closes: #447824)
295- * rules: do not run 'dh_testroot' or 'make extraclean' in clean rule.
296- * rules: rewrite DEB_BUILD_OPTIONS support; remove 'notest' synonym, as
297- the world seems to be standardizing on 'nocheck'.
298- * rules: remove 'DEB_BUILD_OPTIONS=-j[N]' support, add support for the
299- new 'dpkg-buildpackage -j[N]' feature.
300- * rules: add an option to disable ruby bindings. Though it turns out
301- we don't need it ... yet.
302-
303- -- Peter Samuelson <peter@p12n.org> Mon, 11 Feb 2008 23:49:02 -0600
304-
305 subversion (1.4.4dfsg1-1ubuntu5) hardy; urgency=medium
306
307 * Add debian/patches/python-memleak: Fix major memory leak in the
308
309=== modified file 'debian/patches/build-fixes'
310--- debian/patches/build-fixes 2010-01-27 01:57:47 +0000
311+++ debian/patches/build-fixes 2011-03-22 11:15:25 +0000
312@@ -1,6 +1,6 @@
313 --- a/build/generator/swig/checkout_swig_header.py
314 +++ b/build/generator/swig/checkout_swig_header.py
315-@@ -20,15 +20,14 @@
316+@@ -20,15 +20,14 @@ class Generator(generator.swig.Generator
317
318 def write_makefile_rules(self, makefile):
319 """Write makefile rules to checkout files"""
320@@ -22,7 +22,7 @@
321 % " ".join(checkout_locations))
322 --- a/Makefile.in
323 +++ b/Makefile.in
324-@@ -249,14 +249,14 @@
325+@@ -249,14 +249,14 @@ INSTALL_EXTRA_SWIG_PY=\
326
327 # The path to generated and complementary source files for the SWIG
328 # bindings.
329@@ -42,7 +42,7 @@
330
331 ### Automate JAR creation using Makefile generator's javahl-java.jar
332 ### property. Enhance generator to support JAR installation.
333-@@ -532,6 +532,7 @@
334+@@ -537,6 +537,7 @@ doc: doc-misc-docs doc-api doc-javahl
335 # Generate API documentation for the C libraries.
336 ### This could also generate POD for swig-perl, etc.
337 doc-api:
338@@ -50,16 +50,7 @@
339 ( cd $(top_srcdir) && \
340 sed "s,\(OUTPUT_DIRECTORY *= *\),\1$(abs_builddir)/," \
341 doc/doxygen.conf | doxygen - )
342-@@ -682,7 +683,7 @@
343- swig-pl_DEPS = autogen-swig-pl libsvn_swig_perl \
344- $(SWIG_PL_DIR)/native/Makefile
345- swig-pl: $(swig-pl_DEPS)
346-- if test "$(SWIG_PL_DIR)" != "$(SWIG_PL_SRC_DIR)"; then \
347-+ if test "$$(cd $(SWIG_PL_DIR);pwd)" != "$(SWIG_PL_SRC_DIR)"; then \
348- ln -sf $(SWIG_PL_SRC_DIR)/native/*.c $(SWIG_PL_DIR)/native; \
349- fi
350- cd $(SWIG_PL_DIR)/native; $(MAKE) OPTIMIZE="" OTHERLDFLAGS="$(SWIG_LDFLAGS)"
351-@@ -705,8 +706,7 @@
352+@@ -716,8 +717,7 @@ clean-swig-pl:
353 fi
354 for d in $(SWIG_PL_DIR)/libsvn_swig_perl; \
355 do \
356@@ -69,7 +60,7 @@
357 done
358 if [ -f "$(SWIG_PL_DIR)/native/Makefile" ]; then \
359 cd $(SWIG_PL_DIR)/native; $(MAKE) clean; \
360-@@ -739,7 +739,7 @@
361+@@ -750,7 +750,7 @@ clean-swig-py:
362 fi
363 for d in $(SWIG_PY_DIR) $(SWIG_PY_DIR)/libsvn_swig_py; \
364 do \
365@@ -78,7 +69,7 @@
366 done
367 find $(SWIG_PY_SRC_DIR) $(SWIG_PY_DIR) -name "*.pyc" -exec rm {} ';'
368
369-@@ -763,8 +763,7 @@
370+@@ -774,8 +774,7 @@ clean-swig-rb:
371 fi
372 for d in $(SWIG_RB_DIR) $(SWIG_RB_DIR)/libsvn_swig_ruby; \
373 do \
374@@ -90,7 +81,7 @@
375 extraclean-swig-rb: clean-swig-rb
376 --- a/build/generator/gen_make.py
377 +++ b/build/generator/gen_make.py
378-@@ -183,9 +183,9 @@
379+@@ -183,9 +183,9 @@ class Generator(gen_base.GeneratorBase):
380 source_dir = build_path_dirname(source)
381 opts = self.swig.opts[objname.lang]
382 if not self.release_mode:
383@@ -103,7 +94,7 @@
384 )
385
386 self.ofile.write('\n')
387-@@ -456,11 +456,11 @@
388+@@ -456,11 +456,11 @@ class Generator(gen_base.GeneratorBase):
389 self.ofile.write('%s: %s\n' % (objname, deps))
390 cmd = objname.compile_cmd
391 if cmd:
392@@ -120,7 +111,7 @@
393
394 --- a/build/generator/gen_base.py
395 +++ b/build/generator/gen_base.py
396-@@ -284,7 +284,8 @@
397+@@ -284,7 +284,8 @@ class SourceFile(DependencyNode):
398
399 class SWIGSource(SourceFile):
400 def __init__(self, filename):
401@@ -132,7 +123,7 @@
402 lang_abbrev = {
403 --- a/build/generator/swig/header_wrappers.py
404 +++ b/build/generator/swig/header_wrappers.py
405-@@ -32,7 +32,7 @@
406+@@ -32,7 +32,7 @@ class Generator(generator.swig.Generator
407 """Write makefile rules for generating SWIG wrappers for Subversion
408 header files."""
409 wrapper_fnames = []
410@@ -143,7 +134,7 @@
411 for fname in self.includes:
412 --- a/configure.ac
413 +++ b/configure.ac
414-@@ -1010,6 +1010,11 @@
415+@@ -1010,6 +1010,11 @@ SVN_CONFIG_SCRIPT(packages/solaris/pkgin
416 AC_SUBST(SVN_CONFIG_SCRIPT_FILES)
417
418 AC_OUTPUT
419@@ -157,7 +148,7 @@
420
421 --- a/build.conf
422 +++ b/build.conf
423-@@ -648,13 +648,14 @@
424+@@ -648,13 +648,14 @@ libs = libsvn_test libsvn_repos libsvn_f
425 # ----------------------------------------------------------------------------
426 # Tests for libsvn_subr
427
428
429=== added file 'debian/patches/change-range'
430--- debian/patches/change-range 1970-01-01 00:00:00 +0000
431+++ debian/patches/change-range 2011-03-22 11:15:25 +0000
432@@ -0,0 +1,88 @@
433+Support -cA-B syntax on command line, from upstream trunk r1004727,1004746.
434+This is pure convenience. -c12,15-20,25 is equivalent to -c12 -r14:20 -c25.
435+
436+
437+--- a/subversion/svn/main.c
438++++ b/subversion/svn/main.c
439+@@ -1212,7 +1212,7 @@
440+ case 'c':
441+ {
442+ char *end;
443+- svn_revnum_t changeno;
444++ svn_revnum_t changeno, changeno_end;
445+ svn_opt_revision_range_t *range;
446+ apr_array_header_t *change_revs =
447+ svn_cstring_split(opt_arg, ", \n\r\t\v", TRUE, pool);
448+@@ -1236,7 +1236,22 @@
449+ ### "{DATE}" and the special words. */
450+ while (*change_str == 'r')
451+ change_str++;
452+- changeno = strtol(change_str, &end, 10);
453++ changeno = changeno_end = strtol(change_str, &end, 10);
454++ if (end != change_str && *end == '-')
455++ {
456++ if (changeno < 0)
457++ {
458++ err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
459++ _("Negative number in range (%s)"
460++ " not supported with -c"),
461++ change_str);
462++ return svn_cmdline_handle_exit_error(err, pool, "svn: ");
463++ }
464++ change_str = end+1;
465++ while (*change_str == 'r')
466++ change_str++;
467++ changeno_end = strtol(change_str, &end, 10);
468++ }
469+ if (end == change_str || *end != '\0')
470+ {
471+ err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
472+@@ -1254,19 +1269,28 @@
473+
474+ /* Figure out the range:
475+ -c N -> -r N-1:N
476+- -c -N -> -r N:N-1 */
477+- range = apr_palloc(pool, sizeof(*range));
478++ -c -N -> -r N:N-1
479++ -c M-N -> -r M-1:N for M < N
480++ -c M-N -> -r M:N-1 for M > N
481++ -c -M-N -> error (too confusing/no valid use case)
482++ */
483+ if (changeno > 0)
484+ {
485+- range->start.value.number = changeno - 1;
486+- range->end.value.number = changeno;
487++ if (changeno <= changeno_end)
488++ changeno--;
489++ else
490++ changeno_end--;
491+ }
492+ else
493+ {
494+ changeno = -changeno;
495+- range->start.value.number = changeno;
496+- range->end.value.number = changeno - 1;
497++ changeno_end = changeno - 1;
498+ }
499++
500++ range = apr_palloc(pool, sizeof(*range));
501++ range->start.value.number = changeno;
502++ range->end.value.number = changeno_end;
503++
504+ opt_state.used_change_arg = TRUE;
505+ range->start.kind = svn_opt_revision_number;
506+ range->end.kind = svn_opt_revision_number;
507+--- a/subversion/svn/log-cmd.c
508++++ b/subversion/svn/log-cmd.c
509+@@ -481,9 +481,9 @@
510+ range = APR_ARRAY_IDX(opt_state->revision_ranges, i,
511+ svn_opt_revision_range_t *);
512+ if (range->start.value.number < range->end.value.number)
513+- range->start = range->end;
514++ range->start.value.number++;
515+ else
516+- range->end = range->start;
517++ range->end.value.number++;
518+ }
519+ }
520+
521
522=== added file 'debian/patches/loosen-sqlite-version-check'
523--- debian/patches/loosen-sqlite-version-check 1970-01-01 00:00:00 +0000
524+++ debian/patches/loosen-sqlite-version-check 2011-03-22 11:15:25 +0000
525@@ -0,0 +1,18 @@
526+The actual ABI compatibility of sqlite3 doesn't seem to depend on the
527+patchlevel (the x in 3.7.x), so omit that in our sanity check here.
528+
529+This matters in Debian because the sqlite3 library package exports a
530+slightly more liberal shlibs file than the library version itself.
531+
532+
533+--- a/subversion/libsvn_subr/sqlite.c
534++++ b/subversion/libsvn_subr/sqlite.c
535+@@ -486,7 +486,7 @@ static volatile svn_atomic_t sqlite_init
536+ static svn_error_t *
537+ init_sqlite(void *baton, apr_pool_t *pool)
538+ {
539+- if (sqlite3_libversion_number() < SQLITE_VERSION_NUMBER) {
540++ if (sqlite3_libversion_number()/1000 < SQLITE_VERSION_NUMBER/1000) {
541+ return svn_error_createf(SVN_ERR_SQLITE_ERROR, NULL,
542+ _("SQLite compiled for %s, but running with %s"),
543+ SQLITE_VERSION, sqlite3_libversion());
544
545=== modified file 'debian/patches/series'
546--- debian/patches/series 2011-01-05 23:01:25 +0000
547+++ debian/patches/series 2011-03-22 11:15:25 +0000
548@@ -21,3 +21,5 @@
549 no-dbus-spam
550 svn2cl-upstream
551 kwallet-wid
552+loosen-sqlite-version-check
553+change-range
554
555=== modified file 'debian/rules'
556--- debian/rules 2011-01-05 22:45:51 +0000
557+++ debian/rules 2011-03-22 11:15:25 +0000
558@@ -156,7 +156,7 @@
559 dh_testdir
560
561 test -e patches || ln -s debian/patches patches
562- mkdir -p $(DEB_BUILDDIR)
563+ mkdir -p $(DEB_BUILDDIR) $(HOME)
564 cd $(DEB_BUILDDIR) && \
565 PYTHON=/usr/bin/python RUBY=/usr/bin/$(RUBY) \
566 $(CURDIR)/configure $(confflags)
567@@ -208,6 +208,8 @@
568 $(call allpydbg, $(MAKE_B) -j1 autogen-swig)
569 ln -sf python$(PYDEFAULT) $(PY_DIR)
570 +$(MAKE_B) all tools
571+ # Run svn once, to make sure it populates $(HOME)/.subversion/*
572+ $(DEB_BUILDDIR)/subversion/svn/svn --version > /dev/null
573 $(call allpy, \
574 $(MAKE_B) swig-py PYTHON=python$$v PYVER=$$v \
575 PYTHON_INCLUDES=-I/usr/include/python$$v \
576@@ -266,7 +268,6 @@
577 dh_testdir
578 dh_clean
579 $(RM) patches
580- $(MAKE) -C debian/tools clean
581 ! [ -f $(DEB_BUILDDIR)/Makefile ] || $(MAKE_B) extraclean-swig distclean
582 $(RM) -r $(DEB_BUILDDIR)
583 $(RM) build-outputs.mk gen-make.opts subversion/svn_private_config.h.in
584@@ -364,12 +365,6 @@
585 javahl_javahdir=/usr/include/svn-javahl
586 endif
587
588- # Create our default configuration files to be installed in
589- # /etc/subversion/
590- $(MAKE) -C debian/tools \
591- LD_LIBRARY_PATH="$(CURDIR)/debian/tmp/usr/lib$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}" \
592- DEB_SRCDIR=$(CURDIR) DEB_BUILDDIR=$(CURDIR)/$(DEB_BUILDDIR)
593-
594 $(MAKE_B) install-swig-pl-lib \
595 DESTDIR=$(CURDIR)/debian/tmp
596 $(MAKE) -C $(PERL_DIR) install \
597
598=== modified file 'debian/subversion.install'
599--- debian/subversion.install 2009-06-06 22:57:04 +0000
600+++ debian/subversion.install 2011-03-22 11:15:25 +0000
601@@ -4,7 +4,7 @@
602 debian/tmp/usr/share/man/man5 usr/share/man
603 debian/tmp/usr/share/man/man8 usr/share/man
604
605-debian/tools/svn-defaults/config etc/subversion
606-debian/tools/svn-defaults/servers etc/subversion
607+BUILD/dummy_home/.subversion/config etc/subversion
608+BUILD/dummy_home/.subversion/servers etc/subversion
609 contrib/client-side/emacs/psvn.el usr/share/emacs/site-lisp
610 debian/etc/50psvn.el etc/emacs/site-start.d
611
612=== removed directory 'debian/tools'
613=== removed file 'debian/tools/Makefile'
614--- debian/tools/Makefile 2010-11-20 11:21:18 +0000
615+++ debian/tools/Makefile 1970-01-01 00:00:00 +0000
616@@ -1,21 +0,0 @@
617-APR_CFLAGS = `apr-config --cppflags --includes --cflags`
618-APR_LIBS = `apr-config --ldflags --link-ld --libs`
619-SVN_INC = -I$(DEB_SRCDIR)/subversion/include
620-CFLAGS += -Wall \
621- $(SVN_INC) \
622- $(APR_CFLAGS)
623-
624-all: default-config
625-
626-default-config: clean svn-make-config
627- ./svn-make-config
628-
629-svn-make-config: svn-make-config.o
630- libtool --mode=link gcc $(APR_LIBS) svn-make-config.o $(DEB_BUILDDIR)/subversion/libsvn_subr/libsvn_subr-1.la -o svn-make-config
631-
632-clean:
633- $(RM) svn-make-config svn-make-config.o
634- rm -rf svn-defaults
635- rm -rf .libs
636-
637-.PHONY: clean
638
639=== removed file 'debian/tools/README'
640--- debian/tools/README 2005-06-29 13:09:32 +0000
641+++ debian/tools/README 1970-01-01 00:00:00 +0000
642@@ -1,5 +0,0 @@
643-The files in this directory are used to create the default
644-/etc/subversion/config and /etc/subversion/servers on Debian systems. The
645-default configuration files are created by the subversion libraries. This
646-ensures that new configuration options and changes to existing options are
647-reflected in the default /etc/subversion/ files in a timely manner.
648
649=== removed file 'debian/tools/svn-make-config.c'
650--- debian/tools/svn-make-config.c 2005-06-29 13:09:32 +0000
651+++ debian/tools/svn-make-config.c 1970-01-01 00:00:00 +0000
652@@ -1,60 +0,0 @@
653-/*
654- * Subversion will populate the user's ~/.subversion/ directory with
655- * default configuration files if the directory does not exist. Some
656- * of these same files are useful to system administrators who want to
657- * put files in /etc/subversion/ to control site-wide configuration.
658- * This program creates a default set of subversion config files in
659- * the current directory.
660- */
661-
662-#include <apr.h>
663-#include <apr_general.h>
664-#include <apr_pools.h>
665-#include <apr_file_io.h>
666-#include <apr_file_info.h>
667-#include <svn_config.h>
668-#include <stdio.h>
669-
670-#define ROOT_DIR "svn-defaults"
671-
672-int
673-main(int argc, char *argv[])
674-{
675- char *root;
676- apr_pool_t *pool;
677- apr_file_t *fptr;
678- apr_finfo_t finfo;
679-
680- apr_initialize();
681- apr_pool_create(&pool, NULL);
682-
683- apr_file_open_stderr(&fptr, pool);
684-
685- if (argc != 1)
686- {
687- apr_file_printf(fptr, "Usage: %s\n", argv[0]);
688- apr_file_printf(fptr, "Create a set of default config files"
689- "in $PWD/" ROOT_DIR "\n");
690- exit(0);
691- }
692-
693- root = apr_psprintf(pool, "%s/%s", getenv("PWD"), ROOT_DIR);
694-
695- if (!root)
696- {
697- apr_file_printf(fptr, "apr_psprintf failed\n");
698- exit(1);
699- }
700-
701- if (APR_SUCCESS == apr_stat(&finfo, root, 0, pool))
702- {
703- apr_file_printf(fptr, "%s exists\n", root);
704- exit(1);
705- }
706-
707- svn_config_ensure(root, pool);
708-
709- apr_terminate();
710-
711- return 0;
712-}
713
714=== modified file 'subversion/bindings/javahl/native/Outputer.cpp'
715--- subversion/bindings/javahl/native/Outputer.cpp 2009-06-06 22:57:04 +0000
716+++ subversion/bindings/javahl/native/Outputer.cpp 2011-03-22 11:15:25 +0000
717@@ -101,6 +101,10 @@
718 if (JNIUtil::isJavaExceptionThrown())
719 return SVN_NO_ERROR;
720
721+ env->DeleteLocalRef(data);
722+ if (JNIUtil::isJavaExceptionThrown())
723+ return SVN_NO_ERROR;
724+
725 // return the number of bytes written
726 *len = written;
727
728
729=== modified file 'subversion/bindings/swig/perl/native/Makefile.PL.in'
730--- subversion/bindings/swig/perl/native/Makefile.PL.in 2009-11-17 02:16:23 +0000
731+++ subversion/bindings/swig/perl/native/Makefile.PL.in 2011-03-22 11:15:25 +0000
732@@ -92,7 +92,7 @@
733 my $module_c_files = join (' ',map { "svn_$_.c"} @modules);
734 my $module_make_commands = join ('',map {"\t\$(MAKE) -f Makefile.$_\n"} @modules);
735
736- my $fullperlrun = "$apr_shlib_path_var=" . join(':',@ldpaths);
737+ my $fullperlrun = "$apr_shlib_path_var=\${$apr_shlib_path_var}:" . join(':',@ldpaths);
738
739 return <<"EOPOST";
740 all :: modules
741
742=== modified file 'subversion/bindings/swig/perl/native/core.c'
743--- subversion/bindings/swig/perl/native/core.c 2011-01-05 22:59:03 +0000
744+++ subversion/bindings/swig/perl/native/core.c 2011-03-22 11:15:25 +0000
745@@ -33630,12 +33630,12 @@
746 } while(0) /*@SWIG@*/;
747 /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
748 SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_PATCH", TRUE | 0x2 | GV_ADDMULTI);
749- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(15)));
750+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(16)));
751 SvREADONLY_on(sv);
752 } while(0) /*@SWIG@*/;
753 /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
754 SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_MICRO", TRUE | 0x2 | GV_ADDMULTI);
755- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(15)));
756+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(16)));
757 SvREADONLY_on(sv);
758 } while(0) /*@SWIG@*/;
759 /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
760@@ -33645,7 +33645,7 @@
761 } while(0) /*@SWIG@*/;
762 /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
763 SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_TAG", TRUE | 0x2 | GV_ADDMULTI);
764- sv_setsv(sv, SWIG_FromCharPtr(" (r1038135)"));
765+ sv_setsv(sv, SWIG_FromCharPtr(" (r1073529)"));
766 SvREADONLY_on(sv);
767 } while(0) /*@SWIG@*/;
768 /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
769@@ -33655,7 +33655,7 @@
770 } while(0) /*@SWIG@*/;
771 /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
772 SV *sv = get_sv((char*) SWIG_prefix "SVN_VER_REVISION", TRUE | 0x2 | GV_ADDMULTI);
773- sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1038135)));
774+ sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(1073529)));
775 SvREADONLY_on(sv);
776 } while(0) /*@SWIG@*/;
777 /*@SWIG:/home/hwright/dev/release/roll/prefix/share/swig/1.3.36/perl5/perltypemaps.swg,64,%set_constant@*/ do {
778
779=== modified file 'subversion/bindings/swig/python/core.c'
780--- subversion/bindings/swig/python/core.c 2011-01-05 22:59:03 +0000
781+++ subversion/bindings/swig/python/core.c 2011-03-22 11:15:25 +0000
782@@ -25569,12 +25569,12 @@
783 SWIG_Python_SetConstant(d, "SVN_ALLOCATOR_RECOMMENDED_MAX_FREE",SWIG_From_long((long)((4096*1024))));
784 SWIG_Python_SetConstant(d, "SVN_VER_MAJOR",SWIG_From_long((long)(1)));
785 SWIG_Python_SetConstant(d, "SVN_VER_MINOR",SWIG_From_long((long)(6)));
786- SWIG_Python_SetConstant(d, "SVN_VER_PATCH",SWIG_From_long((long)(15)));
787- SWIG_Python_SetConstant(d, "SVN_VER_MICRO",SWIG_From_long((long)(15)));
788+ SWIG_Python_SetConstant(d, "SVN_VER_PATCH",SWIG_From_long((long)(16)));
789+ SWIG_Python_SetConstant(d, "SVN_VER_MICRO",SWIG_From_long((long)(16)));
790 SWIG_Python_SetConstant(d, "SVN_VER_LIBRARY",SWIG_From_long((long)(1)));
791- SWIG_Python_SetConstant(d, "SVN_VER_TAG",SWIG_FromCharPtr(" (r1038135)"));
792+ SWIG_Python_SetConstant(d, "SVN_VER_TAG",SWIG_FromCharPtr(" (r1073529)"));
793 SWIG_Python_SetConstant(d, "SVN_VER_NUMTAG",SWIG_FromCharPtr(""));
794- SWIG_Python_SetConstant(d, "SVN_VER_REVISION",SWIG_From_long((long)(1038135)));
795+ SWIG_Python_SetConstant(d, "SVN_VER_REVISION",SWIG_From_long((long)(1073529)));
796 SWIG_Python_SetConstant(d, "svn_prop_entry_kind",SWIG_From_long((long)(svn_prop_entry_kind)));
797 SWIG_Python_SetConstant(d, "svn_prop_wc_kind",SWIG_From_long((long)(svn_prop_wc_kind)));
798 SWIG_Python_SetConstant(d, "svn_prop_regular_kind",SWIG_From_long((long)(svn_prop_regular_kind)));
799
800=== modified file 'subversion/bindings/swig/ruby/core.c'
801--- subversion/bindings/swig/ruby/core.c 2011-01-05 22:59:03 +0000
802+++ subversion/bindings/swig/ruby/core.c 2011-03-22 11:15:25 +0000
803@@ -29414,12 +29414,12 @@
804 rb_define_module_function(mCore, "svn_pool_create", _wrap_svn_pool_create, -1);
805 rb_define_const(mCore, "SVN_VER_MAJOR", SWIG_From_int((int)(1)));
806 rb_define_const(mCore, "SVN_VER_MINOR", SWIG_From_int((int)(6)));
807- rb_define_const(mCore, "SVN_VER_PATCH", SWIG_From_int((int)(15)));
808- rb_define_const(mCore, "SVN_VER_MICRO", SWIG_From_int((int)(15)));
809+ rb_define_const(mCore, "SVN_VER_PATCH", SWIG_From_int((int)(16)));
810+ rb_define_const(mCore, "SVN_VER_MICRO", SWIG_From_int((int)(16)));
811 rb_define_const(mCore, "SVN_VER_LIBRARY", SWIG_From_int((int)(1)));
812- rb_define_const(mCore, "SVN_VER_TAG", SWIG_FromCharPtr(" (r1038135)"));
813+ rb_define_const(mCore, "SVN_VER_TAG", SWIG_FromCharPtr(" (r1073529)"));
814 rb_define_const(mCore, "SVN_VER_NUMTAG", SWIG_FromCharPtr(""));
815- rb_define_const(mCore, "SVN_VER_REVISION", SWIG_From_int((int)(1038135)));
816+ rb_define_const(mCore, "SVN_VER_REVISION", SWIG_From_int((int)(1073529)));
817
818 cSvn_version_t.klass = rb_define_class_under(mCore, "Svn_version_t", rb_cObject);
819 SWIG_TypeClientData(SWIGTYPE_p_svn_version_t, (void *) &cSvn_version_t);
820
821=== modified file 'subversion/bindings/swig/ruby/test/util.rb'
822--- subversion/bindings/swig/ruby/test/util.rb 2009-11-17 02:16:23 +0000
823+++ subversion/bindings/swig/ruby/test/util.rb 2011-03-22 11:15:25 +0000
824@@ -232,6 +232,9 @@
825 @svnserve_port = port
826 @repos_svnserve_uri =
827 "svn://#{@svnserve_host}:#{@svnserve_port}#{@full_repos_path}"
828+ # Avoid a race by waiting a short time for svnserve to start up.
829+ # Without this, tests can fail with "Connection refused" errors.
830+ sleep 0.1
831 break
832 end
833 end
834
835=== modified file 'subversion/include/svn_version.h'
836--- subversion/include/svn_version.h 2011-01-05 22:59:03 +0000
837+++ subversion/include/svn_version.h 2011-03-22 11:15:25 +0000
838@@ -66,7 +66,7 @@
839 *
840 * @since New in 1.1.
841 */
842-#define SVN_VER_PATCH 15
843+#define SVN_VER_PATCH 16
844
845
846 /** @deprecated Provided for backward compatibility with the 1.0 API. */
847@@ -89,7 +89,7 @@
848 *
849 * Always change this at the same time as SVN_VER_NUMTAG.
850 */
851-#define SVN_VER_TAG " (r1038135)"
852+#define SVN_VER_TAG " (r1073529)"
853
854
855 /** Number tag: a string describing the version.
856@@ -115,7 +115,7 @@
857 * When rolling a tarball, we automatically replace it with what we
858 * guess to be the correct revision number.
859 */
860-#define SVN_VER_REVISION 1038135
861+#define SVN_VER_REVISION 1073529
862
863
864
865 /* Version strings composed from the above definitions. */
866
867=== modified file 'subversion/libsvn_client/merge.c'
868--- subversion/libsvn_client/merge.c 2011-01-05 22:59:03 +0000
869+++ subversion/libsvn_client/merge.c 2011-03-22 11:15:25 +0000
870@@ -502,7 +502,9 @@
871 }
872
873 /* Record a tree conflict in the WC, unless this is a dry run or a record-
874- * only merge.
875+ * only merge, or if a tree conflict is already flagged for the VICTIM_PATH.
876+ * (The latter can happen if a merge-tracking-aware merge is doing multiple
877+ * editor drives because of a gap in the range of eligible revisions.)
878 *
879 * The tree conflict, with its victim specified by VICTIM_PATH, is
880 * assumed to have happened during a merge using merge baton MERGE_B.
881@@ -523,16 +525,22 @@
882 svn_wc_conflict_action_t action,
883 svn_wc_conflict_reason_t reason)
884 {
885+ svn_wc_conflict_description_t *existing_conflict;
886 svn_wc_conflict_description_t *conflict;
887
888 if (merge_b->record_only || merge_b->dry_run)
889 return SVN_NO_ERROR;
890
891- /* Construct the new conflict first to get the proper conflict->path */
892- SVN_ERR(make_tree_conflict(&conflict, merge_b, adm_access, victim_path,
893- node_kind, action, reason));
894+ SVN_ERR(svn_wc__get_tree_conflict(&existing_conflict, victim_path,
895+ adm_access, merge_b->pool));
896+ if (existing_conflict == NULL)
897+ {
898+ /* There is no existing tree conflict so it is safe to add one. */
899+ SVN_ERR(make_tree_conflict(&conflict, merge_b, adm_access, victim_path,
900+ node_kind, action, reason));
901+ SVN_ERR(svn_wc__add_tree_conflict(conflict, adm_access, merge_b->pool));
902+ }
903
904- SVN_ERR(svn_wc__add_tree_conflict(conflict, adm_access, merge_b->pool));
905 return SVN_NO_ERROR;
906 }
907
908
909=== modified file 'subversion/libsvn_fs/fs-loader.c'
910--- subversion/libsvn_fs/fs-loader.c 2009-11-17 02:16:23 +0000
911+++ subversion/libsvn_fs/fs-loader.c 2011-03-22 11:15:25 +0000
912@@ -658,6 +658,7 @@
913 svn_fs_t *fs;
914 const char *fs_path;
915
916+ *new_rev = SVN_INVALID_REVNUM;
917 SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
918 fs = svn_fs_root_fs(txn_root);
919 fs_path = svn_fs_path(fs, pool);
920
921=== modified file 'subversion/libsvn_fs_fs/fs_fs.c'
922--- subversion/libsvn_fs_fs/fs_fs.c 2011-01-05 22:59:03 +0000
923+++ subversion/libsvn_fs_fs/fs_fs.c 2011-03-22 11:15:25 +0000
924@@ -5903,13 +5903,19 @@
925 /* Update the 'current' file. */
926 SVN_ERR(write_final_current(cb->fs, cb->txn->id, new_rev, start_node_id,
927 start_copy_id, pool));
928+
929+ /* At this point the new revision is committed and globally visible
930+ so let the caller know it succeeded by giving it the new revision
931+ number, which fulfills svn_fs_commit_txn() contract. Any errors
932+ after this point do not change the fact that a new revision was
933+ created. */
934+ *cb->new_rev_p = new_rev;
935+
936 ffd->youngest_rev_cache = new_rev;
937
938 /* Remove this transaction directory. */
939 SVN_ERR(svn_fs_fs__purge_txn(cb->fs, cb->txn->id, pool));
940
941- *cb->new_rev_p = new_rev;
942-
943 return SVN_NO_ERROR;
944 }
945
946
947=== modified file 'subversion/libsvn_ra_neon/mergeinfo.c'
948--- subversion/libsvn_ra_neon/mergeinfo.c 2009-11-17 02:16:23 +0000
949+++ subversion/libsvn_ra_neon/mergeinfo.c 2011-03-22 11:15:25 +0000
950@@ -171,6 +171,8 @@
951 static const char minfo_report_tail[] =
952 "</S:" SVN_DAV__MERGEINFO_REPORT ">" DEBUG_CR;
953
954+ *catalog = NULL;
955+
956 /* Construct the request body. */
957 svn_stringbuf_appendcstr(request_body, minfo_report_head);
958 svn_stringbuf_appendcstr(request_body,
959@@ -237,7 +239,7 @@
960 FALSE,
961 pool));
962
963- if (mb.err == SVN_NO_ERROR)
964+ if (mb.err == SVN_NO_ERROR && apr_hash_count(mb.catalog))
965 *catalog = mb.catalog;
966
967 return mb.err;
968
969=== modified file 'subversion/libsvn_ra_neon/options.c'
970--- subversion/libsvn_ra_neon/options.c 2009-11-17 02:16:23 +0000
971+++ subversion/libsvn_ra_neon/options.c 2011-03-22 11:15:25 +0000
972@@ -110,6 +110,23 @@
973
974
975 /** Capabilities exchange. */
976
977+/* Return TRUE iff STR exactly matches any of the elements of LIST. */
978+static svn_boolean_t
979+match_list(const char *str, const apr_array_header_t *list)
980+{
981+ int i;
982+
983+ for (i = 0; i < list->nelts; i++)
984+ {
985+ const char *this_str = APR_ARRAY_IDX(list, i, char *);
986+
987+ if (strcmp(this_str, str) == 0)
988+ return TRUE;
989+ }
990+
991+ return FALSE;
992+}
993+
994 /* Both server and repository support the capability. */
995 static const char *capability_yes = "yes";
996 /* Either server or repository does not support the capability. */
997@@ -167,22 +184,21 @@
998 slightly more efficiently, but that wouldn't be worth it
999 until we have many more capabilities. */
1000
1001- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
1002+ if (match_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
1003 apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_DEPTH,
1004 APR_HASH_KEY_STRING, capability_yes);
1005
1006- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
1007+ if (match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
1008 /* The server doesn't know what repository we're referring
1009 to, so it can't just say capability_yes. */
1010 apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_MERGEINFO,
1011 APR_HASH_KEY_STRING, capability_server_yes);
1012
1013- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
1014+ if (match_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
1015 apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_LOG_REVPROPS,
1016 APR_HASH_KEY_STRING, capability_yes);
1017
1018- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY,
1019- vals))
1020+ if (match_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY, vals))
1021 apr_hash_set(ras->capabilities, SVN_RA_CAPABILITY_PARTIAL_REPLAY,
1022 APR_HASH_KEY_STRING, capability_yes);
1023 }
1024
1025=== modified file 'subversion/libsvn_ra_serf/mergeinfo.c'
1026--- subversion/libsvn_ra_serf/mergeinfo.c 2011-01-05 22:45:51 +0000
1027+++ subversion/libsvn_ra_serf/mergeinfo.c 2011-03-22 11:15:25 +0000
1028@@ -238,6 +238,8 @@
1029 const char *relative_url, *basecoll_url;
1030 const char *path;
1031
1032+ *catalog = NULL;
1033+
1034 SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
1035 NULL, NULL, revision, NULL, pool));
1036
1037@@ -297,7 +299,7 @@
1038 else
1039 SVN_ERR(err);
1040
1041- if (mergeinfo_ctx->done)
1042+ if (mergeinfo_ctx->done && apr_hash_count(mergeinfo_ctx->result_catalog))
1043 *catalog = mergeinfo_ctx->result_catalog;
1044
1045 return SVN_NO_ERROR;
1046
1047=== modified file 'subversion/libsvn_ra_serf/serf.c'
1048--- subversion/libsvn_ra_serf/serf.c 2011-01-05 22:45:51 +0000
1049+++ subversion/libsvn_ra_serf/serf.c 2011-03-22 11:15:25 +0000
1050@@ -67,6 +67,22 @@
1051 apr_pool_t *pool;
1052 };
1053
1054+/* Return TRUE iff STR exactly matches any of the elements of LIST. */
1055+static svn_boolean_t
1056+match_list(const char *str, const apr_array_header_t *list)
1057+{
1058+ int i;
1059+
1060+ for (i = 0; i < list->nelts; i++)
1061+ {
1062+ const char *this_str = APR_ARRAY_IDX(list, i, char *);
1063+
1064+ if (strcmp(this_str, str) == 0)
1065+ return TRUE;
1066+ }
1067+
1068+ return FALSE;
1069+}
1070
1071 /* This implements serf_bucket_headers_do_callback_fn_t.
1072 * BATON is a 'struct capabilities_response_baton *'.
1073@@ -91,13 +107,13 @@
1074 efficiently, but that wouldn't be worth it until we have many
1075 more capabilities. */
1076
1077- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
1078+ if (match_list(SVN_DAV_NS_DAV_SVN_DEPTH, vals))
1079 {
1080 apr_hash_set(crb->capabilities, SVN_RA_CAPABILITY_DEPTH,
1081 APR_HASH_KEY_STRING, capability_yes);
1082 }
1083
1084- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
1085+ if (match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
1086 {
1087 /* The server doesn't know what repository we're referring
1088 to, so it can't just say capability_yes. */
1089@@ -105,13 +121,13 @@
1090 APR_HASH_KEY_STRING, capability_server_yes);
1091 }
1092
1093- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
1094+ if (match_list(SVN_DAV_NS_DAV_SVN_LOG_REVPROPS, vals))
1095 {
1096 apr_hash_set(crb->capabilities, SVN_RA_CAPABILITY_LOG_REVPROPS,
1097 APR_HASH_KEY_STRING, capability_yes);
1098 }
1099
1100- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY, vals))
1101+ if (match_list(SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY, vals))
1102 {
1103 apr_hash_set(crb->capabilities, SVN_RA_CAPABILITY_PARTIAL_REPLAY,
1104 APR_HASH_KEY_STRING, capability_yes);
1105
1106=== modified file 'subversion/libsvn_ra_serf/update.c'
1107--- subversion/libsvn_ra_serf/update.c 2011-01-05 22:59:03 +0000
1108+++ subversion/libsvn_ra_serf/update.c 2011-03-22 11:15:25 +0000
1109@@ -1633,7 +1633,8 @@
1110 }
1111 else if (state == IGNORE_PROP_NAME)
1112 {
1113- push_state(parser, ctx, PROP);
1114+ report_info_t *info = push_state(parser, ctx, PROP);
1115+ info->prop_encoding = svn_xml_get_attr_value("encoding", attrs);
1116 }
1117 else if (state == NEED_PROP_NAME)
1118 {
1119@@ -1643,6 +1644,7 @@
1120
1121 info->prop_ns = name.namespace;
1122 info->prop_name = apr_pstrdup(parser->state->pool, name.name);
1123+ info->prop_encoding = svn_xml_get_attr_value("encoding", attrs);
1124 info->prop_val = NULL;
1125 info->prop_val_len = 0;
1126 }
1127
1128=== modified file 'subversion/libsvn_repos/fs-wrap.c'
1129--- subversion/libsvn_repos/fs-wrap.c 2009-11-17 02:16:23 +0000
1130+++ subversion/libsvn_repos/fs-wrap.c 2011-03-22 11:15:25 +0000
1131@@ -43,6 +43,8 @@
1132 svn_error_t *err;
1133 const char *txn_name;
1134
1135+ *new_rev = SVN_INVALID_REVNUM;
1136+
1137 /* Run pre-commit hooks. */
1138 SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool));
1139 SVN_ERR(svn_repos__hooks_pre_commit(repos, txn_name, pool));
1140
1141=== modified file 'subversion/libsvn_repos/log.c'
1142--- subversion/libsvn_repos/log.c 2011-01-05 22:59:03 +0000
1143+++ subversion/libsvn_repos/log.c 2011-03-22 11:15:25 +0000
1144@@ -1043,6 +1043,7 @@
1145 {
1146 svn_fs_root_t *root;
1147 apr_pool_t *iterpool;
1148+ svn_error_t *err;
1149 int i;
1150
1151 /* Create a history object for each path so we can walk through
1152@@ -1084,7 +1085,6 @@
1153
1154 if (i < MAX_OPEN_HISTORIES)
1155 {
1156- svn_error_t *err;
1157 err = svn_fs_node_history(&info->hist, root, this_path, pool);
1158 if (err
1159 && ignore_missing_locations
1160@@ -1106,10 +1106,20 @@
1161 info->newpool = NULL;
1162 }
1163
1164- SVN_ERR(get_history(info, fs,
1165- strict_node_history,
1166- authz_read_func, authz_read_baton,
1167- hist_start, pool));
1168+ err = get_history(info, fs,
1169+ strict_node_history,
1170+ authz_read_func, authz_read_baton,
1171+ hist_start, pool);
1172+ if (err
1173+ && ignore_missing_locations
1174+ && (err->apr_err == SVN_ERR_FS_NOT_FOUND ||
1175+ err->apr_err == SVN_ERR_FS_NOT_DIRECTORY ||
1176+ err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION))
1177+ {
1178+ svn_error_clear(err);
1179+ continue;
1180+ }
1181+ SVN_ERR(err);
1182 APR_ARRAY_PUSH(*histories, struct path_info *) = info;
1183 }
1184 svn_pool_destroy(iterpool);
1185
1186=== modified file 'subversion/libsvn_repos/rev_hunt.c'
1187--- subversion/libsvn_repos/rev_hunt.c 2011-01-05 22:59:03 +0000
1188+++ subversion/libsvn_repos/rev_hunt.c 2011-03-22 11:15:25 +0000
1189@@ -1090,8 +1090,8 @@
1190
1191 /* We switch between two pools while looping, since we need information from
1192 the last iteration to be available. */
1193- iterpool = svn_pool_create(result_pool);
1194- last_pool = svn_pool_create(result_pool);
1195+ iterpool = svn_pool_create(scratch_pool);
1196+ last_pool = svn_pool_create(scratch_pool);
1197
1198 /* The path had better be a file in this revision. */
1199 SVN_ERR(svn_fs_revision_root(&root, repos->fs, end, scratch_pool));
1200@@ -1170,6 +1170,7 @@
1201 }
1202
1203 svn_pool_destroy(iterpool);
1204+ svn_pool_destroy(last_pool);
1205
1206 return SVN_NO_ERROR;
1207 }
1208
1209=== modified file 'subversion/libsvn_subr/error.c'
1210--- subversion/libsvn_subr/error.c 2009-11-17 02:16:23 +0000
1211+++ subversion/libsvn_subr/error.c 2011-03-22 11:15:25 +0000
1212@@ -36,7 +36,15 @@
1213 #include "svn_private_config.h"
1214
1215
1216
1217-/*** Helpers for creating errors ***/
1218+/*
1219+ * Undefine the helpers for creating errors.
1220+ *
1221+ * *NOTE*: Any use of these functions in any other function may need
1222+ * to call svn_error__locate() because the macro that would otherwise
1223+ * do this is being undefined and the filename and line number will
1224+ * not be properly set in the static error_file and error_line
1225+ * variables.
1226+ */
1227 #undef svn_error_create
1228 #undef svn_error_createf
1229 #undef svn_error_quick_wrap
1230@@ -504,6 +512,11 @@
1231 if (!can_return)
1232 abort(); /* Nothing else we can do as a library */
1233
1234+ /* The filename and line number of the error source needs to be set
1235+ here because svn_error_createf() is not the macro defined in
1236+ svn_error.h but the real function. */
1237+ svn_error__locate(file, line);
1238+
1239 if (expr)
1240 return svn_error_createf(SVN_ERR_ASSERTION_FAIL, NULL,
1241 _("In file '%s' line %d: assertion failed (%s)"),
1242
1243=== modified file 'subversion/libsvn_wc/props.c'
1244--- subversion/libsvn_wc/props.c 2011-01-05 22:59:03 +0000
1245+++ subversion/libsvn_wc/props.c 2011-03-22 11:15:25 +0000
1246@@ -1135,6 +1135,7 @@
1247 const svn_string_t *working_val,
1248 svn_wc_conflict_resolver_func_t conflict_func,
1249 void *conflict_baton,
1250+ svn_boolean_t dry_run,
1251 apr_pool_t *pool)
1252 {
1253 svn_wc_conflict_result_t *result = NULL;
1254@@ -1143,7 +1144,7 @@
1255 svn_wc_conflict_description_t *cdesc;
1256 const char *dirpath = svn_path_dirname(path, filepool);
1257
1258- if (! conflict_func)
1259+ if (! conflict_func || dry_run)
1260 {
1261 /* Just postpone the conflict. */
1262 *conflict_remains = TRUE;
1263@@ -1364,6 +1365,7 @@
1264 const svn_string_t *new_val,
1265 svn_wc_conflict_resolver_func_t conflict_func,
1266 void *conflict_baton,
1267+ svn_boolean_t dry_run,
1268 svn_wc_adm_access_t *adm_access,
1269 apr_pool_t *pool)
1270
1271@@ -1400,7 +1402,7 @@
1272 NULL, new_val,
1273 base_val, working_val,
1274 conflict_func, conflict_baton,
1275- pool));
1276+ dry_run, pool));
1277 if (got_conflict)
1278 *conflict = svn_string_createf
1279 (pool,
1280@@ -1416,7 +1418,8 @@
1281 is_dir, propname,
1282 working_props, NULL, new_val,
1283 base_val, NULL,
1284- conflict_func, conflict_baton, pool));
1285+ conflict_func, conflict_baton,
1286+ dry_run, pool));
1287 if (got_conflict)
1288 *conflict = svn_string_createf
1289 (pool, _("Trying to create property '%s' with value '%s',\n"
1290@@ -1459,6 +1462,7 @@
1291 const svn_string_t *old_val,
1292 svn_wc_conflict_resolver_func_t conflict_func,
1293 void *conflict_baton,
1294+ svn_boolean_t dry_run,
1295 svn_wc_adm_access_t *adm_access,
1296 apr_pool_t *pool)
1297 {
1298@@ -1489,7 +1493,7 @@
1299 old_val, NULL,
1300 base_val, working_val,
1301 conflict_func, conflict_baton,
1302- pool));
1303+ dry_run, pool));
1304 if (got_conflict)
1305 *conflict = svn_string_createf
1306 (pool,
1307@@ -1510,7 +1514,8 @@
1308 is_dir, propname,
1309 working_props, old_val, NULL,
1310 base_val, working_val,
1311- conflict_func, conflict_baton, pool));
1312+ conflict_func, conflict_baton,
1313+ dry_run, pool));
1314 if (got_conflict)
1315 *conflict = svn_string_createf
1316 (pool,
1317@@ -1542,6 +1547,7 @@
1318 const svn_string_t *new_val,
1319 svn_wc_conflict_resolver_func_t conflict_func,
1320 void *conflict_baton,
1321+ svn_boolean_t dry_run,
1322 svn_wc_adm_access_t *adm_access,
1323 apr_pool_t *pool)
1324 {
1325@@ -1583,7 +1589,7 @@
1326 old_val, new_val,
1327 base_val, working_val,
1328 conflict_func, conflict_baton,
1329- pool));
1330+ dry_run, pool));
1331 if (got_conflict)
1332 *conflict = svn_string_createf
1333 (pool,
1334@@ -1648,6 +1654,7 @@
1335 const svn_string_t *new_val,
1336 svn_wc_conflict_resolver_func_t conflict_func,
1337 void *conflict_baton,
1338+ svn_boolean_t dry_run,
1339 svn_wc_adm_access_t *adm_access,
1340 apr_pool_t *pool)
1341 {
1342@@ -1671,7 +1678,7 @@
1343 old_val, new_val,
1344 base_val, working_val,
1345 conflict_func, conflict_baton,
1346- pool));
1347+ dry_run, pool));
1348 if (got_conflict)
1349 {
1350 /* Describe the conflict, referring to base_val as well as
1351@@ -1746,6 +1753,7 @@
1352 const svn_string_t *new_val,
1353 svn_wc_conflict_resolver_func_t conflict_func,
1354 void *conflict_baton,
1355+ svn_boolean_t dry_run,
1356 svn_wc_adm_access_t *adm_access,
1357 apr_pool_t *pool)
1358 {
1359@@ -1764,8 +1772,8 @@
1360 working_props, conflict,
1361 propname, base_val, old_val,
1362 new_val, conflict_func,
1363- conflict_baton, adm_access,
1364- pool));
1365+ conflict_baton,
1366+ dry_run, adm_access, pool));
1367 }
1368 else
1369 {
1370@@ -1776,8 +1784,8 @@
1371 working_props, conflict,
1372 propname, base_val, old_val,
1373 new_val, conflict_func,
1374- conflict_baton, adm_access,
1375- pool));
1376+ conflict_baton,
1377+ dry_run, adm_access, pool));
1378 }
1379
1380 return SVN_NO_ERROR;
1381@@ -1862,21 +1870,21 @@
1382 working_props, &conflict,
1383 propname, base_val, to_val,
1384 conflict_func, conflict_baton,
1385- adm_access, pool));
1386+ dry_run, adm_access, pool));
1387
1388 else if (! to_val) /* delete an existing property */
1389 SVN_ERR(apply_single_prop_delete(is_normal ? state : NULL, path, is_dir,
1390 working_props, &conflict,
1391 propname, base_val, from_val,
1392 conflict_func, conflict_baton,
1393- adm_access, pool));
1394+ dry_run, adm_access, pool));
1395
1396 else /* changing an existing property */
1397 SVN_ERR(apply_single_prop_change(is_normal ? state : NULL, path, is_dir,
1398 working_props, &conflict,
1399 propname, base_val, from_val, to_val,
1400 conflict_func, conflict_baton,
1401- adm_access, pool));
1402+ dry_run, adm_access, pool));
1403
1404
1405 /* merging logic complete, now we need to possibly log conflict
1406
1407=== modified file 'subversion/mod_dav_svn/repos.c'
1408--- subversion/mod_dav_svn/repos.c 2011-01-05 22:59:03 +0000
1409+++ subversion/mod_dav_svn/repos.c 2011-03-22 11:15:25 +0000
1410@@ -1607,6 +1607,23 @@
1411 }
1412
1413
1414+/* Return TRUE iff STR exactly matches any of the elements of LIST. */
1415+static svn_boolean_t
1416+match_list(const char *str, const apr_array_header_t *list)
1417+{
1418+ int i;
1419+
1420+ for (i = 0; i < list->nelts; i++)
1421+ {
1422+ const char *this_str = APR_ARRAY_IDX(list, i, char *);
1423+
1424+ if (strcmp(this_str, str) == 0)
1425+ return TRUE;
1426+ }
1427+
1428+ return FALSE;
1429+}
1430+
1431
1432 static dav_error *
1433 get_resource(request_rec *r,
1434@@ -1815,8 +1832,7 @@
1435 apr_array_header_t *vals
1436 = svn_cstring_split(val, ",", TRUE, r->pool);
1437
1438- if (svn_cstring_match_glob_list(SVN_DAV_NS_DAV_SVN_MERGEINFO,
1439- vals))
1440+ if (match_list(SVN_DAV_NS_DAV_SVN_MERGEINFO, vals))
1441 {
1442 apr_hash_set(repos->client_capabilities,
1443 SVN_RA_CAPABILITY_MERGEINFO,
1444@@ -1923,8 +1939,10 @@
1445 dav_locktoken_list *list = ltl;
1446
1447 serr = svn_fs_get_access(&access_ctx, repos->fs);
1448- if (serr)
1449+ if (serr || !access_ctx)
1450 {
1451+ if (serr == NULL)
1452+ serr = svn_error_create(SVN_ERR_FS_LOCK_OWNER_MISMATCH, NULL, NULL);
1453 return dav_svn__sanitize_error(serr, "Lock token is in request, "
1454 "but no user name",
1455 HTTP_BAD_REQUEST, r);
1456
1457=== modified file 'subversion/mod_dav_svn/version.c'
1458--- subversion/mod_dav_svn/version.c 2009-11-17 02:16:23 +0000
1459+++ subversion/mod_dav_svn/version.c 2011-03-22 11:15:25 +0000
1460@@ -1172,11 +1172,13 @@
1461 svn_error_t *serr;
1462
1463 serr = svn_fs_get_access(&fsaccess, resource->info->repos->fs);
1464- if (serr)
1465+ if (serr || !fsaccess)
1466 {
1467 /* If an authenticated user name was attached to the request,
1468 then dav_svn_get_resource() should have already noticed and
1469 created an fs_access_t in the filesystem. */
1470+ if (serr == NULL)
1471+ serr = svn_error_create(SVN_ERR_FS_LOCK_OWNER_MISMATCH, NULL, NULL);
1472 return dav_svn__sanitize_error(serr, "Lock token(s) in request, but "
1473 "missing an user name", HTTP_BAD_REQUEST,
1474 resource->info->r);
1475
1476=== modified file 'subversion/po/zh_CN.po'
1477--- subversion/po/zh_CN.po 2011-01-05 22:59:03 +0000
1478+++ subversion/po/zh_CN.po 2011-03-22 11:15:25 +0000
1479@@ -38,8 +38,8 @@
1480 msgstr ""
1481 "Project-Id-Version: subversion 1.6\n"
1482 "Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
1483-"POT-Creation-Date: 2010-09-05 21:45+0800\n"
1484-"PO-Revision-Date: 2010-09-05 21:33+0800\n"
1485+"POT-Creation-Date: 2010-12-26 12:00+0800\n"
1486+"PO-Revision-Date: 2010-12-26 12:00+0800\n"
1487 "Last-Translator: Subversion Developers <dev@subversion.apache.org>\n"
1488 "Language-Team: Simplified Chinese <dev@subversion.apache.org>\n"
1489 "Language: \n"
1490@@ -3541,10 +3541,6 @@
1491 msgid "Incomplete or unterminated property block"
1492 msgstr "不完整或未结束的属性块"
1493
1494-#, c-format
1495-msgid " removing '\\r' from %s ..."
1496-msgstr "正在从 '%s' 删除 '\\r' ..."
1497-
1498 msgid "Unexpected EOF writing contents"
1499 msgstr "写内容时意外结束"
1500
1501@@ -3603,6 +3599,10 @@
1502 msgid "Unrecognized node-action on node '%s'"
1503 msgstr "节点“%s”的动作不能识别"
1504
1505+#, c-format
1506+msgid " removing '\\r' from %s ..."
1507+msgstr "正在从 '%s' 删除 '\\r' ..."
1508+
1509 msgid " done.\n"
1510 msgstr "完成。\n"
1511
1512@@ -4323,14 +4323,14 @@
1513
1514 msgid ""
1515 "Copyright (C) 2000-2009 CollabNet.\n"
1516-"Subversion is open source software, see http://subversion.tigris.org/\n"
1517+"Subversion is open source software, see http://subversion.apache.org/\n"
1518 "This product includes software developed by CollabNet (http://www.Collab."
1519 "Net/).\n"
1520 "\n"
1521 msgstr ""
1522 "版权所有 (C) 2000-2009 CollabNet。\n"
1523-"Subversion 是开放源代码软件,请参阅 http://subversion.tigris.org/ 站点。\n"
1524-"此产品包含由 CollabNet(http://www.Collab.Net/) 开发的软件。\n"
1525+"Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。\n"
1526+"此产品包含由 CollabNet (http://www.Collab.Net/) 开发的软件。\n"
1527 "\n"
1528
1529 #, c-format
1530@@ -5181,15 +5181,6 @@
1531
1532 #, c-format
1533 msgid ""
1534-"The path '%s' appears to be part of a Subversion 1.7 or greater\n"
1535-"working copy rooted at '%s'.\n"
1536-"Please upgrade your Subversion client to use this working copy."
1537-msgstr ""
1538-"路径 '%s' 好像是 Subversion 1.7 或更高版本的工作副本,根路径是 '%s'。\n"
1539-"请升级你的 Subversion 客户端,以使用此工作副本。"
1540-
1541-#, c-format
1542-msgid ""
1543 "Working copy format of '%s' is too old (%d); please check out your working "
1544 "copy again"
1545 msgstr "“%s”的工作副本格式太旧(%d);请重新取出工作副本"
1546@@ -5372,6 +5363,15 @@
1547 msgid "'%s' does not appear to be a URL"
1548 msgstr "“%s”不像是URL"
1549
1550+#, c-format
1551+msgid ""
1552+"svn: warning: The depth of this commit is '%s', but copied directories will "
1553+"regardless be committed with depth '%s'. You must remove unwanted children of "
1554+"those directories in a separate commit.\n"
1555+msgstr ""
1556+"svn: 警告: 此提交的深度是 '%s',但是复制的目录将被提交的深度是 '%s'。你必须在"
1557+"独立的提交中删除这些目录中不需要的项目。\n"
1558+
1559 msgid "||||||| ORIGINAL"
1560 msgstr "||||||| 原始版本"
1561
1562
1563=== modified file 'subversion/tests/libsvn_fs/fs-test.c'
1564--- subversion/tests/libsvn_fs/fs-test.c 2009-11-17 02:16:23 +0000
1565+++ subversion/tests/libsvn_fs/fs-test.c 2011-03-22 11:15:25 +0000
1566@@ -54,6 +54,7 @@
1567 * EXPECTED_CONFLICT. If they don't match, return error.
1568 *
1569 * If a conflict is expected but the commit succeeds anyway, return
1570+ * error. If the commit fails but does not provide an error, return
1571 * error.
1572 */
1573 static svn_error_t *
1574@@ -94,13 +95,24 @@
1575 conflict, expected_conflict);
1576 }
1577 }
1578- else if (err) /* commit failed, but not due to conflict */
1579+ else if (err) /* commit may have succeeded, but always report an error */
1580 {
1581- return svn_error_quick_wrap
1582- (err, "commit failed due to something other than a conflict");
1583+ if (SVN_IS_VALID_REVNUM(*new_rev))
1584+ return svn_error_quick_wrap
1585+ (err, "commit succeeded but something else failed");
1586+ else
1587+ return svn_error_quick_wrap
1588+ (err, "commit failed due to something other than a conflict");
1589 }
1590- else /* err == NULL, so commit succeeded */
1591+ else /* err == NULL, commit should have succeeded */
1592 {
1593+ if (! SVN_IS_VALID_REVNUM(*new_rev))
1594+ {
1595+ return svn_error_create
1596+ (SVN_ERR_FS_GENERAL, NULL,
1597+ "commit failed but no error was returned");
1598+ }
1599+
1600 if (expected_conflict)
1601 {
1602 return svn_error_createf
1603@@ -1150,6 +1162,7 @@
1604
1605 /* Commit it. */
1606 SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, pool));
1607+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
1608
1609 /* Make sure it's a different revision than before. */
1610 if (after_rev == before_rev)
1611@@ -1226,6 +1239,7 @@
1612
1613 /* Go ahead and commit the tree, and destroy the txn object. */
1614 SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
1615+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
1616
1617 /* Carefully validate that tree in the new revision, now. */
1618 SVN_ERR(svn_fs_revision_root(&revision_root, fs, after_rev, subpool));
1619@@ -1287,6 +1301,7 @@
1620
1621 /* Go ahead and commit the tree, and destroy the txn object. */
1622 SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
1623+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
1624
1625 /* Carefully validate that tree in the new revision, now. */
1626 SVN_ERR(svn_fs_revision_root(&revision_root, fs, after_rev, subpool));
1627@@ -2707,6 +2722,7 @@
1628
1629 /* Commit the greek tree. */
1630 SVN_ERR(svn_fs_commit_txn(NULL, &new_rev, txn, pool));
1631+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(new_rev));
1632
1633 /* Create new transaction. */
1634 SVN_ERR(svn_fs_begin_txn(&txn, fs, new_rev, pool));
1635@@ -2935,6 +2951,7 @@
1636 SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
1637 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
1638 SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
1639+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
1640
1641 after_commit = apr_time_now();
1642
1643@@ -2989,6 +3006,7 @@
1644 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
1645 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
1646 SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
1647+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
1648 svn_pool_clear(subpool);
1649
1650 /* Modify and commit iota a few times, then test to see if we can
1651@@ -3024,6 +3042,7 @@
1652 SVN_ERR(svn_test__set_file_contents
1653 (txn_root, "iota", iota_contents_2, subpool));
1654 SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
1655+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
1656 svn_pool_clear(subpool);
1657
1658 /* Revision 3. */
1659@@ -3032,6 +3051,7 @@
1660 SVN_ERR(svn_test__set_file_contents
1661 (txn_root, "iota", iota_contents_3, subpool));
1662 SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
1663+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
1664 svn_pool_clear(subpool);
1665
1666 /* Revision 4. */
1667@@ -3040,6 +3060,7 @@
1668 SVN_ERR(svn_test__set_file_contents
1669 (txn_root, "iota", iota_contents_4, subpool));
1670 SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
1671+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
1672 svn_pool_clear(subpool);
1673
1674 /* Revision 5. */
1675@@ -3048,6 +3069,7 @@
1676 SVN_ERR(svn_test__set_file_contents
1677 (txn_root, "iota", iota_contents_5, subpool));
1678 SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
1679+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
1680 svn_pool_clear(subpool);
1681
1682 /* Revision 6. */
1683@@ -3056,6 +3078,7 @@
1684 SVN_ERR(svn_test__set_file_contents
1685 (txn_root, "iota", iota_contents_6, subpool));
1686 SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
1687+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
1688 svn_pool_clear(subpool);
1689
1690 /* Revision 7. */
1691@@ -3064,6 +3087,7 @@
1692 SVN_ERR(svn_test__set_file_contents
1693 (txn_root, "iota", iota_contents_7, subpool));
1694 SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, subpool));
1695+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(rev));
1696 svn_pool_clear(subpool);
1697
1698 /** Now check the full Greek Tree in all of those revisions,
1699@@ -3366,6 +3390,7 @@
1700 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
1701 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
1702 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1703+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1704
1705 /***********************************************************************/
1706 /* REVISION 1 */
1707@@ -3423,6 +3448,7 @@
1708 subpool));
1709 }
1710 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1711+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1712
1713 /***********************************************************************/
1714 /* REVISION 2 */
1715@@ -3474,6 +3500,7 @@
1716 subpool));
1717 }
1718 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1719+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1720
1721 /***********************************************************************/
1722 /* REVISION 3 */
1723@@ -3523,6 +3550,7 @@
1724 SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 2, subpool));
1725 }
1726 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1727+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1728
1729 /***********************************************************************/
1730 /* REVISION 4 */
1731@@ -3699,6 +3727,7 @@
1732 (&wh_func, &wh_baton, txn_root, "bigfile", NULL, NULL, subpool));
1733 SVN_ERR(svn_txdelta_send_string(&contents, wh_func, wh_baton, subpool));
1734 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1735+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1736 SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
1737 checksum_list[youngest_rev] = checksum;
1738 svn_pool_clear(subpool);
1739@@ -3714,6 +3743,7 @@
1740 (&wh_func, &wh_baton, txn_root, "bigfile", NULL, NULL, subpool));
1741 SVN_ERR(svn_txdelta_send_string(&contents, wh_func, wh_baton, subpool));
1742 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1743+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1744 SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
1745 checksum_list[youngest_rev] = checksum;
1746 svn_pool_clear(subpool);
1747@@ -3728,6 +3758,7 @@
1748 (&wh_func, &wh_baton, txn_root, "bigfile", NULL, NULL, subpool));
1749 SVN_ERR(svn_txdelta_send_string(&contents, wh_func, wh_baton, subpool));
1750 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1751+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1752 SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
1753 checksum_list[youngest_rev] = checksum;
1754 svn_pool_clear(subpool);
1755@@ -3744,6 +3775,7 @@
1756 (&wh_func, &wh_baton, txn_root, "bigfile", NULL, NULL, subpool));
1757 SVN_ERR(svn_txdelta_send_string(&contents, wh_func, wh_baton, subpool));
1758 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1759+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1760 SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
1761 checksum_list[youngest_rev] = checksum;
1762 svn_pool_clear(subpool);
1763@@ -3763,6 +3795,7 @@
1764 SVN_ERR(svn_txdelta_send_string
1765 (&contents, wh_func, wh_baton, subpool));
1766 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1767+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1768 SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
1769 checksum_list[youngest_rev] = checksum;
1770 svn_pool_clear(subpool);
1771@@ -3883,6 +3916,7 @@
1772 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
1773 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
1774 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1775+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1776
1777 /* Root node's revision should be the same as YOUNGEST_REV. */
1778 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, subpool));
1779@@ -3904,6 +3938,7 @@
1780 apr_psprintf(subpool, "iota version %d", i + 2), subpool));
1781
1782 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1783+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1784
1785 /* Root node's revision should be the same as YOUNGEST_REV. */
1786 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, subpool));
1787@@ -4018,6 +4053,7 @@
1788
1789 /* Now commit the transaction. */
1790 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1791+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1792
1793 /* Now, we have a new revision, and all paths in it should have a
1794 created rev of 1. Verify this. */
1795@@ -4057,6 +4093,7 @@
1796 SVN_ERR(verify_path_revs(txn_root, path_revs, 20, subpool));
1797 /* commit transaction */
1798 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1799+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1800 /* get a revision root for the new revision */
1801 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, subpool));
1802 /* verify created revs */
1803@@ -4081,6 +4118,7 @@
1804 SVN_ERR(verify_path_revs(txn_root, path_revs, 20, subpool));
1805 /* commit transaction */
1806 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1807+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1808 /* get a revision root for the new revision */
1809 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, subpool));
1810 /* verify created revs */
1811@@ -4147,18 +4185,21 @@
1812 SVN_ERR(svn_fs_make_file(txn_root, "A", subpool));
1813 SVN_ERR(svn_test__set_file_contents(txn_root, "A", "1", subpool));
1814 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1815+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1816 svn_pool_clear(subpool);
1817 /* Revision 2 */
1818 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1819 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
1820 SVN_ERR(svn_test__set_file_contents(txn_root, "A", "2", subpool));
1821 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1822+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1823 svn_pool_clear(subpool);
1824 /* Revision 3 */
1825 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1826 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
1827 SVN_ERR(svn_test__set_file_contents(txn_root, "A", "3", subpool));
1828 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1829+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1830 svn_pool_clear(subpool);
1831 /* Revision 4 */
1832 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1833@@ -4171,6 +4212,7 @@
1834 SVN_ERR(svn_fs_copy(rev_root, "A", txn_root, "C", subpool));
1835 SVN_ERR(svn_test__set_file_contents(txn_root, "C", "4", subpool));
1836 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1837+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1838 svn_pool_clear(subpool);
1839 /* Revision 5 */
1840 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1841@@ -4178,6 +4220,7 @@
1842 SVN_ERR(svn_test__set_file_contents(txn_root, "B", "5", subpool));
1843 SVN_ERR(svn_test__set_file_contents(txn_root, "C", "5", subpool));
1844 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1845+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1846 svn_pool_clear(subpool);
1847 /* Revision 6 */
1848 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1849@@ -4188,6 +4231,7 @@
1850 SVN_ERR(svn_fs_copy(rev_root, "B", txn_root, "D", subpool));
1851 SVN_ERR(svn_test__set_file_contents(txn_root, "D", "5", subpool));
1852 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1853+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1854 svn_pool_clear(subpool);
1855 /* Revision 7 */
1856 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1857@@ -4196,12 +4240,14 @@
1858 SVN_ERR(svn_fs_make_file(txn_root, "E", subpool));
1859 SVN_ERR(svn_test__set_file_contents(txn_root, "E", "7", subpool));
1860 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1861+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1862 svn_pool_clear(subpool);
1863 /* Revision 8 */
1864 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1865 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
1866 SVN_ERR(svn_test__set_file_contents(txn_root, "E", "8", subpool));
1867 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1868+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1869 svn_pool_clear(subpool);
1870 /* Revision 9 */
1871 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1872@@ -4210,12 +4256,14 @@
1873 SVN_ERR(svn_fs_copy(rev_root, "E", txn_root, "F", subpool));
1874 SVN_ERR(svn_test__set_file_contents(txn_root, "F", "9", subpool));
1875 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1876+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1877 svn_pool_clear(subpool);
1878 /* Revision 10 */
1879 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
1880 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
1881 SVN_ERR(svn_test__set_file_contents(txn_root, "F", "10", subpool));
1882 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1883+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1884 svn_pool_clear(subpool);
1885
1886 /*** Step II: Exhaustively verify relationship between all nodes in
1887@@ -4334,6 +4382,7 @@
1888 SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
1889 SVN_ERR(svn_test__create_greek_tree(txn_root, spool));
1890 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
1891+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1892 svn_pool_clear(spool);
1893
1894 /*** Revision 2: Copy A/D/G/rho to A/D/G/rho2. ***/
1895@@ -4342,6 +4391,7 @@
1896 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
1897 SVN_ERR(svn_fs_copy(rev_root, "A/D/G/rho", txn_root, "A/D/G/rho2", spool));
1898 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
1899+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1900 svn_pool_clear(spool);
1901
1902 /*** Revision 3: Copy A/D/G to A/D/G2. ***/
1903@@ -4350,6 +4400,7 @@
1904 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
1905 SVN_ERR(svn_fs_copy(rev_root, "A/D/G", txn_root, "A/D/G2", spool));
1906 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
1907+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1908 svn_pool_clear(spool);
1909
1910 /*** Revision 4: Copy A/D to A/D2. ***/
1911@@ -4358,6 +4409,7 @@
1912 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
1913 SVN_ERR(svn_fs_copy(rev_root, "A/D", txn_root, "A/D2", spool));
1914 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
1915+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1916 svn_pool_clear(spool);
1917
1918 /*** Revision 5: Edit all the rho's! ***/
1919@@ -4381,6 +4433,7 @@
1920 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D2/G2/rho2",
1921 "Edited text.", spool));
1922 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
1923+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1924
1925 svn_pool_destroy(spool);
1926
1927@@ -4816,6 +4869,7 @@
1928 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
1929 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
1930 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1931+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1932 svn_pool_clear(subpool);
1933
1934 /* Revision 2: Modify A/D/H/chi and A/B/E/alpha. */
1935@@ -4824,6 +4878,7 @@
1936 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "2", subpool));
1937 SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/alpha", "2", subpool));
1938 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1939+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1940 svn_pool_clear(subpool);
1941
1942 /* Revision 3: Copy A/D to A/D2, and create A/D2/floop new. */
1943@@ -4833,6 +4888,7 @@
1944 SVN_ERR(svn_fs_copy(root, "A/D", txn_root, "A/D2", subpool));
1945 SVN_ERR(svn_fs_make_file(txn_root, "A/D2/floop", subpool));
1946 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1947+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1948 svn_pool_clear(subpool);
1949
1950 /* Revision 4: Modify A/D/H/chi and A/D2/H/chi. */
1951@@ -4841,6 +4897,7 @@
1952 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "4", subpool));
1953 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D2/H/chi", "4", subpool));
1954 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1955+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1956 svn_pool_clear(subpool);
1957
1958 /* Revision 5: Delete A/D2/G, add A/B/E/alfalfa. */
1959@@ -4849,6 +4906,7 @@
1960 SVN_ERR(svn_fs_delete(txn_root, "A/D2/G", subpool));
1961 SVN_ERR(svn_fs_make_file(txn_root, "A/B/E/alfalfa", subpool));
1962 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1963+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1964 svn_pool_clear(subpool);
1965
1966 /* Revision 6: Restore A/D2/G (from version 4). */
1967@@ -4857,6 +4915,7 @@
1968 SVN_ERR(svn_fs_revision_root(&root, fs, 4, subpool));
1969 SVN_ERR(svn_fs_copy(root, "A/D2/G", txn_root, "A/D2/G", subpool));
1970 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1971+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1972 svn_pool_clear(subpool);
1973
1974 /* Revision 7: Move A/D2 to A/D (replacing it), Add a new file A/D2,
1975@@ -4870,6 +4929,7 @@
1976 SVN_ERR(svn_fs_make_file(txn_root, "A/D2", subpool));
1977 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/floop", "7", subpool));
1978 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
1979+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
1980 svn_pool_clear(subpool);
1981
1982 /* Now test some origin revisions. */
1983
1984=== modified file 'subversion/tests/libsvn_fs/locks-test.c'
1985--- subversion/tests/libsvn_fs/locks-test.c 2009-11-17 02:16:23 +0000
1986+++ subversion/tests/libsvn_fs/locks-test.c 2011-03-22 11:15:25 +0000
1987@@ -121,6 +121,7 @@
1988 /* Create the greek tree and commit it. */
1989 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
1990 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
1991+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
1992
1993 /* We are now 'bubba'. */
1994 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
1995@@ -167,6 +168,7 @@
1996 /* Create the greek tree and commit it. */
1997 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
1998 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
1999+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2000
2001 /* We are now 'bubba'. */
2002 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2003@@ -217,6 +219,7 @@
2004 /* Create the greek tree and commit it. */
2005 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2006 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2007+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2008
2009 /* We are now 'bubba'. */
2010 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2011@@ -276,6 +279,7 @@
2012 /* Create the greek tree and commit it. */
2013 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2014 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2015+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2016
2017 /* We are now 'bubba'. */
2018 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2019@@ -411,6 +415,7 @@
2020 /* Create the greek tree and commit it. */
2021 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2022 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2023+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2024
2025 /* We are now 'bubba'. */
2026 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2027@@ -469,6 +474,7 @@
2028 /* Create the greek tree and commit it. */
2029 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2030 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2031+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2032
2033 /* We are now 'bubba'. */
2034 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2035@@ -492,6 +498,7 @@
2036
2037 /* Try to commit the file change. Should fail, because we're nobody. */
2038 err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
2039+ SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
2040 if (! err)
2041 return svn_error_create
2042 (SVN_ERR_TEST_FAILED, NULL,
2043@@ -504,6 +511,7 @@
2044
2045 /* Try to commit the file change. Should fail, because we're 'hortense'. */
2046 err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
2047+ SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
2048 if (! err)
2049 return svn_error_create
2050 (SVN_ERR_TEST_FAILED, NULL,
2051@@ -516,6 +524,7 @@
2052
2053 /* Try to commit the file change. Should fail, because there's no token. */
2054 err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
2055+ SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
2056 if (! err)
2057 return svn_error_create
2058 (SVN_ERR_TEST_FAILED, NULL,
2059@@ -527,6 +536,7 @@
2060
2061 /* Commit should now succeed. */
2062 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2063+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2064
2065 return SVN_NO_ERROR;
2066 }
2067@@ -566,6 +576,7 @@
2068 /* Create the greek tree and commit it. */
2069 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2070 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2071+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2072
2073 /* Make a new transaction and delete "/A" */
2074 SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
2075@@ -584,6 +595,7 @@
2076 /* Try to commit the transaction. Should fail, because a child of
2077 the deleted directory is locked by someone else. */
2078 err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
2079+ SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
2080 if (! err)
2081 return svn_error_create
2082 (SVN_ERR_TEST_FAILED, NULL,
2083@@ -594,6 +606,7 @@
2084 SVN_ERR(svn_fs_set_access(fs, access));
2085 SVN_ERR(svn_fs_access_add_lock_token(access, mylock->token));
2086 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2087+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2088
2089 return SVN_NO_ERROR;
2090 }
2091@@ -630,6 +643,7 @@
2092 /* Create the greek tree and commit it. */
2093 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2094 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2095+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2096
2097 /* Become 'bubba' and lock "/A/D/G/rho". */
2098 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2099@@ -650,6 +664,7 @@
2100 /* Commit should succeed; this means we're doing a non-recursive
2101 lock-check on directory, rather than a recursive one. */
2102 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2103+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2104
2105 return SVN_NO_ERROR;
2106 }
2107@@ -687,6 +702,7 @@
2108 /* Create the greek tree and commit it. */
2109 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2110 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2111+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2112
2113 /* Become 'bubba' and lock imaginary path "/A/D/G2/blooga". */
2114 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2115@@ -824,6 +840,7 @@
2116 /* Create the greek tree and commit it. */
2117 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2118 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2119+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2120
2121 /* Make a new transaction and change rho. */
2122 SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
2123@@ -846,6 +863,7 @@
2124 /* Try to commit. Should fail because we're 'nobody', and the lock
2125 hasn't expired yet. */
2126 err = svn_fs_commit_txn(&conflict, &newrev, txn, pool);
2127+ SVN_TEST_ASSERT(! SVN_IS_VALID_REVNUM(newrev));
2128 if (! err)
2129 return svn_error_create
2130 (SVN_ERR_TEST_FAILED, NULL,
2131@@ -882,6 +900,7 @@
2132 }
2133
2134 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2135+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2136
2137 return SVN_NO_ERROR;
2138 }
2139@@ -915,6 +934,7 @@
2140 /* Create the greek tree and commit it. */
2141 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2142 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2143+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2144
2145 /* Become 'bubba' and lock "/A/D/G/rho". */
2146 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2147@@ -1002,6 +1022,7 @@
2148 /* Create the greek tree and commit it. */
2149 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2150 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2151+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2152
2153 /* Commit a small change to /A/D/G/rho, creating revision 2. */
2154 SVN_ERR(svn_fs_begin_txn2(&txn, fs, newrev, SVN_FS_TXN_CHECK_LOCKS, pool));
2155@@ -1009,6 +1030,7 @@
2156 SVN_ERR(svn_test__set_file_contents(txn_root, "/A/D/G/rho",
2157 "new contents", pool));
2158 SVN_ERR(svn_fs_commit_txn(&conflict, &newrev, txn, pool));
2159+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(newrev));
2160
2161 /* We are now 'bubba'. */
2162 SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
2163
2164=== modified file 'subversion/tests/libsvn_fs_base/changes-test.c'
2165--- subversion/tests/libsvn_fs_base/changes-test.c 2011-01-05 22:45:51 +0000
2166+++ subversion/tests/libsvn_fs_base/changes-test.c 2011-03-22 11:15:25 +0000
2167@@ -595,6 +595,7 @@
2168 SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 5, subpool));
2169 }
2170 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
2171+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2172 svn_pool_clear(subpool);
2173
2174 /*** REVISION 2: Delete and add some stuff, non-depth-first. ***/
2175@@ -615,6 +616,7 @@
2176 SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 7, subpool));
2177 }
2178 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
2179+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2180 svn_pool_clear(subpool);
2181
2182 /*** TEST: We should have only three changes, the deletion of 'file1'
2183@@ -663,6 +665,7 @@
2184 SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 5, subpool));
2185 }
2186 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
2187+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2188 svn_pool_clear(subpool);
2189
2190 /*** REVISION 4: Do the same stuff as in revision 2, but use a copy
2191@@ -687,6 +690,7 @@
2192 SVN_ERR(svn_fs_make_dir(txn_root, "dir4", subpool));
2193 }
2194 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
2195+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2196 svn_pool_clear(subpool);
2197
2198 /*** TEST: We should have only three changes, the deletion of 'file1'
2199
2200=== modified file 'subversion/tests/libsvn_fs_base/fs-base-test.c'
2201--- subversion/tests/libsvn_fs_base/fs-base-test.c 2009-11-17 02:16:23 +0000
2202+++ subversion/tests/libsvn_fs_base/fs-base-test.c 2011-03-22 11:15:25 +0000
2203@@ -476,6 +476,7 @@
2204 SVN_ERR(svn_fs_begin_txn(&txn4, fs, 0, pool));
2205 SVN_ERR(svn_fs_txn_name(&txn4_name, txn4, pool));
2206 SVN_ERR(svn_fs_commit_txn(&conflict, &new_rev, txn4, pool));
2207+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(new_rev));
2208 err = svn_fs_abort_txn(txn4, pool);
2209 if (! err)
2210 return svn_error_create
2211@@ -874,6 +875,7 @@
2212
2213 /* Commit the greek tree. */
2214 SVN_ERR(svn_fs_commit_txn(NULL, &new_rev, txn, pool));
2215+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(new_rev));
2216
2217 /* Create new transaction. */
2218 SVN_ERR(svn_fs_begin_txn(&txn, fs, new_rev, pool));
2219@@ -1208,6 +1210,7 @@
2220 SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
2221 SVN_ERR(svn_test__create_greek_tree(txn_root, spool));
2222 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2223+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2224 svn_pool_clear(spool);
2225
2226 /*** Revision 2: Copy A/D to A/D3 ***/
2227@@ -1216,6 +1219,7 @@
2228 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
2229 SVN_ERR(svn_fs_copy(rev_root, "A/D", txn_root, "A/D3", spool));
2230 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2231+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2232 svn_pool_clear(spool);
2233
2234 /*** Revision 3: Copy A/D/G to A/D/G2 ***/
2235@@ -1224,6 +1228,7 @@
2236 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
2237 SVN_ERR(svn_fs_copy(rev_root, "A/D/G", txn_root, "A/D/G2", spool));
2238 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2239+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2240 svn_pool_clear(spool);
2241
2242 /*** Revision 4: Copy A/D to A/D2 and create up and I in the existing
2243@@ -1239,6 +1244,7 @@
2244 SVN_ERR(svn_fs_make_dir(txn_root, "A/D2/G2/I", spool));
2245 SVN_ERR(svn_fs_make_file(txn_root, "A/D2/G2/up", spool));
2246 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2247+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2248 svn_pool_clear(spool);
2249
2250 /*** Revision 5: Create A/D3/down and A/D3/J ***/
2251@@ -1247,6 +1253,7 @@
2252 SVN_ERR(svn_fs_make_file(txn_root, "A/D3/down", spool));
2253 SVN_ERR(svn_fs_make_dir(txn_root, "A/D3/J", spool));
2254 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2255+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2256 svn_pool_clear(spool);
2257
2258 {
2259@@ -1338,6 +1345,7 @@
2260 SVN_ERR(svn_fs_make_file(txn_root, "f", subpool));
2261 SVN_ERR(svn_test__set_file_contents(txn_root, "f", f->data, subpool));
2262 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
2263+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2264 SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
2265 svn_pool_clear(subpool);
2266
2267@@ -1352,6 +1360,7 @@
2268 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2269 SVN_ERR(svn_test__set_file_contents(txn_root, "f", f->data, subpool));
2270 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
2271+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2272 SVN_ERR(svn_fs_deltify_revision(fs, youngest_rev, subpool));
2273 svn_pool_clear(subpool);
2274 }
2275@@ -1416,6 +1425,7 @@
2276 SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
2277 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2278 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, pool));
2279+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2280
2281 /* In a transaction, copy A to Z. */
2282 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, pool));
2283@@ -1491,6 +1501,7 @@
2284 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2285 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2286 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
2287+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2288 svn_pool_clear(subpool);
2289
2290 /* Revision 2: Start to change "iota", but don't complete the work. */
2291@@ -1507,6 +1518,7 @@
2292 testing that misbehaving callers don't introduce more damage to
2293 the repository than they have to. */
2294 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, subpool));
2295+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2296 svn_pool_clear(subpool);
2297
2298 /* Fetch changed paths for the youngest revision. We should find none. */
2299
2300=== modified file 'subversion/tests/libsvn_fs_fs/fs-pack-test.c'
2301--- subversion/tests/libsvn_fs_fs/fs-pack-test.c 2010-06-21 11:53:14 +0000
2302+++ subversion/tests/libsvn_fs_fs/fs-pack-test.c 2011-03-22 11:15:25 +0000
2303@@ -132,6 +132,7 @@
2304 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2305 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2306 SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
2307+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
2308
2309 /* Revisions 2-11: A bunch of random changes. */
2310 iterpool = svn_pool_create(subpool);
2311@@ -145,6 +146,7 @@
2312 iterpool),
2313 iterpool));
2314 SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, iterpool));
2315+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
2316 }
2317 svn_pool_destroy(iterpool);
2318 svn_pool_destroy(subpool);
2319@@ -363,6 +365,7 @@
2320 "How much better is it to get wisdom than gold! and to get "
2321 "understanding rather to be chosen than silver!", pool));
2322 SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, pool));
2323+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
2324
2325 return SVN_NO_ERROR;
2326 }
2327
2328=== modified file 'subversion/tests/libsvn_repos/repos-test.c'
2329--- subversion/tests/libsvn_repos/repos-test.c 2009-11-17 02:16:23 +0000
2330+++ subversion/tests/libsvn_repos/repos-test.c 2011-03-22 11:15:25 +0000
2331@@ -91,6 +91,7 @@
2332 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2333 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2334 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2335+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2336
2337 /***********************************************************************/
2338 /* REVISION 1 */
2339@@ -152,6 +153,7 @@
2340 subpool));
2341 }
2342 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2343+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2344
2345 /***********************************************************************/
2346 /* REVISION 2 */
2347@@ -206,6 +208,7 @@
2348 SVN_ERR(svn_test__txn_script_exec(txn_root, script_entries, 4, subpool));
2349 }
2350 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2351+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2352
2353 /***********************************************************************/
2354 /* REVISION 3 */
2355@@ -259,6 +262,7 @@
2356 txn_root, "A/B/epsilon",
2357 subpool));
2358 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2359+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2360
2361 /***********************************************************************/
2362 /* REVISION 4 */
2363@@ -398,6 +402,7 @@
2364 /* Create and commit the greek tree. */
2365 SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
2366 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
2367+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2368
2369 /* Now, commit again, this time after copying a directory, and then
2370 deleting some paths under that directory. */
2371@@ -408,6 +413,7 @@
2372 SVN_ERR(svn_fs_delete(txn_root, "Z/D/G/rho", pool));
2373 SVN_ERR(svn_fs_delete(txn_root, "Z/D/H", pool));
2374 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
2375+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2376
2377 /* Now, we run the node_tree editor code, and see that a) it doesn't
2378 bomb out, and b) that our nodes are all good. */
2379@@ -545,6 +551,7 @@
2380 SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
2381 SVN_ERR(svn_test__create_greek_tree(txn_root, spool));
2382 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2383+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2384 svn_pool_clear(spool);
2385
2386 /* Revision 2 - mu, alpha, omega */
2387@@ -554,6 +561,7 @@
2388 SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/alpha", "2", spool));
2389 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/omega", "2", spool));
2390 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2391+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2392 svn_pool_clear(spool);
2393
2394 /* Revision 3 - iota, lambda, psi, omega */
2395@@ -564,6 +572,7 @@
2396 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/psi", "3", spool));
2397 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/omega", "3", spool));
2398 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2399+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2400 svn_pool_clear(spool);
2401
2402 /* Revision 4 - iota, beta, gamma, pi, rho */
2403@@ -575,6 +584,7 @@
2404 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/G/pi", "4", spool));
2405 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/G/rho", "4", spool));
2406 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2407+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2408 svn_pool_clear(spool);
2409
2410 /* Revision 5 - mu, alpha, tau, chi */
2411@@ -585,6 +595,7 @@
2412 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/G/tau", "5", spool));
2413 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "5", spool));
2414 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2415+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2416 svn_pool_clear(spool);
2417
2418 /* Revision 6 - move A/D to A/Z */
2419@@ -594,6 +605,7 @@
2420 SVN_ERR(svn_fs_copy(rev_root, "A/D", txn_root, "A/Z", spool));
2421 SVN_ERR(svn_fs_delete(txn_root, "A/D", spool));
2422 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2423+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2424 svn_pool_clear(spool);
2425
2426 /* Revision 7 - edit A/Z/G/pi */
2427@@ -601,6 +613,7 @@
2428 SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
2429 SVN_ERR(svn_test__set_file_contents(txn_root, "A/Z/G/pi", "7", spool));
2430 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2431+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2432 svn_pool_clear(spool);
2433
2434 /* Revision 8 - move A/Z back to A/D, edit iota */
2435@@ -611,6 +624,7 @@
2436 SVN_ERR(svn_fs_delete(txn_root, "A/Z", spool));
2437 SVN_ERR(svn_test__set_file_contents(txn_root, "iota", "8", spool));
2438 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2439+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2440 svn_pool_clear(spool);
2441
2442 /* Revision 9 - copy A/D/G to A/D/Q */
2443@@ -619,6 +633,7 @@
2444 SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, spool));
2445 SVN_ERR(svn_fs_copy(rev_root, "A/D/G", txn_root, "A/D/Q", spool));
2446 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2447+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2448 svn_pool_clear(spool);
2449
2450 /* Revision 10 - edit A/D/Q/pi and A/D/Q/rho */
2451@@ -627,6 +642,7 @@
2452 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/Q/pi", "10", spool));
2453 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/Q/rho", "10", spool));
2454 SVN_ERR(svn_fs_commit_txn(NULL, &youngest_rev, txn, spool));
2455+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2456 svn_pool_clear(spool);
2457
2458 /* Now, it's time to verify our results. */
2459@@ -793,6 +809,7 @@
2460 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2461 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2462 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2463+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2464 svn_pool_clear(subpool);
2465
2466 /* Move a file. Rev 2. */
2467@@ -801,6 +818,7 @@
2468 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2469 SVN_ERR(svn_fs_copy(root, "/A/mu", txn_root, "/mu.new", subpool));
2470 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2471+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2472 {
2473 struct locations_info info[] =
2474 {
2475@@ -848,6 +866,7 @@
2476 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2477 SVN_ERR(svn_fs_make_dir(txn_root, "/foo", subpool));
2478 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2479+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2480 svn_pool_clear(subpool);
2481
2482 /* Revision 2: Copy /foo to /bar, and add /bar/baz */
2483@@ -857,6 +876,7 @@
2484 SVN_ERR(svn_fs_copy(root, "/foo", txn_root, "/bar", subpool));
2485 SVN_ERR(svn_fs_make_file(txn_root, "/bar/baz", subpool));
2486 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2487+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2488 svn_pool_clear(subpool);
2489
2490 /* Revision 3: Modify /bar/baz */
2491@@ -864,6 +884,7 @@
2492 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2493 SVN_ERR(svn_test__set_file_contents(txn_root, "/bar/baz", "brrt", subpool));
2494 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2495+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2496 svn_pool_clear(subpool);
2497
2498 /* Revision 4: Modify /bar/baz again */
2499@@ -871,6 +892,7 @@
2500 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2501 SVN_ERR(svn_test__set_file_contents(txn_root, "/bar/baz", "bzzz", subpool));
2502 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2503+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2504 svn_pool_clear(subpool);
2505
2506 /* Now, check locations. */
2507@@ -1061,6 +1083,7 @@
2508 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2509 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2510 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2511+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2512 svn_pool_clear(subpool);
2513
2514 SVN_ERR(svn_fs_create_access(&fs_access, "user1", pool));
2515@@ -1413,6 +1436,7 @@
2516 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2517 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2518 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2519+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2520
2521 /* Load the authz rules for the greek tree. */
2522 authz_contents =
2523@@ -1631,6 +1655,7 @@
2524 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2525 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2526 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2527+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2528
2529 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
2530 SVN_ERR(svn_fs_txn_name(&txn_name, txn, subpool));
2531@@ -1817,6 +1842,7 @@
2532 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2533 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2534 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2535+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2536 svn_pool_clear(subpool);
2537
2538 /* Revision 2: Modify A/D/H/chi and A/B/E/alpha. */
2539@@ -1825,6 +1851,7 @@
2540 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "2", subpool));
2541 SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/alpha", "2", subpool));
2542 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2543+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2544 svn_pool_clear(subpool);
2545
2546 /* Revision 3: Copy A/D to A/D2. */
2547@@ -1833,6 +1860,7 @@
2548 SVN_ERR(svn_fs_revision_root(&root, fs, youngest_rev, subpool));
2549 SVN_ERR(svn_fs_copy(root, "A/D", txn_root, "A/D2", subpool));
2550 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2551+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2552 svn_pool_clear(subpool);
2553
2554 /* Revision 4: Modify A/D/H/chi and A/D2/H/chi. */
2555@@ -1841,6 +1869,7 @@
2556 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D/H/chi", "4", subpool));
2557 SVN_ERR(svn_test__set_file_contents(txn_root, "A/D2/H/chi", "4", subpool));
2558 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2559+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2560 svn_pool_clear(subpool);
2561
2562 /* Revision 5: Delete A/D2/G. */
2563@@ -1848,6 +1877,7 @@
2564 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2565 SVN_ERR(svn_fs_delete(txn_root, "A/D2/G", subpool));
2566 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2567+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2568 svn_pool_clear(subpool);
2569
2570 /* Revision 6: Restore A/D2/G (from version 4). */
2571@@ -1856,6 +1886,7 @@
2572 SVN_ERR(svn_fs_revision_root(&root, fs, 4, subpool));
2573 SVN_ERR(svn_fs_copy(root, "A/D2/G", txn_root, "A/D2/G", subpool));
2574 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2575+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2576 svn_pool_clear(subpool);
2577
2578 /* Revision 7: Move A/D2 to A/D (replacing it). */
2579@@ -1866,6 +1897,7 @@
2580 SVN_ERR(svn_fs_copy(root, "A/D2", txn_root, "A/D", subpool));
2581 SVN_ERR(svn_fs_delete(txn_root, "A/D2", subpool));
2582 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2583+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2584 svn_pool_clear(subpool);
2585
2586 /* Check locations for /@HEAD. */
2587@@ -2010,6 +2042,7 @@
2588 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2589 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2590 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2591+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2592 svn_pool_clear(subpool);
2593
2594 /* Revision 2: make a bunch of changes */
2595@@ -2032,6 +2065,7 @@
2596 subpool));
2597 }
2598 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2599+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2600 svn_pool_clear(subpool);
2601
2602 /* Confirm the contents of r2. */
2603@@ -2369,6 +2403,7 @@
2604 SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
2605 SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
2606 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2607+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2608
2609 /* Revision 2: Tweak A/mu and A/B/E/alpha. */
2610 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
2611@@ -2378,6 +2413,7 @@
2612 SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/alpha",
2613 "Revision 2", subpool));
2614 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2615+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2616
2617 /* Revision 3: Tweak A/B/E/alpha and A/B/E/beta. */
2618 SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
2619@@ -2387,6 +2423,7 @@
2620 SVN_ERR(svn_test__set_file_contents(txn_root, "A/B/E/beta",
2621 "Revision 3", subpool));
2622 SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
2623+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
2624
2625
2626 for (start = 0; start <= youngest_rev; start++)
2627
2628=== modified file 'subversion/tests/svn_test.h'
2629--- subversion/tests/svn_test.h 2009-11-17 02:16:23 +0000
2630+++ subversion/tests/svn_test.h 2011-03-22 11:15:25 +0000
2631@@ -35,6 +35,17 @@
2632 #endif /* __cplusplus */
2633
2634
2635
2636+/** Handy macro to test a condition, returning SVN_ERR_TEST_FAILED if FALSE
2637+ *
2638+ * This macro should be used in place of SVN_ERR_ASSERT() since we don't
2639+ * want to core-dump the test.
2640+ */
2641+#define SVN_TEST_ASSERT(expr) \
2642+ do { \
2643+ if (!(expr)) \
2644+ return svn_error_create(SVN_ERR_TEST_FAILED, NULL, #expr); \
2645+ } while (0)
2646+
2647 /* Baton for any arguments that need to be passed from main() to svn
2648 * test functions.
2649 */

Subscribers

People subscribed via source and target branches

to all changes: