Gerrit 2.2.2 is now available:
Schema Change
WARNING: This release contains schema changes. To upgrade:
java -jar gerrit.war init -d site_path
WARNING: Upgrading to 2.2.x requires the server be first upgraded to 2.1.7 (or a later 2.1.x version), and then to 2.2.x.
New Features
Prolog
-
issue 971 Use Prolog Cafe for ChangeControl.canSubmit()
-
Add per-project prolog submit rule files
When loading the prolog environment, now checks refs/meta/config branch for a file called rules.pl. If it exists, consult the file. Expects a predicate called submit_rule. If no file is found, uses the default_submit predicate in common_rules.pl.
-
Add inheritance of prolog rules
Projects now inherit the prolog rules defined in their parent project. Submit results from the child project are filtered by the parent project using the filter predicate defined in the parent’s rules.pl. The results of the filtering are then passed up to the parent’s parent and filtered, repeating this process up to the top level All-Projects.
-
Load precompiled prolog rules from jar file
Looks in (site)/cache/rules for a jar file called: rules-(sha1 of rules.pl).jar Loads the precompiled prolog rules and uses them instead of consulting rules.pl. If the jar does not exist, consults rules.pl. If rules.pl does not exist, uses the default submit rules.
-
Cmd line tool rulec to compile jar from prolog
Rulec takes rules.pl from the refs/meta/config branch and creates a jar file named rules-(sha1 of rules.pl).jar in (sitepath)/cache/rules. Generates temporary prolog, java src, and class files which are deleted afterwards.
-
prolog-shell: Simple command line Prolog interpreter
Define a small interactive interpreter that users or site administrators can play around with by downloading the Gerrit WAR file and executing: java -jar gerrit.war prolog-shell
Prolog Predicates
-
Add Prolog Predicates to check commit messages and edits
commit_message returns the commit message as a symbol.
commit_message_matches takes in a regex pattern and checks it against the commit message.
commit_edits takes in a regex pattern for filenames and a regex pattern for edits. For all files in a commit that match the filename regex. Returns true if the edits in any of those files match the edit regex.
-
Add Prolog Predicates to expose commit filelist
commit_delta/1,3,4 each takes a regular expression and matches it to the path of all the files in the latest patchset of a commit. If applicable (changes where the file is renamed or copied), the regex is also checked against the old path.
commit_delta/1 returns true if any files match the regex
commit_delta/3 returns the changetype and path, if the changetype is renamed, it also returns the old path. If the changetype is rename, it returns a delete for oldpath and an add for newpath. If the changetype is copy, an add is returned along with newpath.
commit_delta/4 returns the changetype, new path, and old path (if applicable).
-
Add Prolog predicates that expose the branch, owner, project, and topic of a change, the author and committer of the most recent patchset in the change, and who is the current user.
-
For user-related predicates, if the user is not a gerrit user, will return user(anonymous) or similar. Author and committer predicates for commits return user(id), name, and email.
-
Make max_with_block/4 public
This is the current rule generally applied to a label function. Make it exportable for now until we can come back and clean up the legacy approval data code.
Web
-
Support in Firefox delete key in NpIntTextBox
Pressing the delete key while being in a NpIntTextBox (e.g. in the text box for the Tab Width or Columns preference when comparing a file) now works in Firefox.
-
Make sure special keys work in text fields
There is a bug in gwt 2.1.0 that prevents pressing special keys like Enter, Backspace etc. from being properly recognized and so they have no effect.
ChangeScreen
-
issue 855 Indicate outdated dependencies on the ChangeScreen
If a change dependency is no longer the latest patchSet for that change, mark it OUTDATED in the dependencies table and make its row red, and add a warning message to the dependencies header, also keep the dependencies disclosure panel open even when an outdated dependent change is merged. Additionally make the link for dependencies link to the exact patchSet of the dependent change.
-
issue 881 Allow adding groups as reviewer
On the ChangeScreen it is now possible to add a group as reviewer for a change. When a group is added as reviewer the group is resolved and all its members are added as reviewers to the change.
-
Update approvals in web UI to adapt to rules.pl submit_rule
The UI now shows whatever the results of the submit_rule are, which permits the submit_rule to make an ApprovalCategory optional, or to make a new label required.
Diff Screen
-
Add top level menus for a new PatchScreen header
Modify the PatchScreen so that the header contents is selectable using top level menus. Allow the header to display the commit message, the preferences, the Patch Sets, or the File List.
-
Add SideBySide and Unified links to Differences top level menus
These new menu entries allow a user to switch view types easily without returning to the ChangeScreen. Also, they double as a way to hide the header on the PatchScreen (when clicking on the currently displayed type).
-
Add user pref to retain PatchScreen Header when changing files
-
Flip the orientation of PatchHistory Table
-
Remove the Change SHA1: from the PatchScreen title
-
Remove scrollbar from Commit Message
-
Allow comment editing with single click on line numbers
Make it easier to comment (and now possible on android devices which zoom on double click) on a patch by simply clicking on the line number.
-
Add a "Save" button to the PatchScriptSettingsPanel
The "Update" button now only updates the display. Additionally, for logged in users, a "Save" button now behaves the way that "Update" used to behave for logged in users.
-
issue 665 Display merge changes as differences from automatic result
Instead of displaying nothing for a two-parent merge commit, compute the automatic merge result and display the difference between the automatic result that Git would create, and the actual result that was uploaded by the author/committer of the merge.
Groups
-
Add menu to AccountGroupScreen
This change introduces a menu in the AccountGroupScreen and different screens for subsets of the functionality (similar as it’s done for the ProjectScreen). Links from other screens to the AccountGroupScreen are resolved depending on the group type.
-
Display groupUUID on AccountGroupInfoScreen
To assign a privilege to a new group by editing the project.config file, the new group needs to be added to the groups file in the refs/meta/config branch which requires the UUID of the group to be known.
Project Access
-
Automatically add new rule when adding new permission
If a new permission was added to a block, immediately create the new group entry box and focus it, so the user can assign the permission.
-
Only show Exclusive checkbox on reference sections
In the access editor, hide the Exclusive checkbox on the Global Capabilities section since it has no inheritance and the exclusive bit isn’t supported.
-
Disable editing after successful save of Access screen
When the access has been successfully modified for a project, switch back to the "read-only" view where the widgets are all disabled and the Edit button is enabled.
Project Branches
-
Display refs/meta/config branch on ProjectBranchesScreen
The new refs/meta/config branch was not shown in the ProjectBranchesScreen. Since refs/meta/config is not just any branch, but has a special meaning to Gerrit it is now displayed at the top below HEAD.
-
Highlight HEAD and refs/meta/config
Since HEAD and refs/meta/config do not represent ordinary branches, highlight their rows with a special style in the ProjectBranchesScreen.
URLs
-
Modernize URLs to be shorter and consistent
Instead of http://site/change,1234 we now use a slightly more common looking http://site//c/1234 URL to link to a change.
Files within a patch set are now denoted below the change, as in http://site/#/c/1234/1/src/module/foo.c
Also fix the dynamic redirects of http://site/1234 and http://site/r/deadbeef to jump directly to the corresponding change if there is exactly one possible URL.
Entities that have multiple views suffix the URL with ",view-name" to indicate which view the user wants to see.
-
issue 1018 Accept ~ in linkify() URLs
SSH
-
Added a set-reviewers ssh command
-
Support removing more than one reviewer at once
This way we can batch delete reviewers from a change.
-
issue 881 Support adding groups as reviewer by SSH command
With the set-reviewers SSH command it is now possible to also add groups as reviewer for a change.
-
Fail review command for changing labels when change is closed
If a reviewer attempts to change a review label (approval) after a change is closed using the ssh review command, cause it to fail the command and output a message.
-
ls-projects: Fix display of All-Projects under --tree
Everything should be nested below All-Projects, since that is actually the root level.
-
ls-projects: Add --type to filter by project type
ls-projects now supports --type code|permissions|all. The default is code which now skips permissions only projects, restoring the output to what appears from Gerrit 2.1.7 and earlier.
-
show-caches: Improve memory reporting
Change the way memory is reported to show the actual values, and the equation that determines how these are put together to form the current usage. Include some additional data including server version, current time, process uptime, active SSH connections, and tasks in the task queue. The --show-jvm option will report additional data about the JVM, and tell the caller where it is running.
Queries
-
Output patchset creation date for query command.
-
issue 1053 Support comments option in query command
Query SSH command will show all comments if option --comments is used. If --comments is used together with --patch-sets all inline comments are included in the output.
Config
-
Move batch user priority to a capability
Instead of using a magical group, use a special capability to denote users that should get the batch priority behavior.
-
issue 742 Make administrator, create-project a global capability
This gets rid of the special entries in system_config and gerrit.config related to who the Administrators group is, or which groups are permitted to create new projects on this server.
-
issue 48 & 742 Add fine-grained capabilities for administrative actions
The Global Capabilities section in All-Projects can now be used to grant subcommands that are available over SSH and were previously restricted to only Administrators.
-
Disallow project names ending in "/"
-
issue 934 query: Enable configurable result limit
Allow site administrators to configure the query limit for user to be above the default hard-coded value of 500 by adding a global [capability] block to All-Projects project.config file with group(s) that should have different limits.
-
Introduced a new PermissionRule.Action: BLOCK.
Besides already existing ALLOW and DENY actions this change introduces the BLOCK action in order to enable blocking some permission rules globally.
-
issue 813 Use remote.name.replicatePermissions to hide permissions
Administrators can now disable replication of permissions-only projects and the per-project refs/meta/config in replication.config by setting the replicatePermissions field to false.
-
Add a Restored.vm template and use it.
The restore action has been erroneously using the Abandoned.vm template. Create a template and sender for the restorecommand.
-
sshd.advertisedAddress: specify the displayed SSH host/port
This allows aliases which redirect to gerrit’s ssh port (say from port 22) to be setup and advertised to users.
Dev
-
Updated eclipse settings for 3.7 and m2e 1.0
-
Fix build in m2eclipse 1.0
Ignore the antrun and the build-helper-maven-plugin tasks in m2eclipse.
-
Make Gerrit with gwt 2.3.0 run in gwtdebug mode
-
Fix a number of build warnings that have crept in
-
Accept email address automatically
Enable Gerrit to accept email address automatically in "DEVELOPMENT_BECOME_ANY_ACCOUNT" mode without a confirmation email.
-
Added clickable user names at the BecomeAnyAccountLoginServlet.
The first 5 (by accountId) user names are displayed as clickable links. Clicking a user name logs in as this user, speeding up switching between different users when using the DEVELOPMENT_BECOME_ANY_ACCOUNT authentication type.
Miscellaneous
-
Permit adding reviewers to closed changes
Permit adding a reviewer to closed changes to support post-submit discussion threads.
-
issue 805 Don’t check for multiple change-ids when pushing directly to refs/heads.
-
Avoid costly findMergedInto during push to refs/for/*
No longer close a change when a commit is pushed to res/for/* and the Change-Id in the commit message footer matches another commit on an existing branch or tag.
-
Allow serving static files in subdirectories
-
issue 1019 Normalize OpenID URLs with http:// prefix
No longer violate OpenID 1.1 and 2.0, both of which require OpenIDs to be normalized (http:// added).
-
Allow container-based authentication for git over http
Gerrit was insisting on DIGEST authentication when doing git over http. A new boolean configuration parameter auth.trustContainerAuth allows gerrit to be configured to trust the container to do the authentication.
-
issue 848 Add rpc method for GerritConfig
Exposes what types of reviews are possible via json rpc, so that the Eclipse Reviews plugin currently can parse the javascript from a gerrit page load.
Performance
-
Bumped Brics version to 1.11.8
This Brics version fixes a performance issue in some larger Gerrit systems.
-
Add permission_sort cache to remember sort orderings
Cache the order AccessSections should be sorted in, making any future sorting for the same reference name and same set of section patterns cheaper.
-
Refactor how permissions are matched by ProjectControl, RefControl
More aggressively cache many of the auth objects at a cost of memory, but this should be an improvement in response times.
-
Substantially speed up pushing changes for review
Pushing a new change for review checks if the change is related to the branch it’s destined for. It used to do this in a way that required a topo-sort of the rev history, and now uses JGit’s merge-base functionality.
-
Add cache for tag advertisements
To make the general case more efficient, introduce a cache called "git_tags".
On a trivial usage of the Linux kernel repository, the average running time of the VisibleRefFilter when caches were hot was 7195.68 ms. With this commit, it is a mere 5.07 milliseconds on a hot cache. A reduction of 99% of the running time.
-
Don’t set lastCheckTime in ProjectState
The lastCheckTime/generation fields are actually a counter that is incremented using a background thread. The values don’t match the system clock, and thus reading System.currentTimeMillis() during the construction of ProjectState is a waste of resources.
Upgrades
-
Upgrade to GWT 2.3.0
-
Upgrade to Gson to 1.7.1
-
Upgrade to gwtjsonrpc 1.2.4
-
Upgrade to gwtexpui 1.2.5
-
Upgrade to Jsch 0.1.44-1
-
Upgrade to Brics 1.11.8
Bug Fixes
-
Fix: Issue where Gerrit could not linkify certain URLs
-
issue 1015 Fix handling of regex ref patterns in Access panel
regex patterns such as "^refs/heads/[A-Z]{2,}-[0-9]+.*" were being prefixed with "refs/heads/", resulting in invalid reference patterns like "refs/heads/^refs/heads/[A-Z]{2,}-[0-9]+.*".
-
issue 1002 Check for and disallow pushing of invalid refs/meta/config
If the project.config or groups files are somehow invalid on the refs/meta/config branch, or would be made invalid due to a bad code review being submitted to this branch, reject the user’s attempt to push.
-
issue 1002 Fix NPE in PermissionRuleEditor when group lacks UUID
If a group does not have an entry in the "groups" table within the refs/meta/config branch render the group name as a span, without the link instead of crashing the UI.
-
issue 972 Filter access section rules to only visible groups
Users who are not the owner of an access section can now only see group names and rules for groups which they are a member of, are visible to all users, or that they own.
-
Correctly handle missing refs/meta/config branch
If the refs/meta/config branch did not exist, getRevision() no longer throws an NPE when trying to access the ProjectDetail.
-
Allow loading Project Access when there is no refs/meta/config
Enable loading the access screen with a null revision field, and on save of any edits require the branch to be new.
-
create-project: Fix creation vs. replication order
Create the project on remote mirrors before creating either the refs/meta/config or the initial empty branch. This way those can be replicated to the remote mirrors once they have been created locally.
-
create-project: Bring back --permissions-only flag
If a project is permissions only, assign HEAD to point to refs/meta/config. This way the gitweb view of the project shows the permissions history by default, and clients that clone the project are able to get a detached HEAD pointing to the current permission state, rather than an empty repository.
-
create-project: Fix error reporting when repository exists
If a repository already exists, tell the user it already is available, without disclosing the server side path from gerrit.basePath.
-
Do not log timeout errors on upload and receive connections
-
Only automatically create accounts for LDAP systems
If the account management is LDAP, try to automatically create accounts by looking up the data in LDAP. Otherwise fail and reject an invalid account reference that was supplied on the command line via SSH.
-
Add missing RevWalk.reset() after checking merge base
This fixes an exception from RevWalk when trying to push a new commit for review.
-
issue 1069 Do not send an email on reviews when there is no message.
No longer send an email when reviewing a change via ssh, and the change message is blank (when no change message is actually added to the review).
-
Ignore PartialResultException from LDAP.
This exception occurs when the server isn’t following referrals for you, and thus the result contains a referral. That happens when you’re using Active Directory. You almost certainly don’t really want to follow referrals in AD anyways, so just ignore these exceptions, so we can still use the actual data.
-
issue 518 Fix MySQL counter resets
gwtorm 1.1.5 was patched to leave in the dummy row that incremented the counter, ensuring the server will use MAX() + 1 instead of 1 on the next increment after restart.
-
Don’t delete account_id row on MySQL
If the table is an InnoDB table deleting the row after allocation may cause the sequence to reset when the server restarts, giving out duplicate account_ids later.
Documentation
New Documents
-
First Cut of Gerrit Walkthrough Introduction documentation.
Add a new document intended to be a complement for the existing reference documentation to allow potential users to easily get a feel for how Gerrit is used, where it fits and whether it will work for them.
-
Introducing a quick and dirty setup tutorial
The new document covers quick installation, new project and first upload. It contains lots of quoted output, with a demo style to it.
Access Control
-
Code review
-
Conversion table between 2.1 and 2.2
Add a table to ease conversion from 2.1.x. The table tries to address the old permissions one by one except for the push tag permission which in effect needed two permissions to work properly. This should be familiar to the administrator used to the 2.1.x permission model however.
-
Reformatted text
-
Verify
Updated some text in the Per project-section and edited the verified section to reflect the current label.
-
Capabilities
Adds general information about global capabilities, how the server ownership is administered.
-
Added non-interactive users
This change adds the non-interactive user group. It also adds that groups can be members of other groups. The groups are now sorted in alphabetical order.
-
Reordering categories
Access categories are now sorted to match drop down box in UI
Other Documentation
-
Added additional information on the install instructions.
The installation instructions presumes much prior knowledge, make some of that knowledge less implicit.
-
Provides a template to the download example.
Clarifies that the example host must be replaced with proper hostname.
-
Provided an example on how to abandon a change from the command line
-
update links from kernel.org to code.google.com
-
Rename -- All Projects -- in documentation to All-Projects
-
Explain Automatically resolve conflicts
-
Update documentation for testing SSH connection
The command output that is shown in the example and the description how to set the ssh username were outdated.
-
Remove unneeded escape characters from the documentation
The old version of asciidoc required certain characters to be escaped with a backslash and when the upgrade to the new version was done all those backslashes that were used for escaping became visible.
-
Clean up pgm-index
Break out the utilities into their own section, and correct some of the item descriptions.
-
Update manual project creation instructions
-
Update project configuration documentation
Remove the textual reference to obsolete SQL insert statement to create new projects.
-
Clean up command line documentation, examples
The formatting was pretty wrong after upgrading to a newer version of AsciiDoc, so fix up most of the formatting, correct some order of commands in the index, and make create-project conform to the same format used by create-account and create-group.
-
Correct syntax of SQL statement for inserting approval category