C. Michael Pilato wrote on Tue, Dec 21, 2010 at 14:40:01 -0500: > On 12/21/2010 02:08 PM, Daniel Shahaf wrote: > > Blair Zajac wrote on Tue, Dec 21, 2010 at 10:55:37 -0800: > >> On 12/21/10 10:40 AM, Daniel Shahaf wrote: > >>> Blair Zajac wrote on Tue, Dec 21, 2010 at 10:16:56 -0800: > >>>> 4) In svn_repos_fs_commit_txn(), which order should errors be composed? > >>>> svn_fs_commit_txn()'s error as the parent followed by the > >>>> SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED error as a child? This seems to be > >>>> the standard ordering of chained errors. On the other hand, it makes it > >>>> harder to find a post-commit script error. > >>> > >>> Actually, it will make it impossible to detect post-commit errors over > >>> ra_dav, since that RA layer marshals only the outermost error code in an > >>> error chain. > >> > >> ra_dav already checks for SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED, it could > >> use svn_error_has_cause() to find it. > > > > How can it do that if only the topmost error code is marshalled? > > > > I first discovered that ra_dav only marshals the outermost error code > > (and its error message, but nothing else of the chain) when I worked on > > the atomic-revprops branch. In dev@ archives there should be some > > discussions of how error chain marshalling might be implemented, but > > eventually I solved the problem differently for that branch (by using > > another error-signalling mechanism). > > > > ra_svn marshals full error chains. > > Can we fix this? Can we introduce a new error code > SVN_ERR_RA_DAV_ERROR_CHAIN which means, "the descriptive message of this > error contains a skel which, when parsed, carries a whole chain of real > errors? Then we have the client indicate at capabilities-exchange time that > it can handle that kind of return. >
+0. (not a +1 because I don't know the ra_dav protocol well enough) Instead of skels, we could re-use svn_ra_svn_write_cmd_failure() and svn_ra_svn__handle_failure_status(), though. > -- > C. Michael Pilato <cmpil...@collab.net> > CollabNet <> www.collab.net <> Distributed Development On Demand >