Python 中的 Git Commit-Msg。收到 EOF 错误

Posted

技术标签:

【中文标题】Python 中的 Git Commit-Msg。收到 EOF 错误【英文标题】:Git Commit-Msg in Python. Getting an EOF Error 【发布时间】:2022-01-07 08:45:32 【问题描述】:

我正在为 .git/hooks/commit-msg 创建一个 commit-msg,当我在此行询问用户 input() 时出现 EOF 错误 response = input("Are you sure you want to commit? [y/N]: ") 如果有人能帮我找出问题所在!

Output log

#!/usr/bin/python

import sys
import re


def main():
    # open file to read every lines
    with open(sys.argv[1], "r") as fp:
        lines = fp.readlines()

        for idx, line in enumerate(lines):

            if line.strip() == "# ------------------------ >8 ------------------------":
                break

            if line[0] == "#":
                continue

    # warning message
    if (re.search('#[0-9]+$', line) is None):
        print("Warning: add issue number related to this commit.")
        # ask user to confirm until valid response
        try:
            while True:
                response = input("Are you sure you want to commit? [y/N]: ")
                if (response == 'y'):
                    sys.exit(0)
                elif (response == 'N'):
                    sys.exit(1)
        except EOFError as e:
            print(e)
    
    # successful commit
    print("Success: Perfect commit!")
    sys.exit(0)    

if __name__ == "__main__":
    main()

【问题讨论】:

【参考方案1】:

commit-msg 挂钩在没有标准输入的情况下运行(更具体地说,标准输入从 /dev/null 重定向),因此任何从标准输入读取的尝试都会立即读取 EOF。

如果标准输出是 TTY,您可以尝试从 /dev/tty 读取,但请注意,它不能保证您会拥有一个。提交可以在没有任何终端的情况下以非交互方式运行,并且钩子并非设计为交互的。在这种情况下,您必须决定要做什么。

【讨论】:

以上是关于Python 中的 Git Commit-Msg。收到 EOF 错误的主要内容,如果未能解决你的问题,请参考以下文章

git hook之commit-msg用于检测提交时间是否正确

git hook之commit-msg用于检测提交时间是否正确

git学习--commit-msg缺失导致的missing Change-Id问题分析

[原创]升级Gerrit的commit-msg,检查git commit时必须填写开发任务编号TaskID

为啥 Windows 上的 git commit-msg 与正则表达式不匹配

解决fatal: cannot run .git/hooks/commit-msg: No such file or directory的问题