跳转到主要内容

生成符合Github风格的HTML格式的统一差异。

项目描述

https://secure.travis-ci.org/kilink/ghdiff.png?branch=master https://coveralls.io/repos/kilink/ghdiff/badge.png

ghdiff

生成符合Github风格的HTML格式的统一差异。

变更

0.4 (2014-06-13)

  • 添加iPython魔法(mgaitan)

0.3 (2014-04-06)

  • 修复以命令行脚本运行时的Python 3问题。

0.2

  • 读取文件时检测字符编码(Nyoroon)

  • PEP-8清理(laulaz)

  • 修复文本行过长时的显示问题(laulaz)

0.1

  • 初始发布。

diff

生成差异并输出Github风格的HTML。

>>> import ghdiff
>>> from six import print_
>>> print_(ghdiff.diff("a\nb", "b\nb"))
<style type="text/css">
...
</style>
<div class="diff">
    <div class="control">@@&nbsp;-1,2&nbsp;+1,2&nbsp;@@
    </div>
    <div class="delete">-a</div>
    <div class="">&nbsp;b</div>
    <div class="insert">+b</div>
</div>

css选项控制输出是否包含CSS。

>>> print_(ghdiff.diff("blah blah blah\nb", "blah zxqq blah\nb", css=False))
<div class="diff">
    <div class="control">@@&nbsp;-1,2&nbsp;+1,2&nbsp;@@
    </div>
    <div class="delete">-blah&nbsp;<span class="highlight">blah</span>&nbsp;blah</div>
    <div class="insert">+blah&nbsp;<span class="highlight">zxqq</span>&nbsp;blah</div>
    <div class="">&nbsp;b</div>
</div>

diff还接受表示行的字符串列表。

>>> print_(ghdiff.diff(["blah blah blah", "b"], ["blah zxqq blah", "b"]))
<style type="text/css">
...
</style>
<div class="diff">
    <div class="control">@@&nbsp;-1,2&nbsp;+1,2&nbsp;@@
    </div>
    <div class="delete">-blah&nbsp;<span class="highlight">blah</span>&nbsp;blah</div>
    <div class="insert">+blah&nbsp;<span class="highlight">zxqq</span>&nbsp;blah</div>
    <div class="">&nbsp;b</div>
</div>

IPython魔法

ghdiff还作为IPython魔法运行

In[1]: %load_ext ghdiff

In[2]: %ghdiff var1 var2

查看笔记本示例

colorize

colorize将现有的统一差异转换为Github风格的标记。

>>> print_(ghdiff.colorize("""\
... index 921100e..8b177e1 100755
... --- a/src/ghdiff.py
... +++ b/src/ghdiff.py
... @@ -10,20 +10,24 @@ def escape(text):
...  default_css = \"\"\"\
...  <style type="text/css">
...  %s
... -</style>\"\"\" % (open(os.path.join(os.path.dirname(__file__), "default.css")).read(),)
... +</style>
... +\"\"\" % (open(os.path.join(os.path.dirname(__file__), "default.css")).read(),)
... +"""))
<style type="text/css">
...
</style>
<div class="diff">
<div class="control">@@&nbsp;-10,20&nbsp;+10,24&nbsp;@@&nbsp;def&nbsp;escape(text):</div>
<div class="">&nbsp;default_css&nbsp;=&nbsp;"""&nbsp;&lt;style&nbsp;type="text/css"&gt;</div>
<div class="">&nbsp;%s</div>
<div class="delete">-&lt;/style&gt;"""&nbsp;%&nbsp;(open(os.path.join(os.path.dirname(__file__),&nbsp;"default.css")).read(),)</div>
<div class="insert">+&lt;/style&gt;</div>
<div class="insert">+"""&nbsp;%&nbsp;(open(os.path.join(os.path.dirname(__file__),&nbsp;"default.css")).read(),)</div>
<div class="insert">+</div>
</div>

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面