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);