|  | = 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(user(100000)).` | 
|  | |Committer of the commit as `user(ID)` term. ID is the numeric account ID | 
|  |  | 
|  | |`commit_committer/3` |`commit_committer(user(100000), 'John Doe', 'john.doe@example.com').` | 
|  | |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_parent_count/1`   |`commit_parent_count(1).` | 
|  | |Number of parent commits of a commit. Can be used to detect merge commits | 
|  |  | 
|  | |`commit_stats/3`   |`commit_stats(5,20,50).` | 
|  | |Number of files modified, number of insertions and the number of deletions. | 
|  |  | 
|  | |`files/3` |`files(file('modules/jgit', 'A', 'SUBMODULE')).` | 
|  |  | 
|  | |`files(file('a.txt', 'M', 'REGULAR')).' | 
|  |  | 
|  | A list of tuples: The first argument is a file name of the current patchset. | 
|  | The second argument is the modification type of this file, with the options being | 
|  | 'A' for 'added', 'M' for 'modified', 'D' for 'deleted', 'R' for 'renamed', 'C' for | 
|  | 'COPIED' and 'W' for 'rewrite'. | 
|  | The third argument is the type of file, with the options being a submodule file | 
|  | 'SUBMODULE' and a non-submodule file being 'REGULAR'. | 
|  |  | 
|  | |`pure_revert/1`     |`pure_revert(1).` | 
|  | |link:rest-api-changes.html#get-pure-revert[Pure revert] as integer atom (1 if | 
|  | the change is a pure revert, 0 otherwise) | 
|  |  | 
|  | |`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 | 
|  | --------- |