> -----Original Message----- > From: phi...@apache.org [mailto:phi...@apache.org] > Sent: woensdag 6 januari 2016 18:20 > To: comm...@subversion.apache.org > Subject: svn commit: r1723385 - in /subversion/trunk/subversion: > libsvn_client/relocate.c tests/cmdline/relocate_tests.py > > Author: philip > Date: Wed Jan 6 17:20:28 2016 > New Revision: 1723385 > > URL: http://svn.apache.org/viewvc?rev=1723385&view=rev > Log: > Fix a problem relocating some externals. > > Reported by: Larry Baird <lab{_AT_}gta.com> > > * subversion/libsvn_client/relocate.c > (svn_client_relocate2): Handle case where prefix is too long > to be valid for externals. > > * subversion/tests/cmdline/relocate_tests.py > (relocate_with_relative_externals): Extend. > > Modified: > subversion/trunk/subversion/libsvn_client/relocate.c > subversion/trunk/subversion/tests/cmdline/relocate_tests.py > > Modified: subversion/trunk/subversion/libsvn_client/relocate.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/re > locate.c?rev=1723385&r1=1723384&r2=1723385&view=diff > ========================================================== > ==================== > --- subversion/trunk/subversion/libsvn_client/relocate.c (original) > +++ subversion/trunk/subversion/libsvn_client/relocate.c Wed Jan 6 > 17:20:28 2016 > @@ -141,6 +141,8 @@ svn_client_relocate2(const char *wcroot_ > apr_hash_index_t *hi; > apr_pool_t *iterpool = NULL; > const char *old_repos_root_url, *new_repos_root_url; > + char *sig_from_prefix, *sig_to_prefix; > + apr_size_t index_from, index_to; > > /* Populate our validator callback baton, and call the relocate code. */ > vb.ctx = ctx; > @@ -183,6 +185,21 @@ svn_client_relocate2(const char *wcroot_ > if (! apr_hash_count(externals_hash)) > return SVN_NO_ERROR; > > + /* A valid prefix for the main working copy may be too long to be > + valid for an external. Trim any common trailing characters to > + leave the significant part that changes. */ > + sig_from_prefix = apr_pstrdup(pool, from_prefix); > + sig_to_prefix = apr_pstrdup(pool, to_prefix); > + index_from = strlen(sig_from_prefix); > + index_to = strlen(sig_to_prefix); > + while (index_from && index_to > + && sig_from_prefix[index_from] == sig_to_prefix[index_to]) > + { > + sig_from_prefix[index_from] = sig_to_prefix[index_to] = '\0'; > + --index_from; > + --index_to; > + } > +
I'm wondering, is it safe to do this this way... or should we use the safer svn_uri_dirname() to split of whole components from a url at a time. Are there cases where this might match half a directory (or host) name? Bert