一、代码路径中有中文时会提示提交失败的错误提示:
提示内容表示svn的节点错误,找不到文件。可以合理猜测Phabricator在生成文件差异的过程中将差异内容文本格式识别错误,之后在检查的过程中提示此错误。
有了以上的猜测,我们可以查看代码中的获取文件差异的代码部分,将文本格式转化为Phabricator能识别的格式即可。
二、分析Phabricator的调用方式:
三、继续分析generateChanges()方法,找到了一下语句:
四、分析为对不同代码管理工具做了不同处理,如果是SVN工具下,则使用上述对于方法处理。针对本问题2的路径问题,需要分析generateAffectedPaths()方法,然后发现调用了$paths=$repository_api->getSVNStatus($externals=true);方法来获取路径,具体的调用方式如下:
五、剩下的处理就简单了,需要在获取xml格式文本后件将文本转化为GBK格式,但是这样还不够,因为Phabricator的服务器并不难识别GBK格式,需要在发送数据前将数据从GBK转化为UTF-8,具体修改如下:
1、ArcnistSubversionApi.php.getSVNStatus()方法修改。
2、ArcdiffWorkflow.php.run()方法修改。
3、新增了格式转换方法。
4、作出以上修改后,果然路径中有中文也不会出现问题。