Graphtage:JSON,HTML,YAML,CSV等的语义差异实用程序

2021-02-27 09:11:09

Graphtage是一个命令行实用程序和基础库,用于在语义上比较和合并树状结构,例如JSON,XML,HTML,YAML,plist和CSS文件。它的名字是“图形”和“嫁接”的称呼-后者是园艺实践,将两棵树连在一起,使它们长成一棵。

Graphtage对与输入文件的文件类型不同的树的中间表示进行分析。例如,这意味着您可以将JSON文件与YAML文件进行对比。同样,输出格式可以与输入格式不同。默认情况下,Graphtage将以与第一个输入文件相同的文件格式来格式化输出差异。但是,例如,可以比较两个JSON文件并以YAML格式化输出。有几个命令行参数可以指定这些转换。请检查--help输出以获取更多信息。

默认情况下,Graphtage用尽可能多的换行符和缩进来漂亮地打印其输出。

同样,使用--join-dict-items或-jd选项可抑制dict中的键/值对后的换行符:

--only-edits或-e选项将打印出编辑列表,而不是将它们应用到输入文件中。

默认情况下,Graphtage尝试匹配字典中所有可能的元素对。尽管在计算上很容易处理,但有时对于具有庞大词典的输入文件而言,这可能会很繁重。 --no-key-edits或-k选项将仅尝试匹配共享同一密钥的字典项,从而大大减少了计算量。同样,当比较两个列表时,--no-list-edits或-l选项将不考虑插页式广告的插入和删除。 --no-list-edits-when-same-length或-ll选项是-l的较不激烈的版本,对于长度不同的列表将正常运行,但对于长度相同的列表则类似于-l 。

默认情况下,如果从TTY运行,则Graphtage仅在其输出中使用ANSI颜色。例如,如果您希望Graphtage从脚本或管道发出彩色输出,请使用--color或-c参数。要在TTY上运行时也要禁用颜色,请使用--no-color。

默认情况下,Graphtage将状态消息和进度条打印到STDERR。要抑制这种情况,请使用--no-status选项。要另外禁止所有重要日志消息,请使用--quiet。通过--log-level选项可以精细地控制日志消息。

将具有无序元素的树状结构区分很难。假设您要比较两个JSON文件,可用的工具有限,实际上等效于规范化JSON(例如,按键对字典元素进行排序)和执行标准的diff。这并不总是足够的。例如,如果字典中的某个键被更改但其值未更改,则传统的差异将得出结论,即使唯一的更改是键本身,整个键/值对仍被新的键/值对替代。有关更多信息,请参见我们的文档。

Graphtage被设计为可扩展的;可以轻松定义新的文件类型,以及新的节点类型,编辑类型,格式化程序和打印机。有关更多信息,请参见我们的文档。

这项研究是由Trail of Bits开发的,由SafeAdvanced计划的分包商,由DefenceAdvanced Research Projects Agency(DARPA)在SafeDocs计划下提供部分资金,并根据GNU通用公共许可证v3.0许可。如果您正在寻找条款的例外,请与我们联系。©2020,比特之路。