Index: subversion/libsvn_repos/log.c =================================================================== --- subversion/libsvn_repos/log.c (revision 31112) +++ subversion/libsvn_repos/log.c (working copy) @@ -1222,21 +1222,43 @@ various paths. */ if (include_merged_revisions) { + svn_error_t *err; apr_array_header_t *cur_paths = apr_array_make(iterpool, paths->nelts, sizeof(const char *)); /* Get the current paths of our history objects so we can query mergeinfo. */ - /* ### TODO: Should this be ignoring depleted history items? */ for (i = 0; i < histories->nelts; i++) { struct path_info *info = APR_ARRAY_IDX(histories, i, struct path_info *); APR_ARRAY_PUSH(cur_paths, const char *) = info->path->data; } - SVN_ERR(get_merged_rev_mergeinfo(&mergeinfo, fs, cur_paths, - current, iterpool)); - has_children = (apr_hash_count(mergeinfo) > 0); + err = get_merged_rev_mergeinfo(&mergeinfo, fs, cur_paths, + current, iterpool); + /* Ignore errors caused by renamed paths. That's ok if PATHS + only contains a single path, but if it has multiple paths + then we have multiple HISTORIES. Any if + get_merged_rev_mergeinfo() chokes on any of these then we + will miss out on potential children of the other paths and + never get the logs for those. */ + if (err) + { + if (err->apr_err == SVN_ERR_FS_NOT_FOUND) + { + svn_error_clear(err); + err = NULL; + has_children = FALSE; + } + else + { + return err; + } + } + else + { + has_children = (apr_hash_count(mergeinfo) > 0); + } } /* If our caller wants logs in descending order, we can send