Gerrit Prolog规则 - 需要特定的文件类型

时间:2015-09-17 16:20:17

标签: prolog gerrit

我是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则返回?再次感谢!

1 个答案:

答案 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