Index: subversion/libsvn_client/merge.c =================================================================== --- subversion/libsvn_client/merge.c (revision 28740) +++ subversion/libsvn_client/merge.c (working copy) @@ -1219,6 +1219,7 @@ const char *min_url = (revision1 < revision2) ? url1 : url2; const char *max_url = (revision1 < revision2) ? url2 : url1; const char *min_rel_path, *max_rel_path; + svn_error_t *err; SVN_ERR(svn_client__path_relative_to_root(&min_rel_path, min_url, source_root_url, FALSE, ra_session, @@ -1233,25 +1234,38 @@ min_rel_path, min_rev, svn_mergeinfo_inherited, TRUE, pool)); - SVN_ERR(svn_client__get_repos_mergeinfo(ra_session, &end_mergeinfo, - max_rel_path, max_rev, - svn_mergeinfo_inherited, TRUE, - pool)); - - SVN_ERR(svn_mergeinfo_diff(&deleted_mergeinfo, &added_mergeinfo, - start_mergeinfo, end_mergeinfo, - FALSE, pool)); - - if (added_mergeinfo) + err = svn_client__get_repos_mergeinfo(ra_session, &end_mergeinfo, + max_rel_path, max_rev, + svn_mergeinfo_inherited, TRUE, + pool); + /* When operating on subtrees with intersecting mergeinfo, URL1@REVISION1 + might have been deleted and URL2@REVISION2 won't exist. Don't return an + error in this case, just proceed without bothering to look for + ADDED_MERGEINFO. */ + if (err) { - const char *mergeinfo_path; - SVN_ERR(svn_client__path_relative_to_root(&mergeinfo_path, target_url, - source_root_url, TRUE, - ra_session, NULL, pool)); - src_rangelist_for_tgt = apr_hash_get(added_mergeinfo, mergeinfo_path, - APR_HASH_KEY_STRING); + if (err->apr_err == SVN_ERR_FS_NOT_FOUND + || err->apr_err == SVN_ERR_RA_DAV_REQUEST_FAILED) + svn_error_clear(err); + else + return err; } + else + { + SVN_ERR(svn_mergeinfo_diff(&deleted_mergeinfo, &added_mergeinfo, + start_mergeinfo, end_mergeinfo, + FALSE, pool)); + if (added_mergeinfo) + { + const char *mergeinfo_path; + SVN_ERR(svn_client__path_relative_to_root(&mergeinfo_path, target_url, + source_root_url, TRUE, + ra_session, NULL, pool)); + src_rangelist_for_tgt = apr_hash_get(added_mergeinfo, mergeinfo_path, + APR_HASH_KEY_STRING); + } + } /* Create a single-item list of ranges with our one requested range in it, and then remove overlapping revision ranges from that range. */ *requested_rangelist = apr_array_make(pool, 1, sizeof(range)); @@ -5215,6 +5229,7 @@ "it has descendents with different revisions " "merged", source_repos_rel_path); } + return SVN_NO_ERROR; }