1 需求描述
当前在修复bug时,公司流程要求附上修改前后的对比报告。一开始,我直接使用svn的diff命令来生成对比报告,这种方法也可以看,但显示效果不太好,其他同事看起来不方便。 平时在查看代码差异时,一般会使用Beyond Compare工具来查看,对比结果比较清晰。其也可以导出报告,但需要自己手动操作,没有svn diff 一行命令这么方便。后来发现Beyond Compare也支持通过脚本来生成报告,于是研究了一下,并实现了一个脚本。
2 实现效果
通过一行命令直接生成带上下文的html 格式的对比报告,如下图: 对应界面中操作如下:
3 脚本实现要点
3.1 Beyond Compare 命令行工具安装(Beyond Compare版本: 4.3.5)
点击 Beyond Compare -> 安装命令行工具
,可以直接安装命令行,按照提示操作即可。
3.2 Beyond Compare 命令
bcomp -silent @compare_script.txt folder-1 folder-2 report.html
命令:
对于Mac 来说,Beyond Compare主要有两个命令可以使用
bcompare
: 启动比较并立即返回
bcomp
: 启动比较并等待它完成
我这里想实现生成报告后将其发送到指定邮箱, 需要知道其完成时间,故选择bcomp命令。
参数:
-silent
:告诉Beyond Compare不用开启用户界面,后台运行生成报告即可
@compare_script.txt
:Beyond Compare 脚本的路径,需要在其路径前加@,以标示其是一个脚本文件,而不是一个普通文件,如果路径中包含空格,需要用""来包裹
folder-1 folder-2 report.html
:这三个参数不是bcomp 的参数,而是传给脚本的参数,在后面会介绍。
3.3 Beyond Compare 脚本的编写
具体解释见注释
# Turn logging on. 打开日志,并将日志写入beyond_compare_log.txt 文件,方便定位问题
log normal "beyond_compare_log.txt"
# Set up basic comparison features. [1]指定比较规则,当前指定的是 基于规则的比较
criteria rules-based
# Filter out log files. [2]文件过滤,可指定对文件夹中那些或那类文件进行比较
filter "-*.xcuserdatad;-*IDEWorkspaceChecks.plist;-.DS_Store;"
# Load first comparison. 加载比较对象,这里的%1 %2为占位符,可通过bcomp 来传入参数,参考3.2中的命令
load %1 %2
# expand all 对所有文件夹进行递归遍历
expand all
# select files. 指定操作的对象,这里选择的是所有有差异的文件
select all.diff
# Generate a report of the differences.
# file-report生成文件对比报告;
# layout: 排版,这里是[3]边并排;
# options: 可选参数,这里指定了要显示[4]上下文和行数;
# 注意:官方文档中display-context这个可选参数在file-report中是没有的,但是如果你
# 比较的是文本文件,是可以正常生成带上下文的比较报告,如果有图片之类的二进制,就会报脚本错误。
# 不知道是Bug 还是我没找到对的参数。
# output-to: 指定导出文件路径;
# output-options: 导出可选参数,这里指定其[5]自动换行,导出格式为多色的html格式。
# 更多参数可见官方文档
file-report layout:side-by-side options:display-context,line-numbers output-to:%3 output-options:wrap-word,html-color
[1] 对应界面中配置如下图 [2] 对应界面中配置如下图 [3] 对应界面中配置如下图
[4] 对应界面中配置如下图
[5] 对应界面中配置如下图
4、脚本使用
在 shell 中执行下面命令:
bcomp -silent @compare_script.txt folder-1 folder-2 report.html
也可以通过python 等脚本来实现后续操作,如在浏览器中打开、发送文件到指定邮箱等。
这里所有的命令和参数都可以在官方文档中找到: www.scootersoftware.com/v4help/inde…
也可以在这里查看官方的脚本示例:
www.scootersoftware.com/v4help/
(找到Using Beyond Comapre -> Scripts -> Sample Scripts
)