我是Gerrit和Prolog的新手,我很难创建我的规则。使用我目前拥有的rules.pl,当我在运行push命令后尝试打开Gerrit窗口时,它会停止。
我想要的是制定一个规则,即每次推送到远程时,都需要在更改的文件列表中存在.txt文件。我在Prolog食谱中看到了类似的规则,但我的不正确。这是我目前所拥有的(在过去的24小时内做了一些改变):
submit_rule(S) :-
gerrit:default_submit(X),
X = .. [submit | Ls],
my_rule(Ls,R),
S = .. [submit | R].
my_rule(S1,T) :-
gerrit:commit_delta('\\.txt$),
T = label('Text-File-Must-Be-Present',ok(T)).
my_rule(S1,[label('Text-File-Must-Be-Present',need(_)) | S1]).
我想我仍然在my_rule中遗漏了一些东西。我需要确保commit_delta返回true。如果没有,那么它应该返回false并阻止推送到远程仓库。我需要更像这样的东西吗?
gerrit:commit_delta('\\.txt$),
T \= false, !,
T = label('Text-File-Must-Be-Present',ok(T)).
如果返回false则返回?再次感谢!
答案 0 :(得分:2)
不知道gerrit,但是你有几个语法问题,可能是由一些错误的文本处理步骤引起的:
gerrit:commit_delta('\\.txt$),
让原子无法终止,隐藏了后续的错误(至少在Prologs不支持SWI-Prolog扩展化合物的情况下)
T = label('Text-File-Must-Be-Present',need()).
need()
应该至少有一个参数,或者应该写为need
。
如果gerrit实现了自己的Prolog解释器,它应该能够在某处显示错误报告......
顺便说一句,第一条规则比需要的更复杂。我会写submit_rule(submit(R)) :-
gerrit:default_submit(R,submit(Ls)),
my_rule(R).
清楚地显示您忘记处理Ls