The thing to notice is at the end, where it prints "Aborted", but then a grep of the C code shows there is no such string anywhere! [Okay, I admit it: now I'm just re-submitting in hopes of getting paste number 800000 ] $ svn diff Index: subversion/include/svn_types.h =================================================================== --- subversion/include/svn_types.h (revision 28091) +++ subversion/include/svn_types.h (working copy) @@ -238,14 +238,13 @@ svn_depth_unknown = -2, /* Exclude (i.e., don't descend into) directory D. */ - /* ### In Subversion 1.5, svn_depth_exclude is *not* supported - ### anywhere in the client-side (libsvn_wc/libsvn_client/etc) - ### code; it is only supported as an argument to set_path - ### functions in the ra and repos reporters. (This will enable - ### future versions of Subversion to run updates (etc) against - ### 1.5 servers with proper svn_depth_exclude behavior, once we - ### get a chance to implement client-side support for - ### svn_depth_exclude.) + /* NOTE: In Subversion 1.5, svn_depth_exclude is *not* supported + anywhere in the client-side (libsvn_wc/libsvn_client/etc) code; + it is only supported as an argument to set_path functions in the + ra and repos reporters. (This will enable future versions of + Subversion to run updates, etc, against 1.5 servers with proper + svn_depth_exclude behavior, once we get a chance to implement + client-side support for svn_depth_exclude.) */ svn_depth_exclude = -1, Index: subversion/tests/libsvn_repos/repos-test.c =================================================================== --- subversion/tests/libsvn_repos/repos-test.c (revision 28091) +++ subversion/tests/libsvn_repos/repos-test.c (working copy) @@ -2003,6 +2003,7 @@ svn_revnum_t youngest_rev; const svn_delta_editor_t *editor; void *edit_baton, *report_baton; + svn_error_t *err; *msg = "test reporter and svn_depth_exclude"; @@ -2126,6 +2127,45 @@ svn_pool_clear(subpool); } + /* Expect an error on an illegal report for r1 to r2. The illegal + sequence is that we exclude A/D, then set_path() below A/D. */ + SVN_ERR(svn_fs_begin_txn(&txn, fs, 1, subpool)); + SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool)); + SVN_ERR(dir_delta_get_editor(&editor, &edit_baton, fs, + txn_root, "", subpool)); + + SVN_ERR(svn_repos_begin_report2(&report_baton, 2, repos, "/", "", NULL, + TRUE, svn_depth_infinity, FALSE, FALSE, + editor, edit_baton, NULL, NULL, subpool)); + SVN_ERR(svn_repos_set_path3(report_baton, "", 1, + svn_depth_infinity, + FALSE, NULL, subpool)); + SVN_ERR(svn_repos_set_path3(report_baton, "iota", SVN_INVALID_REVNUM, + svn_depth_exclude, + FALSE, NULL, subpool)); + SVN_ERR(svn_repos_set_path3(report_baton, "A/D", SVN_INVALID_REVNUM, + svn_depth_exclude, + FALSE, NULL, subpool)); + /* This is the illegal call, since A/D was excluded above. This + call itself will not error, but finish_report() will. */ + SVN_ERR(svn_repos_set_path3(report_baton, "A/D/G/pi", + SVN_INVALID_REVNUM, + svn_depth_infinity, + FALSE, NULL, subpool)); + err = svn_repos_finish_report(report_baton, subpool); + if (! err) + { + return svn_error_createf + (SVN_ERR_TEST_FAILED, NULL, + "Illegal report of \"A/D/G/pi\" did not error as expected"); + } + else if (err->apr_err != SVN_ERR_FS_NOT_FOUND) + { + return svn_error_createf + (SVN_ERR_TEST_FAILED, err, + "Illegal report of \"A/D/G/pi\" got wrong kind of error:"); + } + /* Clean up after ourselves. */ svn_error_clear(svn_fs_abort_txn(txn, subpool)); $ subversion/tests/libsvn_repos/repos-test 11 PASS: lt-repos-test 11: test reporter and svn_depth_exclude Aborted $ find . -name "*.[ch]" -print | xargs grep Aborted $