gerrit/Documentation/prolog-change-facts.txt
Changcheng Xiao a5d01788a9 Add an 'unresolved_comments_count' prolog fact for each change
This change introduces a new prolog fact for the number of unresolved
comments. This fact can be further used by some prolog rules to block
the submission of changes with some unresolved comments.

A new example is also added to the prolog cookbook to show how to
use this new fact.

Change-Id: Iadc48f0758137b0071484265c22ebcb9bc2d2b26
2017-03-03 06:09:07 +00:00

114 lines
4.5 KiB
Plaintext

= Prolog Facts for Gerrit Changes
Prior to invoking the `submit_rule(X)` query for a change, Gerrit initializes
the Prolog engine with a set of facts (current data) about this change.
The following table provides an overview of the provided facts.
[IMPORTANT]
All the terms listed below are defined in the `gerrit` package. To use any
of them we must use a qualified name like `gerrit:change_branch(X)`.
.Prolog facts about the current change
[grid="cols"]
[options="header"]
|=============================================================================
|Fact |Example |Description
|`change_branch/1` |`change_branch('refs/heads/master').`
|Destination Branch for the change as string atom
|`change_owner/1` |`change_owner(user(1000000)).`
|Owner of the change as `user(ID)` term. ID is the numeric account ID
|`change_project/1` |`change_project('full/project/name').`
|Name of the project as string atom
|`change_topic/1` |`change_topic('plugins').`
|Topic name as string atom
|`commit_author/1` |`commit_author(user(100000)).`
|Author of the commit as `user(ID)` term. ID is the numeric account ID
|`commit_author/3` |`commit_author(user(100000), 'John Doe', 'john.doe@example.com').`
|ID, full name and the email of the commit author. The full name and the
email are string atoms
|`commit_committer/1` |`commit_committer()`
|Committer of the commit as `user(ID)` term. ID is the numeric account ID
|`commit_committer/3` |`commit_committer()`
|ID, full name and the email of the commit committer. The full name and the
email are string atoms
.2+|`commit_label/2` |`commit_label(label('Code-Review', 2), user(1000000)).`
.2+|Set of votes on the last patch-set
|`commit_label(label('Verified', -1), user(1000001)).`
|`commit_message/1` |`commit_message('Fix bug X').`
|Commit message as string atom
|`commit_stats/3` |`commit_stats(5,20,50).`
|Number of files modified, number of insertions and the number of deletions.
.4+|`current_user/1` |`current_user(user(1000000)).`
.4+|Current user as one of the four given possibilities
|`current_user(user(anonymous)).`
|`current_user(user(peer_daemon)).`
|`current_user(user(replication)).`
|`uploader/1` |`uploader(user(1000000)).`
|Uploader as `user(ID)` term. ID is the numeric account ID
|`unresolved_comments_count/1` |`unresolved_comments_count(0).`
|The number of unresolved comments as an integer atom
|=============================================================================
In addition Gerrit provides a set of built-in helper predicates that can be used
when implementing the `submit_rule` predicate. The most common ones are listed in
the following table.
.Built-in Prolog helper predicates
[grid="cols"]
[options="header"]
|=============================================================================
|Predicate |Example usage |Description
|`commit_delta/1` |`commit_delta('\\.java$').`
|True if any file name from the last patch set matches the given regex.
|`commit_delta/3` |`commit_delta('\\.java$', T, P)`
|Returns the change type (via `T`) and path (via `P`), if the change type
is `rename`, it also returns the old path. If the change type is `rename`, it
returns a delete for old path and an add for new path. If the change type
is `copy`, an add is returned along with new path.
Possible values for the change type are the following symbols: `add`,
`modify`, `delete`, `rename`, `copy`
|`commit_delta/4` |`commit_delta('\\.java$', T, P, O)`
|Like `commit_delta/3` plus the old path (via `O`) if applicable.
|`commit_edits/2` |`commit_edits('/pom.xml$', 'dependency')`
|True if any of the files matched by the file name regex (first parameter)
have edited lines that match the regex in the second parameter. This
example will be true if there is a modification of a `pom.xml` file such
that an edited line contains or contained the string `'dependency'`.
|`commit_message_matches/1` |`commit_message_matches('^Bug fix')`
|True if the commit message matches the given regex.
|=============================================================================
[NOTE]
For a complete list of built-in helpers read the `gerrit_common.pl` and
all Java classes whose name matches `PRED_*.java` from Gerrit's source code.
GERRIT
------
Part of link:index.html[Gerrit Code Review]
SEARCHBOX
---------