Author: stefan2
Date: Sat Nov 23 00:29:33 2013
New Revision: 1544721
URL: http://svn.apache.org/r1544721
Log:
The construction of error objects is relatively expensive (due to the
NLS libs involved). So, if files tend to not be present, check whether
they actually exist before opening them.
* subversion/libsvn_fs_fs/lock.c
(read_digest_file): most times, there are no locks
* subversion/libsvn_repos/hooks.c
(svn_repos__parse_hooks_env): most people don't configure a hook env
Modified:
subversion/trunk/subversion/libsvn_fs_fs/lock.c
subversion/trunk/subversion/libsvn_repos/hooks.c
Modified: subversion/trunk/subversion/libsvn_fs_fs/lock.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/lock.c?rev=1544721&r1=1544720&r2=1544721&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/lock.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/lock.c Sat Nov 23 00:29:33 2013
@@ -252,24 +252,23 @@ read_digest_file(apr_hash_t **children_p
apr_hash_t *hash;
svn_stream_t *stream;
const char *val;
+ svn_node_kind_t kind;
if (lock_p)
*lock_p = NULL;
if (children_p)
*children_p = apr_hash_make(pool);
- err = svn_stream_open_readonly(&stream, digest_path, pool, pool);
- if (err && APR_STATUS_IS_ENOENT(err->apr_err))
- {
- svn_error_clear(err);
- return SVN_NO_ERROR;
- }
- SVN_ERR(err);
+ SVN_ERR(svn_io_check_path(digest_path, &kind, pool));
+ if (kind == svn_node_none)
+ return SVN_NO_ERROR;
/* If our caller doesn't care about anything but the presence of the
file... whatever. */
- if (! (lock_p || children_p))
- return svn_stream_close(stream);
+ if (kind == svn_node_file && !lock_p && !children_p)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_stream_open_readonly(&stream, digest_path, pool, pool));
hash = apr_hash_make(pool);
if ((err = svn_hash_read2(hash, stream, SVN_HASH_TERMINATOR, pool)))
Modified: subversion/trunk/subversion/libsvn_repos/hooks.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/hooks.c?rev=1544721&r1=1544720&r2=1544721&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/hooks.c (original)
+++ subversion/trunk/subversion/libsvn_repos/hooks.c Sat Nov 23 00:29:33 2013
@@ -422,12 +422,20 @@ svn_repos__parse_hooks_env(apr_hash_t **
if (local_abspath)
{
- SVN_ERR(svn_config_read3(&cfg, local_abspath, FALSE,
- TRUE, TRUE, scratch_pool));
+ svn_node_kind_t kind;
+ SVN_ERR(svn_io_check_path(local_abspath, &kind, scratch_pool));
+
b.cfg = cfg;
b.hooks_env = apr_hash_make(result_pool);
- (void)svn_config_enumerate_sections2(cfg, parse_hooks_env_section, &b,
- scratch_pool);
+
+ if (kind != svn_node_none)
+ {
+ SVN_ERR(svn_config_read3(&cfg, local_abspath, FALSE,
+ TRUE, TRUE, scratch_pool));
+ (void)svn_config_enumerate_sections2(cfg, parse_hooks_env_section,
+ &b, scratch_pool);
+ }
+
*hooks_env_p = b.hooks_env;
}
else