如何从 git 调用实用程序 omeld (oitnb)

How to invoke utility omeld (oitnb) from git

oitnb(https://pypi.org/project/oitnb/) 看起来像是结合了yapf和black好的部分。作者声称它解决了使用名为 omeld 的实用程序将旧修订(格式化前)与格式化后提交的修订进行比较的问题。集成该实用程序的示例是针对 mercurial 的,我们使用的是 git。

我已尝试使用

注册 omeld 实用程序
get config --global diff.tool /usr/local/bin/omeld

但确实让事情起作用了,git 一直告诉它不知道 omeld。

关于如何解决这个问题有什么想法吗?

您可以尝试使用下面显示的别名,但在这样做之前您应该升级到 oitnb>0.1.3 或使用以下替代 omeld.py :

import sys
import os


def main():
    # print('omeld:', os.getcwd(), sys.argv[1:])
    assert len(sys.argv) == 3, 'omeld: expecting two arguments'
    runs = 0
    for idx, arg in enumerate(sys.argv[1:]):
        assert os.path.exists(sys.argv[1]), f'omeld: parameter {idx}, cannot find "{arg}"'
        rp = os.path.realpath(arg)
        # check if you are on a temporary directory, so there is less chance to screw up
        if rp.startswith('/tmp/') or rp.startswith('/var/tmp/'):
            runs += 1
            os.system('oitnb -q ' + rp)
    if runs > 0:
        os.system('meld ' + ' '.join(sys.argv[1:]))
    else:
        print('could not run oitnb on "{}" or "{}"'.format(*sys.argv[1:]))


if __name__ == '__main__':
    main()

因为如果您将旧版本与当前状态进行比较,则与 oitnb=0.1.3 一起分发的版本可以格式化源目录中的文件。在 git 中,这似乎更频繁地发生(似乎优化为不创建临时文件,即使例如,如果文件的当前版本自第二次修订提交以来没有更改)。

别名:

alias gomeld='git difftool --extcmd=/path/to/omeld -y'

我考虑过更改配置,但也没有成功。