Hello.
Steps to reproduce:
1. Create a patch that deletes files.
2. Apply the patch using TortoiseSVN.
3. Use "svn status" to check your working copy state.
4. See that the files are missing, not deleted.
The problem is reproduced in at least TortoiseSVN 1.13 and 1.14.
It looks like a copy-paste typo in r28529 [1]: svn_*dirent*_canonicalize()
calls
have been replaced with svn_*uri*_canonicalize_safe() instead of
svn_*dirent*_canonicalize_safe(). As a result, the SVNPatch::RemoveFile()
function fails. It also seems that the SVNPatch::PatchPath() function is
affected by the same problem.
There is a patch with a fix in attachments.
[1]
https://osdn.net/projects/tortoisesvn/scm/svn/commits/28529#fd-trunk/src/SVN/SVNPatch.cpp
With best regards,
Denis Kovalchuk
--
You received this message because you are subscribed to the Google Groups
"TortoiseSVN-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/tortoisesvn-dev/c298e0f0-d17b-4bf8-946c-8677e90b3e66n%40googlegroups.com.
Follow-up to r28529: Use correct functions to canonicalize paths. At least this
fixes the following problem: applying a patch with file deletions results in
these files are missing.
Index: src/SVN/SVNPatch.cpp
===================================================================
--- src/SVN/SVNPatch.cpp (revision 29343)
+++ src/SVN/SVNPatch.cpp (working copy)
@@ -317,7 +317,7 @@
svn_error_clear(svn_client_create_context2(&ctx,
SVNConfig::Instance().GetConfig(m_pool), scratchPool));
const char* patchAbspath = nullptr;
- err = svn_uri_canonicalize_safe(&patchAbspath,
nullptr,
+ err = svn_dirent_canonicalize_safe(&patchAbspath,
nullptr,
CUnicodeUtils::GetUTF8(m_patchFile),
scratchPool, scratchPool);
if (err)
@@ -329,7 +329,7 @@
}
const char* localAbspath = nullptr;
- err = svn_uri_canonicalize_safe(&localAbspath,
nullptr,
+ err = svn_dirent_canonicalize_safe(&localAbspath,
nullptr,
CUnicodeUtils::GetUTF8(m_targetPath),
scratchPool, scratchPool);
if (err)
@@ -587,7 +587,7 @@
apr_array_header_t* targets = apr_array_make(scratchPool, 1, sizeof(const
char*));
const char* canonicalizedPath = nullptr;
- svn_error_clear(svn_uri_canonicalize_safe(&canonicalizedPath, nullptr,
CUnicodeUtils::GetUTF8(path), scratchPool, scratchPool));
+ svn_error_clear(svn_dirent_canonicalize_safe(&canonicalizedPath, nullptr,
CUnicodeUtils::GetUTF8(path), scratchPool, scratchPool));
if (canonicalizedPath == nullptr)
{
apr_pool_destroy(scratchPool);