一个简单的单向差分工具
ShortDiff的Python项目详细描述
shortdiff
这是diff算法的python实现。 它的目的是生产尽可能短的单向贴片 从一个文件转到另一个文件。 这有助于在没有 保存每个状态的副本(这是版本控制的简单部分)。 这产生的补丁比gnu diff工具的任何输出都要短。 因为它是单向的,所以从A到B的补丁不允许 从B到A。
免责声明
该算法具有O(n*m)的时间复杂度(n和m为n)。 每个文件的行数),并用纯python实现。 那里的表演不怎么样。 你可能不应该在任何严肃的项目中使用它。 我写这本书是为了教育目的,我用它写了一个非常小的 规模项目。
对于教育项目,档案中还有更天真的版本 目录。最后一个模块是重新安装这些设备。
安装
使用pip安装它或将此目录复制到相关位置 如果你知道你在做什么。
pip install ShortDiff
用法
cli
创建修补程序
python -m ShortDiff diff FILA_A [FILE_B]
创建从a到b的修补程序。如果提交了文件,则其内容 是标准输入的预期值。 将修补程序输出到标准输出。
应用修补程序
python -m ShortDiff patch PATCH [FILE]
对文件应用修补程序。如果文件是ommited,请对标准输入应用修补程序。 结果打印到标准输出。
API
功能可以从模块导入,以便在其他应用程序中使用。 有用的功能包括:
differ(old, new)
:(低级)取任意序列并返回levenstein距离和 以成对的顺序从一个到另一个的路径(旧的位置,新的位置)。 如果在两个连续对中,old中的位置相同,则它对应于插入。 如果new中的位置在两个连续对中相同,则对应于删除。 否则它对应于未修改的块。 路径的设置使连续操作不能是同一类型(删除不能是 立即删除)。get_chunks(old_txt, new_txt)
:(高级)生成程序,获取两个字符串并计算活动差异。 它产生4个元素元组(kind, start, stop, content)
。kind
是'd'
(删除)'i'
(插入)之一 和'k'
(保持/未修改)。start
和stop
是由 在old_txt
中执行删除和保留操作,在new_txt
中执行插入操作。content
是 那块。create_patch(old_txt, new_txt)
:(高级别)返回由cli打印的修补程序apply_patch(old_txt, patch)
:(高级)返回将patch
应用到old_txt
的结果