static svn_error_t * dir_close(void *dir_baton, apr_pool_t *scratch_pool) { struct dir_baton_t *db = dir_baton; /*struct edit_baton_t *eb = db->eb;*/ SVN_ERR(ensure_added(db, scratch_pool)); SVN_ERR(maybe_done(db)); return SVN_NO_ERROR; }
/* Releases the directory baton if there are no more users */ static svn_error_t * maybe_done(struct dir_baton_t *db) { db->users--; if (db->users == 0) { struct dir_baton_t *pb = db->pb; svn_pool_clear(db->pool); if (pb) SVN_ERR(maybe_done(pb)); } return SVN_NO_ERROR; }
static svn_error_t * file_close(void *file_baton, const char *text_checksum, apr_pool_t *scratch_pool) { struct file_baton_t *fb = file_baton; struct edit_baton_t *eb = fb->eb; struct dir_baton_t *pb = fb->pb; SVN_ERR(ensure_added(pb, fb->pool)); if (text_checksum) { svn_checksum_t *expected_checksum; svn_checksum_t *actual_checksum; SVN_ERR(svn_checksum_parse_hex(&expected_checksum, svn_checksum_md5, text_checksum, fb->pool)); actual_checksum = svn_checksum__from_digest_md5(fb->digest, fb->pool); if (! svn_checksum_match(expected_checksum, actual_checksum)) return svn_error_trace( svn_checksum_mismatch_err(expected_checksum, actual_checksum, fb->pool, _("Checksum mismatch for '%s'"), svn_dirent_local_style( fb->local_abspath, fb->pool))); } SVN_ERR(svn_wc_add_from_disk3(eb->wc_ctx, fb->local_abspath, fb->properties, TRUE /* skip checks */, eb->notify_func, eb->notify_baton, fb->pool)); svn_pool_destroy(fb->pool); SVN_ERR(maybe_done(pb)); return SVN_NO_ERROR; }
static svn_error_t * file_close(void *file_baton, const char *text_checksum, apr_pool_t *scratch_pool) { struct file_baton_t *fb = file_baton; struct dir_baton_t *pb = fb->pb; if (fb->writing_file) SVN_ERR(svn_io_file_rename2(fb->writing_file, fb->local_abspath, FALSE /*flush*/, scratch_pool)); if (text_checksum) { svn_checksum_t *expected_checksum; svn_checksum_t *actual_checksum; SVN_ERR(svn_checksum_parse_hex(&expected_checksum, svn_checksum_md5, text_checksum, fb->pool)); actual_checksum = svn_checksum__from_digest_md5(fb->digest, fb->pool); if (! svn_checksum_match(expected_checksum, actual_checksum)) return svn_error_trace( svn_checksum_mismatch_err(expected_checksum, actual_checksum, fb->pool, _("Checksum mismatch for '%s'"), svn_dirent_local_style( fb->local_abspath, fb->pool))); } SVN_ERR(ensure_added_file(fb, fb->pool)); svn_pool_destroy(fb->pool); SVN_ERR(maybe_done(pb)); return SVN_NO_ERROR; }