我用python编写了一个pre-receive钩子,以确保作者日期不晚于服务器日期,代码如下:
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的提交,钩子并没有像预期的那样工作。在
在编辑:一些背景信息,我们的程序中有很多计时器,我的同事为了调试目的更改了他们的系统时间,而在提交更改时忘记了更改时间。我只想编写一个钩子来检测这种情况,并在将来的时间内拒绝提交。在
你需要更具体地说明你的期望和你所观察到的;但我想我知道问题出在哪里。在
请看以下内容:
注意,作者和提交者日期的末尾都有这个额外的
^{pr2}$-0700
。现在:如果您只使用
%at
,您将得到原始时间,而不使用-0700
时区加法。使用date=raw pretty=format:%ad
来获得两者,然后应用偏移量(注意,偏移量是小时和分钟的偏移量,因此对于那些奇怪的3小时30分钟时区,您将得到类似于-0330
)的内容。在(我还建议避免}命令比您自己将它们分解成argv单词更复杂:
shell=True
这里,这只会使您的git log
或{例如。)
相关问题 更多 >
编程相关推荐