Git diff在抱怨,”他说;外部差异消失,停在&引用;用我的python-diff程序
这是我差异的开始部分Git diff在抱怨,”他说;外部差异消失,停在&引用;用我的python-diff程序,python,git,subprocess,return-value,git-diff,Python,Git,Subprocess,Return Value,Git Diff,这是我差异的开始部分 #!/usr/bin/env python import fileinput import difflib import subprocess import sys # for debugging def info(type, value, info): import traceback traceback.print_exception(type, value, info) print pdb.pm() sys.excepthook =
#!/usr/bin/env python
import fileinput
import difflib
import subprocess
import sys
# for debugging
def info(type, value, info):
import traceback
traceback.print_exception(type, value, info)
print
pdb.pm()
sys.excepthook = info
import pdb
#end debugging
if len(sys.argv) == 8:
# assume this was passed to git; we can of course do
# some parsing to check if we got valid git style args
args = [sys.argv[2], sys.argv[5]]
elif len(sys.argv) == 3:
args = sys.argv[1:]
else:
exit("Not a valid number of args (2 or 7) to this diff program")
print "Files: " + ' '.join(args)
for filename in args:
filetype = subprocess.check_output(['file', filename])
if filetype.find('text') == -1:
args.insert(0, 'diff')
print "A binary file was found: " + filename + ", deferring to diff"
exit(subprocess.call(args))
当遇到二进制(或非文本)文件时,它会尝试forkdiff
,以获取二进制文件是否不同。目标是将这个pythondiff程序用作git的外部different
但我收到一条可怕的“外部差异消失,停止在”消息,一旦它击中二进制文件
git如何评估我的程序?它怎么知道它死了?返回值不应该指示不同的条件吗?代码中没有退出函数。如何将
退出
替换为系统退出
#!/usr/bin/env python
import subprocess
import sys
if len(sys.argv) == 8:
# assume this was passed to git; we can of course do
# some parsing to check if we got valid git style args
args = [sys.argv[2], sys.argv[5]]
elif len(sys.argv) == 3:
args = sys.argv[1:]
else:
print "Not a valid number of args (2 or 7) to this diff program"
sys.exit(1)
print "Files: ", args
for filename in args:
filetype = subprocess.check_output(['file', filename])
if filetype.find('text') == -1:
args.insert(0, 'diff')
print "A binary file was found: " + filename + ", deferring to diff"
#sys.stdout.flush()
subprocess.call(args)
sys.exit(0)
编辑:diff
仅在没有差异时使用0退出。因此更改了代码,不使用diff的退出状态
PS:如果没有sys.stdout.flush(),
diff
输出在print
输出之前。我可能会放弃“外部diff”配置,并将python diff设置为“difftools”之一。希望它能更好地工作。它能工作,但我真的希望能够使用我的差异,例如git log-p
exit
(退出程序)和sys.exit
(也退出程序)它们是一样的。但您使用了未导入的出口。(`from sys import exit')很好。无论哪种方式,它都会做同样的事情。我必须查找git
源代码。如果不想用sys.exit替换exit,那么应该使用sys import-exit语句中的?为什么有两个?