--- subversion/libsvn_subr/io.c.orig 2020-03-25 05:04:28.000000000 -0400 +++ subversion/libsvn_subr/io.c 2021-08-24 15:42:15.000000000 -0400 @@ -216,7 +216,7 @@ const char *path_apr, apr_pool_t *pool) { -#if defined(WIN32) || defined(DARWIN) +#if defined(WIN32) *path_utf8 = path_apr; return SVN_NO_ERROR; #else @@ -299,7 +299,7 @@ const char *parent, apr_pool_t *pool) { -#if defined(WIN32) || defined(DARWIN) +#if defined(WIN32) *name_p = apr_pstrdup(pool, name); return SVN_NO_ERROR; #else --- subversion/libsvn_subr/path.c.orig 2016-01-10 13:35:21.000000000 -0500 +++ subversion/libsvn_subr/path.c 2021-08-24 15:42:15.000000000 -0400 @@ -40,6 +40,9 @@ #include "dirent_uri.h" +#if defined(DARWIN) +#include +#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 @@ -1111,7 +1114,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) @@ -1138,7 +1141,7 @@ const char *path_utf8, apr_pool_t *pool) { -#if !defined(WIN32) && !defined(DARWIN) +#if !defined(WIN32) svn_boolean_t path_is_utf8; SVN_ERR(get_path_encoding(&path_is_utf8, pool)); if (path_is_utf8) @@ -1147,7 +1150,7 @@ *path_apr = apr_pstrdup(pool, path_utf8); return SVN_NO_ERROR; } -#if !defined(WIN32) && !defined(DARWIN) +#if !defined(WIN32) else return svn_utf_cstring_from_utf8(path_apr, path_utf8, pool); #endif @@ -1159,18 +1162,38 @@ const char *path_apr, apr_pool_t *pool) { -#if !defined(WIN32) && !defined(DARWIN) +#if defined(DARWIN) + /* + Special treatment for Mac OS X to support UTF-8 MAC encodings. + Convert any decomposed unicode characters into precomposed ones. + This will solve the problem that the 'svn status' command sometimes + cannot recognize the same file if it contains composed characters, + like Umlaut in some European languages. + */ + CFMutableStringRef cfmsr = CFStringCreateMutable(NULL, 0); + CFStringAppendCString(cfmsr, path_apr, kCFStringEncodingUTF8); + CFStringNormalize(cfmsr, kCFStringNormalizationFormC); + CFIndex path_buff_size = 1 + CFStringGetMaximumSizeForEncoding(CFStringGetLength(cfmsr), kCFStringEncodingUTF8); + path_apr = apr_palloc(pool, path_buff_size); + CFStringGetCString(cfmsr, path_apr, path_buff_size, kCFStringEncodingUTF8); + CFRelease(cfmsr); + *path_utf8 = path_apr; + return SVN_NO_ERROR; +#else + /* Use the default method on any other OS */ + #if !defined(WIN32) svn_boolean_t path_is_utf8; SVN_ERR(get_path_encoding(&path_is_utf8, pool)); if (path_is_utf8) -#endif + #endif { *path_utf8 = apr_pstrdup(pool, path_apr); return SVN_NO_ERROR; } -#if !defined(WIN32) && !defined(DARWIN) + #if !defined(WIN32) else return svn_utf_cstring_to_utf8(path_utf8, path_apr, pool); + #endif #endif } --- subversion/svn/proplist-cmd.c.orig 2021-08-24 15:41:59.000000000 -0400 +++ subversion/svn/proplist-cmd.c 2021-08-24 15:42:15.000000000 -0400 @@ -98,6 +98,11 @@ else name_local = path; +#if defined(DARWIN) + if (! is_url) + SVN_ERR(svn_path_cstring_to_utf8(&name_local, name_local, pool)); +#endif + sb = NULL; @@ -137,6 +142,11 @@ else name_local = path; +#if defined(DARWIN) + if (! is_url) + SVN_ERR(svn_path_cstring_to_utf8(&name_local, name_local, pool)); +#endif + if (inherited_props) { int i; --- subversion/svn/status-cmd.c.orig 2015-04-10 03:58:19.000000000 -0400 +++ subversion/svn/status-cmd.c 2021-08-24 15:42:15.000000000 -0400 @@ -114,6 +114,10 @@ { svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool); +#if defined(DARWIN) + SVN_ERR(svn_path_cstring_to_utf8(&target, target, pool)); +#endif + svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "target", "path", target, SVN_VA_NULL);