You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2011/01/28 20:42:26 UTC
svn commit: r1064839 - /subversion/trunk/subversion/libsvn_repos/log.c
Author: cmpilato
Date: Fri Jan 28 19:42:25 2011
New Revision: 1064839
URL: http://svn.apache.org/viewvc?rev=1064839&view=rev
Log:
As it turns out, r1028108 was only a partial fix for issue #3270
("'svn log -g' should more gracefully and conservatively handle
invalid mergeinfo source paths"). This fixes more of that problem --
the part triggered when the mergeinfo is complex enough to max out the
log code's FS history cache.
* subversion/libsvn_repos/log.c
(get_path_histories): When ignoring missing locations, trap and
ignore those sort of errors as returned from get_history(), too.
Patch by: Kevin Radke <km...@gmail.com>
Modified:
subversion/trunk/subversion/libsvn_repos/log.c
Modified: subversion/trunk/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/log.c?rev=1064839&r1=1064838&r2=1064839&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/log.c (original)
+++ subversion/trunk/subversion/libsvn_repos/log.c Fri Jan 28 19:42:25 2011
@@ -1052,6 +1052,7 @@ get_path_histories(apr_array_header_t **
{
svn_fs_root_t *root;
apr_pool_t *iterpool;
+ svn_error_t *err;
int i;
/* Create a history object for each path so we can walk through
@@ -1093,7 +1094,6 @@ get_path_histories(apr_array_header_t **
if (i < MAX_OPEN_HISTORIES)
{
- svn_error_t *err;
err = svn_fs_node_history(&info->hist, root, this_path, pool);
if (err
&& ignore_missing_locations
@@ -1115,10 +1115,20 @@ get_path_histories(apr_array_header_t **
info->newpool = NULL;
}
- SVN_ERR(get_history(info, fs,
- strict_node_history,
- authz_read_func, authz_read_baton,
- hist_start, pool));
+ err = get_history(info, fs,
+ strict_node_history,
+ authz_read_func, authz_read_baton,
+ hist_start, pool);
+ if (err
+ && ignore_missing_locations
+ && (err->apr_err == SVN_ERR_FS_NOT_FOUND ||
+ err->apr_err == SVN_ERR_FS_NOT_DIRECTORY ||
+ err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION))
+ {
+ svn_error_clear(err);
+ continue;
+ }
+ SVN_ERR(err);
APR_ARRAY_PUSH(*histories, struct path_info *) = info;
}
svn_pool_destroy(iterpool);