svn_error_t * svn_repos_fs_change_rev_prop3(svn_repos_t *repos, svn_revnum_t rev, const char *author, const char *name, const svn_string_t *new_value, svn_boolean_t use_pre_revprop_change_hook, svn_boolean_t use_post_revprop_change_hook, svn_repos_authz_func_t authz_read_func, void *authz_read_baton, apr_pool_t *pool) { svn_string_t *old_value; svn_repos_revision_access_level_t readability; char action; SVN_ERR(svn_repos_check_revision_access(&readability, repos, rev, authz_read_func, authz_read_baton, pool)); if (readability == svn_repos_revision_access_full) { SVN_ERR(validate_prop(name, new_value, pool)); SVN_ERR(svn_fs_revision_prop(&old_value, repos->fs, rev, name, pool)); if (! new_value) action = 'D'; else if (! old_value) action = 'A'; else action = 'M'; if (use_pre_revprop_change_hook) SVN_ERR(svn_repos__hooks_pre_revprop_change(repos, rev, author, name, new_value, action, pool)); SVN_ERR(svn_fs_change_rev_prop(repos->fs, rev, name, new_value, pool)); if (use_post_revprop_change_hook) SVN_ERR(svn_repos__hooks_post_revprop_change(repos, rev, author, name, old_value, action, pool)); } else /* rev is either unreadable or only partially readable */ { return svn_error_createf (SVN_ERR_AUTHZ_UNREADABLE, NULL, _("Write denied: not authorized to read all of revision %ld"), rev); } return SVN_NO_ERROR; }
static svn_error_t * get_set_revprop_packed_fs(const svn_test_opts_t *opts, apr_pool_t *pool) { svn_fs_t *fs; svn_fs_txn_t *txn; svn_fs_root_t *txn_root; const char *conflict; svn_revnum_t after_rev; svn_string_t *prop_value; apr_pool_t *subpool; /* Bail (with success) on known-untestable scenarios */ if ((strcmp(opts->fs_type, "fsfs") != 0) || (opts->server_minor_version && (opts->server_minor_version < 7))) return SVN_NO_ERROR; /* Create the packed FS and open it. */ SVN_ERR(create_packed_filesystem(REPO_NAME, opts, MAX_REV, SHARD_SIZE, pool)); SVN_ERR(svn_fs_open(&fs, REPO_NAME, NULL, pool)); subpool = svn_pool_create(pool); /* Do a commit to trigger packing. */ SVN_ERR(svn_fs_begin_txn(&txn, fs, MAX_REV, subpool)); SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool)); SVN_ERR(svn_test__set_file_contents(txn_root, "iota", "new-iota", subpool)); SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool)); SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev)); svn_pool_clear(subpool); /* Pack the repository. */ SVN_ERR(svn_fs_pack(REPO_NAME, NULL, NULL, NULL, NULL, pool)); /* Try to get revprop for revision 0. */ SVN_ERR(svn_fs_revision_prop(&prop_value, fs, 0, SVN_PROP_REVISION_AUTHOR, pool)); /* Try to change revprop for revision 0. */ SVN_ERR(svn_fs_change_rev_prop(fs, 0, SVN_PROP_REVISION_AUTHOR, svn_string_create("tweaked-author", pool), pool)); return SVN_NO_ERROR; }