Created
August 13, 2015 00:51
-
-
Save vkgtaro/a6a762da5522dfd1b37c to your computer and use it in GitHub Desktop.
subversion utf8-mac patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- a/subversion/libsvn_subr/path.c | |
+++ b/subversion/libsvn_subr/path.c | |
@@ -40,6 +40,9 @@ | |
#include "dirent_uri.h" | |
+#if defined(DARWIN) | |
+#include <CoreFoundation/CoreFoundation.h> | |
+#endif /* DARWIN */ | |
/* The canonical empty path. Can this be changed? Well, change the empty | |
test below and the path library will work, not so sure about the fs/wc | |
@@ -1100,7 +1103,7 @@ | |
} | |
-#if !defined(WIN32) && !defined(DARWIN) | |
+#if !defined(WIN32) | |
/** Get APR's internal path encoding. */ | |
static svn_error_t * | |
get_path_encoding(svn_boolean_t *path_is_utf8, apr_pool_t *pool) | |
@@ -1148,19 +1151,35 @@ | |
const char *path_apr, | |
apr_pool_t *pool) | |
{ | |
-#if !defined(WIN32) && !defined(DARWIN) | |
svn_boolean_t path_is_utf8; | |
+ svn_error_t *err; | |
+ /* | |
+ Compose any decomposed unicode characters precomposed one. | |
+ This will solve the problem that the 'svn status' command sometime | |
+ cannot recognize as same file when files suppose to be comtain | |
+ comopsed characters, like umlaut in some European language or | |
+ 'Daku-ten' in Japanese, and the files are added on windows machines | |
+ then you use svn on Mac OS X checking out the files. | |
+ */ | |
+ CFMutableStringRef cfmsr = CFStringCreateMutable(NULL, 0); | |
+ CFStringAppendCString(cfmsr, path_apr, kCFStringEncodingUTF8); | |
+ CFStringNormalize(cfmsr, kCFStringNormalizationFormC); | |
+ CFIndex path_buff_size = 1 + CFStringGetMaximumSizeForEncoding( | |
+ CFStringGetLength(cfmsr), kCFStringEncodingUTF8); | |
+ char *path = apr_palloc(pool, path_buff_size); | |
+ CFStringGetCString(cfmsr, path, path_buff_size, kCFStringEncodingUTF8); | |
+ | |
SVN_ERR(get_path_encoding(&path_is_utf8, pool)); | |
+ | |
if (path_is_utf8) | |
-#endif | |
{ | |
*path_utf8 = apr_pstrdup(pool, path_apr); | |
- return SVN_NO_ERROR; | |
+ err = SVN_NO_ERROR; | |
} | |
-#if !defined(WIN32) && !defined(DARWIN) | |
else | |
- return svn_utf_cstring_to_utf8(path_utf8, path_apr, pool); | |
-#endif | |
+ err = svn_utf_cstring_to_utf8(path_utf8, path, pool); | |
+ CFRelease(cfmsr); | |
+ return err; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment