Author: cmpilato
Date: Wed Apr 3 17:05:45 2013
New Revision: 1464109
URL: http://svn.apache.org/r1464109
Log:
Revert my r1464079 commit, which failed an IRC-based popularity test.
Modified:
subversion/trunk/subversion/libsvn_repos/hooks.c
subversion/trunk/subversion/libsvn_repos/repos.h
Modified: subversion/trunk/subversion/libsvn_repos/hooks.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/hooks.c?rev=1464109&r1=1464108&r2=1464109&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/hooks.c (original)
+++ subversion/trunk/subversion/libsvn_repos/hooks.c Wed Apr 3 17:05:45 2013
@@ -410,40 +410,30 @@ parse_hooks_env_section(const char *name
return TRUE;
}
-/* Set *HOOKS_ENV_P to the cached hash-form of the parsed hook-env
- file for REPOS. (If that information has not yet been cached, then
- parse the file, cache the results, and *then* return them.) */
+/* Parse the hooks env file for this repository. */
static svn_error_t *
parse_hooks_env(apr_hash_t **hooks_env_p,
- svn_repos_t *repos,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_config_t *cfg;
struct parse_hooks_env_section_baton b;
- /* Easy out: we've already parsed the sucker! */
- if (repos->hooks_env)
+ if (local_abspath)
{
- *hooks_env_p = repos->hooks_env;
- return SVN_NO_ERROR;
+ SVN_ERR(svn_config_read2(&cfg, local_abspath, FALSE, TRUE,
scratch_pool));
+ b.cfg = cfg;
+ b.hooks_env = apr_hash_make(result_pool);
+ svn_config_enumerate_sections2(cfg, parse_hooks_env_section, &b,
+ scratch_pool);
+ *hooks_env_p = b.hooks_env;
}
-
- /* Easy out: no path to parse. */
- if (! repos->hooks_env_path)
+ else
{
*hooks_env_p = NULL;
- return SVN_NO_ERROR;
}
- /* Okay, parse the file, then cache and return the results. */
- SVN_ERR(svn_config_read2(&cfg, repos->hooks_env_path,
- FALSE, TRUE, scratch_pool));
- b.cfg = cfg;
- b.hooks_env = apr_hash_make(repos->pool);
- svn_config_enumerate_sections2(cfg, parse_hooks_env_section,
- &b, scratch_pool);
- *hooks_env_p = repos->hooks_env = b.hooks_env;
-
return SVN_NO_ERROR;
}
@@ -489,7 +479,7 @@ svn_repos__hooks_start_commit(svn_repos_
capabilities_string = apr_pstrdup(pool, "");
}
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
args[0] = hook;
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
@@ -578,7 +568,7 @@ svn_repos__hooks_pre_commit(svn_repos_t
SVN_ERR(svn_io_file_open(&stdin_handle, SVN_NULL_DEVICE_NAME,
APR_READ, APR_OS_DEFAULT, pool));
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
SVN_ERR(run_hook_cmd(NULL, SVN_REPOS__HOOK_PRE_COMMIT, hook, args,
hooks_env, stdin_handle, pool));
@@ -606,7 +596,7 @@ svn_repos__hooks_post_commit(svn_repos_t
const char *args[5];
apr_hash_t *hooks_env;
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
args[0] = hook;
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
@@ -652,7 +642,7 @@ svn_repos__hooks_pre_revprop_change(svn_
SVN_ERR(svn_io_file_open(&stdin_handle, SVN_NULL_DEVICE_NAME,
APR_READ, APR_OS_DEFAULT, pool));
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
action_string[0] = action;
action_string[1] = '\0';
@@ -717,7 +707,7 @@ svn_repos__hooks_post_revprop_change(svn
SVN_ERR(svn_io_file_open(&stdin_handle, SVN_NULL_DEVICE_NAME,
APR_READ, APR_OS_DEFAULT, pool));
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
action_string[0] = action;
action_string[1] = '\0';
@@ -762,7 +752,7 @@ svn_repos__hooks_pre_lock(svn_repos_t *r
svn_string_t *buf;
apr_hash_t *hooks_env;
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
args[0] = hook;
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
@@ -811,7 +801,7 @@ svn_repos__hooks_post_lock(svn_repos_t *
SVN_ERR(create_temp_file(&stdin_handle, paths_str, pool));
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
args[0] = hook;
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
@@ -849,7 +839,7 @@ svn_repos__hooks_pre_unlock(svn_repos_t
const char *args[7];
apr_hash_t *hooks_env;
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
args[0] = hook;
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
@@ -891,7 +881,7 @@ svn_repos__hooks_post_unlock(svn_repos_t
SVN_ERR(create_temp_file(&stdin_handle, paths_str, pool));
- SVN_ERR(parse_hooks_env(&hooks_env, repos, pool));
+ SVN_ERR(parse_hooks_env(&hooks_env, repos->hooks_env_path, pool, pool));
args[0] = hook;
args[1] = svn_dirent_local_style(svn_repos_path(repos, pool), pool);
Modified: subversion/trunk/subversion/libsvn_repos/repos.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/repos.h?rev=1464109&r1=1464108&r2=1464109&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/repos.h (original)
+++ subversion/trunk/subversion/libsvn_repos/repos.h Wed Apr 3 17:05:45 2013
@@ -151,10 +151,6 @@ struct svn_repos_t
those constants' addresses, therefore). */
apr_hash_t *repository_capabilities;
- /* Parsed form of the 'hooks-env' configuration file (NULL if not
- yet parsed). */
- apr_hash_t *hooks_env;
-
/* Pool from which this structure was allocated. Also used for
auxiliary repository-related data that requires a matching
lifespan. (As the svn_repos_t structure tends to be relatively