Index: subversion/include/svn_mergeinfo.h =================================================================== --- subversion/include/svn_mergeinfo.h (revision 889271) +++ subversion/include/svn_mergeinfo.h (working copy) @@ -157,6 +157,9 @@ * inheritability are also allowed, but will be combined into a single * range when placed into @a *mergeinfo. * + * @a input may contain relative merge source paths, but these are + * converted to absolute paths in @a *mergeinfo. + * * @since New in 1.5. */ svn_error_t * Index: subversion/libsvn_subr/mergeinfo.c =================================================================== --- subversion/libsvn_subr/mergeinfo.c (revision 889271) +++ subversion/libsvn_subr/mergeinfo.c (working copy) @@ -73,8 +73,10 @@ /* pathname -> PATHNAME */ static svn_error_t * -parse_pathname(const char **input, const char *end, - svn_stringbuf_t **pathname, apr_pool_t *pool) +parse_pathname(const char **input, + const char *end, + svn_stringbuf_t **pathname, + apr_pool_t *pool) { const char *curr = *input; const char *last_colon = NULL; @@ -96,7 +98,20 @@ return svn_error_create(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL, _("No pathname preceding ':'")); - *pathname = svn_stringbuf_ncreate(*input, last_colon - *input, pool); + /* Tolerate relative repository paths, but convert them to absolute. */ + if (**input == '/') + { + *pathname = svn_stringbuf_ncreate(*input, last_colon - *input, pool); + } + else + { + const char *repos_rel_path = apr_pstrndup(pool, *input, + last_colon - *input); + *pathname = svn_stringbuf_ncreate(apr_psprintf(pool, "/%s", + repos_rel_path), + (last_colon - *input) + 1, pool); + } + *input = last_colon; return SVN_NO_ERROR;