繁体   English   中英

Git在Python中预接收钩子以检查作者时间

[英]Git pre-receive hook in python to check author time

我在python中编写了一个预接收钩子,以确保作者日期不晚于服务器日期,这是代码:

import datetime, sys, subprocess

def validate_author_date(commit):
    p = subprocess.Popen(['git show --pretty=format:"%at"', commit],
    shell=True, stdout=subprocess.PIPE)
    x = p.stdout.readline()
    if x.strip():
        ad = datetime.date.fromtimestamp(int(x))
        return ad <= datetime.date.today()
    else:
        return False

for line in sys.stdin:
    (base, commit, ref) = line.strip().split()
    if not validate_author_date(commit):
        sys.exit('Date error: commit date is later than sys date. commit hash is %s' % commit)

这是问题所在:假设服务器时间为2015-3-23,我推送了一个日期为2015-3-25的提交,并且该钩子无法正常工作。


编辑:一些背景信息,我们的程序中有很多计时器,我的同事出于调试目的而更改了系统时间,而忘记了提交更改时的时间。 我只想写一个钩子来检测这种情况并拒绝以后的提交。

您需要更详细地说明您的期望和观察结果; 但我想我仍然知道问题出在哪里。

看一下以下内容:

$ git cat-file -p HEAD
tree afd02e8830a8d41398d0d77983ae7783e0382b39
parent 46d403f13e5cb6d2b6bee6f942a679ea8978b9fa
author Junio C Hamano <gitster@pobox.com> 1426883513 -0700
committer Junio C Hamano <gitster@pobox.com> 1426884806 -0700

Post 2.3 cycle (batch #11)

Signed-off-by: Junio C Hamano <gitster@pobox.com>

请注意,作者和提交者的日期结尾都带有这个额外的-0700 现在:

git log -1 --pretty=format:%ad HEAD
Fri Mar 20 13:31:53 2015 -0700
$ git log -1 --pretty=format:%at HEAD
1426883513
$ git log -1 --date=raw --pretty=format:%ad HEAD
1426883513 -0700
$ 

如果仅使用%at ,则无需添加 -0700时区即可获得原始时间。 使用--date=raw --pretty=format:%ad两者都可以,然后应用偏移量(请注意,这是一个小时和几分钟的偏移量,因此对于那些奇数3小时和30分钟的偏移量时区,您会看到类似-0330 )的信息。

(我也建议在这里避免shell=Truegit log会使您的git loggit show命令比您自己将它们分解成argv单词更复杂:

p = subprocess.Popen(['git', 'log', '-1',
    '--date=raw', '--pretty=format:%ad', commit],
    stdout=subprocess.PIPE)

例如。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM