phabrocator中文路径不能识别问题解决方案

  phabrocator使用过程中发现了是哪个问题

  1,修改内容有中文时会导致文档差异内容乱码。2,代码路径中有中文时会提示提交失败。3,大工程提交评审过程相当缓慢。

  查看文档上关于中文字符和代码提交路径的相关介绍。文档介绍对于提交文件中包含中文的处理方法,需要在提交的时候加上—coding GBK,具体为提交时使用命令arc diff–encoding GBK。而代码提交路径中有中文则没有相关介绍,应该是设计的时候就没有做相关处理。关于提交大工程太慢的问题则是Phabricator只能在当前文件目录中有仓库配置文件的情况下才能提交,而我们使用的SVN版本在1.7之后只有在工程根目录下才有配置文件(.svn文件),所以导致使用svn的情况下只有在根目录才能提交评审,从而导致Phabricator会扫描全部工程文件,致使文件量过多时过慢。

  根据以上的分析,问题1已经通过官方文档解决,但是问题2和问题3属于设计缺陷,解决办法是修改源码。我们首先解决问题2,通过Phabricator的相关文档我们知道,Phabricator属于CS结构,其主要的评审流程如下:


根据问题2的错误提示

 

提示内容表示svn的节点错误,找不到文件。可以合理猜测Phabricator在生成文件差异的过程中将差异内容文本格式识别错误,之后在检查的过程中提示此错误。

有了以上的猜测,我们可以查看代码中的获取文件差异的代码部分,将文本格式转化为Phabricator能识别的格式即可。

分析Phabricator的调用方式:


继续分析generateChanges()方法,找到了一下语句


分析为对不同代码管理工具做了不同处理,如果是SVN工具下,则使用上述对于方法处理。针对本问题2的路径问题,需要分析generateAffectedPaths()方法,然后发现调用了$paths = $repository_api->getSVNStatus($externals = true);方法来获取路径,具体的调用方式如下


剩下的处理就简单了,需要在获取xml格式文本后件将文本转化为GBK格式,但是这样还不够,因为Phabricator的服务器并不难识别GBK格式,需要在发送数据前将数据从GBK转化为UTF-8,具体修改如下:

1ArcnistSubversionApi.php. getSVNStatus ()方法修改


2ArcdiffWorkflow.php.run()方法修改


新增了格式转换方法


作出以上修改后,果然路径中有中文也不会出现问题。

同理对于问题3,我们希望的情况是在非根目录下也能提交,同时只提交当前目录,有了上述铺垫,我们可以直接在工程非根目录下运行svn–xml status,发现也能输出对于当前目录的文件差异,以这一点为基础,只需要解除Phabricatorsvn下非根目录不能提交的限制即可。具体做法如下:

1,在ArcanistWorkingCopyIdentity.phpnewFromPathWithConfig方法里修改判断当前目录,改为判断当前目录以及父目录


通用需要新增判断方法


有了以上修改后,就可以在非svn根目录也能提交,提高了评审速度。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值