40bc3582ca
The purpose of this document is to provide a step by step introduction into implementing specific submit policies using Prolog based submit rules. Change-Id: Ib85129a40e57c1908510e8a24c27c6d5de783402 Signed-off-by: Sasa Zivkov <sasa.zivkov@sap.com>
101 lines
4.1 KiB
Plaintext
101 lines
4.1 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
|
|
|
|
.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)).`
|
|
|=============================================================================
|
|
|
|
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]
|