Sergey Raevskiy <sergey.raevs...@visualsvn.com> writes:

> +static svn_error_t *
> +pre_commit_hook_lock_token_without_path(const svn_test_opts_t *opts,
> +                                        apr_pool_t *pool)
> +{
> +  svn_repos_t *repos;
> +  svn_fs_access_t *access;
> +  svn_fs_txn_t *txn;
> +  svn_fs_root_t *root;
> +  const char *conflict;
> +  svn_revnum_t new_rev;
> +
> +  /* Create test repository. */
> +  SVN_ERR(svn_test__create_repos(&repos, "pre_commit_hook_tokens_test",
> +                                 opts, pool));
> +
> +  /* Set an empty pre-commit hook. */
> +  SVN_ERR(svn_io_file_create(svn_repos_pre_commit_hook(repos, pool),
> +                             "exit 0", pool));
> +  SVN_ERR(svn_io_set_file_executable(svn_repos_pre_commit_hook(repos, pool),
> +                                     TRUE, FALSE, pool));

How is that going to work?  "exit 0" is not a valid hook script.  It
might work with an additional "/bin/sh" but that is not portable.

> +
> +  /* Set some access context using svn_fs_access_add_lock_token(). */
> +  SVN_ERR(svn_fs_create_access(&access, "jrandom", pool));
> +  SVN_ERR(svn_fs_access_add_lock_token(access, "opaquelocktoken:abc"));
> +  SVN_ERR(svn_fs_set_access(svn_repos_fs(repos), access));
> +
> +  /* Try to commit a new revision. */
> +  SVN_ERR(svn_repos_fs_begin_txn_for_commit2(&txn, repos, 0,
> +                                             apr_hash_make(pool), pool));
> +  SVN_ERR(svn_fs_txn_root(&root, txn, pool));
> +  SVN_ERR(svn_fs_make_dir(root, "/whatever", pool));
> +  SVN_ERR(svn_fs_commit_txn(&conflict, &new_rev, txn, pool));

Ah!  The fs layer does not run any hooks, you need to use the repos
layer's svn_repos_fs_commit_txn to run hooks.  But that will not work
because the hook is not portable.

> +
> +  SVN_TEST_STRING_ASSERT(conflict, NULL);
> +  SVN_TEST_ASSERT(new_rev == 1);
> +
> +  return SVN_NO_ERROR;
> +}
> +
>  /* The test table.  */
>  
>  static int max_threads = 4;
> @@ -3615,6 +3654,8 @@ static struct svn_test_descriptor_t test_funcs[] =
>                         "test svn_repos__config_pool_*"),
>      SVN_TEST_OPTS_PASS(test_repos_fs_type,
>                         "test test_repos_fs_type"),
> +    SVN_TEST_OPTS_PASS(pre_commit_hook_lock_token_without_path,
> +                       "test legacy access context api"),
>      SVN_TEST_NULL
>    };
>  
>

-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*

Reply via email to