> -----Original Message----- > From: Branko Čibej [mailto:br...@apache.org] > Sent: dinsdag 24 november 2015 06:13 > To: users@subversion.apache.org > Subject: Re: svn_repos_fs_commit_txn error > > On 23.11.2015 21:01, Ren Wang wrote: > > I got an error for creating a new directory to the repository. Strange to me > > is that enve the code failed at the svn_repos_fs_commit_txn, but the > > directory got created: > > > > > > > > > > > > 1) Open repository, repos > > > > 2) Get the latest revision, youngest > > > > 3) Do the following: > > > > svn_fs_txn_t *txn; > > > > svn_fs_root_t *txn_root; > > > > apr_pool_t *subpool = svn_pool_create(pool); > > > > SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, &repos, > youngest_rev, > > "UncleYinan", "log msg", subpool)); > > > > SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool)); > > > > SVN_ERR(svn_fs_make_dir(txn_root, directoryPath, subpool)); > > > > SVN_ERR(svn_repos_fs_commit_txn(NULL, c->repos, &youngest_rev, txn, > > subpool)); -- failed here
This may be 100% expected... see the documentation of this function. Especially the part [[ * A successful commit is indicated by a valid revision value in @a * *new_rev, not if svn_fs_commit_txn() returns an error, which can * occur during its post commit FS processing. If the transaction was * not committed, then return the associated error and do not execute * the post-commit hook. ]] For completeness I copied the documentation from svn_repos.h here: /** Like svn_fs_commit_txn(), but invoke the @a repos' pre- and * post-commit hooks around the commit. Use @a pool for any necessary * allocations. * * If the pre-commit hook fails, do not attempt to commit the * transaction and throw the original error to the caller. * * A successful commit is indicated by a valid revision value in @a * *new_rev, not if svn_fs_commit_txn() returns an error, which can * occur during its post commit FS processing. If the transaction was * not committed, then return the associated error and do not execute * the post-commit hook. * * If the commit succeeds the post-commit hook is executed. If the * post-commit hook returns an error, always wrap it with * SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED; this allows the caller to * find the post-commit hook error in the returned error chain. If * both svn_fs_commit_txn() and the post-commit hook return errors, * then svn_fs_commit_txn()'s error is the parent error and the * SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED wrapped error is the child * error. * * @a conflict_p, @a new_rev, and @a txn are as in svn_fs_commit_txn(). */ svn_error_t * svn_repos_fs_commit_txn(const char **conflict_p, svn_repos_t *repos, svn_revnum_t *new_rev, svn_fs_txn_t *txn, apr_pool_t *pool); -- Bert