| = Release notes for Gerrit 2.5 |
| |
| Gerrit 2.5 is now available: |
| |
| link:https://www.gerritcodereview.com/download/gerrit-full-2.5.war[https://www.gerritcodereview.com/download/gerrit-full-2.5.war] |
| |
| Gerrit 2.5 includes the bug fixes done with |
| link:ReleaseNotes-2.4.1.html[Gerrit 2.4.1] and |
| link:ReleaseNotes-2.4.2.html[Gerrit 2.4.2]. These bug fixes are *not* |
| listed in these release notes. |
| |
| == Schema Change |
| *WARNING:* This release contains schema changes. To upgrade: |
| ---- |
| java -jar gerrit.war init -d site_path |
| ---- |
| |
| *WARNING:* Upgrading to 2.5.x requires the server be first upgraded to 2.1.7 (or |
| a later 2.1.x version), and then to 2.5.x. If you are upgrading from 2.2.x.x or |
| newer, you may ignore this warning and upgrade directly to 2.5.x. |
| |
| === Warning on upgrade to schema version 68 |
| |
| The migration to schema version 68, may result in a warning, which can |
| be ignored when running init in the interactive mode. |
| |
| E.g. this warning may look like this: |
| |
| ---- |
| Upgrading database schema from version 67 to 68 ... |
| warning: Cannot create index for submodule subscriptions |
| Duplicate key name 'submodule_subscriptions_access_bySubscription' |
| Ignore warning and proceed with schema upgrade [y/N]? |
| ---- |
| |
| This migration is creating an index for the |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-submodules.html[submodule feature] in |
| Gerrit. When the submodule feature was introduced the index was only |
| created when a new site was initialized, but not when Gerrit was |
| upgraded. This migration tries to create the index, but it will only |
| succeed if the index does not exist yet. If the index exists already, |
| the creation of the index will fail. There was no database independent |
| way to detect this case and this is why this migration leaves it to the |
| user to decide if a failure should be ignored or not. If from the error |
| message you can see that the migration failed because the index exists |
| already (as in the example above), you can safely ignore this warning. |
| |
| == Upgrade Warnings |
| |
| [[replication]] |
| === Replication |
| |
| Gerrit 2.5 no longer includes replication support out of the box. |
| Servers that reply upon `replication.config` to copy Git repository |
| data to other locations must also install the replication plugin. |
| |
| === Cache Configuration |
| |
| Disk caches are now backed by individual H2 databases, rather than |
| Ehcache's own private format. Administrators are encouraged to clear |
| the `'$site_path'/cache` directory before starting the new server. |
| |
| The `cache.NAME.diskLimit` configuration variable is now expressed in |
| bytes of disk used. This is a change from previous versions of Gerrit, |
| which expressed the limit as the number of entries rather than bytes. |
| Bytes of disk is a more accurate way to size what is held. Admins that |
| set this variable must update their configurations, as the old values |
| are too small. For example a setting of `diskLimit = 65535` will only |
| store 64 KiB worth of data on disk and can no longer hold 65,000 patch |
| sets. It is recommended to delete the diskLimit variable (if set) and |
| rely on the built-in default of `128m`. |
| |
| The `cache.diff.memoryLimit` and `cache.diff_intraline.memoryLimit` |
| configuration variables are now expressed in bytes of memory used, |
| rather than number of entries in the cache. This is a change from |
| previous versions of Gerrit and gives administrators more control over |
| how memory is partitioned within a server. Admins that set this variable |
| must update their configurations, as the old values are too small. |
| For example a setting of `memoryLimit = 1024` now means only 1 KiB of |
| data (which may not even hold 1 patch set), not 1024 patch sets. It |
| is recommended to set these to `10m` for 10 MiB of memory, and |
| increase as necessary. |
| |
| The `cache.NAME.maxAge` variable now means the maximum amount of time |
| that can elapse between reads of the source data into the cache, no |
| matter how often it is being accessed. In prior versions it meant how |
| long an item could be held without being requested by a client before |
| it was discarded. The new meaning of elapsed time before consulting |
| the source data is more useful, as it enables a strict bound on how |
| stale the cached data can be. This is especially useful for slave |
| servers account and permission data, or the `ldap_groups` cache, where |
| updates are often made to the source without telling Gerrit to reload |
| the cache. |
| |
| == New Features |
| |
| === Plugins |
| |
| The Gerrit server functionality can be extended by installing plugins. |
| Depending on how tightly the extension code is coupled with the Gerrit |
| server code, there is a distinction between |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#plugin[plugins] and |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#extension[extensions]. |
| |
| * link:#replication[Move replication logic to replication plugin] |
| + |
| This splits all of the replication code out of the core server |
| and moves it into a standard plugin. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html[Documentation about |
| plugin development] including instructions for: |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#getting-started[how to get |
| started with plugin development] |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#deployment[plugin |
| deployment/installation] |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#API[API for plugins and |
| extensions] |
| |
| * Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#ssh[SSH command |
| plugins] |
| + |
| Allows plugin developers to declare additional SSH commands. |
| |
| * Enable link:#ssh-alias[aliases for SSH commands] |
| + |
| Site administrators can alias SSH commands from a plugin into the |
| `gerrit` namespace. |
| + |
| The aliases are configured statically at server startup, but are |
| resolved dynamically at invocation time to the currently loaded |
| version of the plugin. If the plugin is not loaded, or does not |
| define the command, "not found" is returned to the user. |
| |
| * Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#http[HTTP |
| plugins] |
| + |
| Plugins may contribute to the /plugins/NAME/ URL space. |
| |
| * Automatic registration of plugin bindings |
| + |
| If a plugin has no modules declared in the manifest, automatically |
| generate the modules for the plugin based on the class files that |
| appear in the plugin and the `@Export` annotations that appear on |
| these concrete classes. |
| + |
| For any non-abstract command that extends SshCommand, plugins may |
| declare the command with `@Export("name")` to |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#ssh[bind the implementation |
| as that SSH command]. |
| + |
| Likewise link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#http[HTTP servlets |
| can also be bound to URLs]. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#data-directory[Support a data |
| directory for plugins on demand] |
| |
| * Support serving static/ and Documentation/ from plugins |
| + |
| The static/ and Documentation/ resource directories of a plugin can be |
| served over HTTP for any loaded and running plugin, even if it has no |
| other HTTP handlers. This permits a plugin to supply icons or other |
| graphics for the web UI, or documentation content to help users learn |
| how to use the plugin. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#documentation[Auto-formatting |
| of plugin HTTP pages from Markdown files] |
| + |
| If Gerrit detects that a requested plugin resource does not exist, but |
| instead a file with a `.md` extension does exist, Gerrit opens the |
| `.md` file and reformats it as html. |
| |
| * Support of link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#macros[macros in |
| Markdown plugin documentation] |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#auto-index[Automatic |
| generation of an index for the plugin documentation] |
| |
| * Support for audit plugins |
| + |
| Plugins can implement an `AuditListener` to be informed about auditable |
| actions: |
| + |
| ---- |
| @Listener |
| public class MyAuditTrail extends AuditListener |
| ---- |
| + |
| The plugin must define a plugin module that binds the implementation of |
| the audit listener in the `configure()` method: |
| + |
| ---- |
| DynamicSet.bind(binder(), AuditListener.class).to(MyAuditTrail.class); |
| ---- |
| |
| * Web UI for plugins |
| + |
| Administrators can see the list of installed plugins in the WebUI |
| under `Admin` > `Plugins`. For each plugin the plugin status is shown |
| and it is possible to navigate to the plugin documentation. |
| |
| * Servlet to list plugins |
| + |
| Administrators can retrieve plugin information from a REST interface |
| by loading `<server-url>/a/plugins/`. |
| |
| * Support SSH commands to |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-ls.html[list the installed |
| plugins] |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-install.html[install plugins] |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-enable.html[enable plugins] |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-remove.html[disable plugins] |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-reload.html[reload plugins] |
| |
| * Support installation of core plugin on site initialization |
| |
| * Automatically load/unload/reload plugins |
| + |
| The PluginScanner thread runs every 1 minute by default and loads any |
| newly created plugins, unloads any deleted plugins, and reloads any |
| plugins that have been modified. |
| + |
| The check frequency can be configured by setting |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#plugins.checkFrequency[ |
| plugins.checkFrequency] in the Gerrit config file. By configuration |
| the scanner can also be disabled. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#classpath[Loading of plugins |
| in own ClassLoader] |
| |
| * Plugin cleanup in the background |
| + |
| When a plugin is stopped, schedule a Plugin Cleaner task to run |
| 1 minute later to try and clean out the garbage and release the |
| JAR from `$site_path/tmp`. |
| |
| * Export `LifecycleListener` as extension point |
| + |
| Extensions may need to know when they are starting or stopping. |
| Export the interface that they can use to learn this information. |
| |
| * Support injection of `ServerInformation` into extensions and plugins |
| + |
| Plugins can take this value by injection and learn the current |
| server state during their own LifecycleListener. This enables a |
| plugin to determine if it is loading as part of server startup, or |
| because it was dynamically installed or reloaded by an administrator. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#getting-started[Maven |
| archetype for creating gerrit plugin projects] |
| |
| * Enables the use of session management in Jetty |
| + |
| This enables plugins to make use of servlet sessions. |
| |
| === REST API |
| Gerrit now supports a REST like API available over HTTP. The API is |
| suitable for automated tools to build upon, as well as supporting some |
| ad-hoc scripting use cases. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html[Documentation of the REST API] |
| |
| * Support REST endpoints to |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-changes.html[query changes] |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-projects.html[list projects] |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-projects.html#suggest-projects[suggest |
| projects] |
| ** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-accounts.html#list-account-capabilities[query |
| the global capabilities of the calling user] |
| |
| * Support link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html#authentication[anonymous |
| and authenticated access] to the REST endpoints |
| |
| * Support link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html#output[JSON output |
| format] for the REST endpoints |
| |
| The new REST API is used from the Gerrit WebUI. |
| |
| Some of the methods from the old internal JSON-RPC interface were |
| completely replaced by the new REST API and got deleted: |
| |
| * `ProjectAdminService.visibleProjects(AsyncCallback<ProjectList>)` |
| * `ProjectAdminService.suggestParentCandidates(AsyncCallback<List<Project>>)` |
| * `ChangeListService.myStarredChangeIds(AsyncCallback<Set<Change.Id>>)` |
| * `ChangeListService.allQueryNext(String, String, int, AsyncCallback<SingleListChangeInfo>)` |
| * `ChangeListService.allQueryPrev(String, String, int, AsyncCallback<SingleListChangeInfo>)` |
| * `ChangeListService.forAccount(Account.Id, AsyncCallback<AccountDashboardInfo>)` |
| |
| [[query-deprecation]] |
| In addition the `/query` API has been deprecated. By default it is |
| still available but server administrators may disable it by setting |
| the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#site.enableDeprecatedQuery[ |
| `site.enableDeprecatedQuery`] parameter in the Gerrit config file. This |
| allows to enforce tools to move to the new API. |
| |
| === Web |
| |
| ==== Change Screen |
| |
| * Display commit message in a box |
| + |
| The commit message on the change screen is now placed in a box with a |
| title and emphasis on the commit summary. The star icon and the |
| permalink are displayed in the box header. The header from the change |
| screen is removed as it only held duplicate information. |
| |
| * Open the dependency section automatically when the change is needed |
| by an open change |
| |
| * Only show a change as needed by if its current patch set depends on |
| the change |
| |
| * Show only changes of the same project in the 'Depends On' section |
| + |
| If two projects share the same history it can happen that the same |
| commit is pushed for both projects, resulting in two changes. If now |
| a successor commit is pushed for one of the projects, the resulting |
| successor change was wrongly listing both changes in the 'Depends On' |
| section. Now only the predecessor change of the own project is listed. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1383[issue 1383]: |
| Display the approval table on the PublishCommentsScreen. |
| + |
| So far the approval table that shows the reviewers and their current |
| votes was only shown on the ChangeScreen. Now it is also shown on the |
| PublishCommentScreen. This allows the reviewer to see all existing |
| votes and reviewers when doing their own voting and publishing of |
| comments. Seeing the existing votes helps the reviewer in |
| understanding which votes are still required before the change can be |
| submitted. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1380[issue 1380]: |
| Display time next to change comments |
| + |
| When a comment was posted yesterday, or any time older than 1 day but |
| less than 1 year ago, display the time too. Display "May 2 17:37" rather |
| than just "May 2". |
| |
| * Only show "Can Merge" when the change is new or draft |
| |
| * Allow auto suggesting reviewers to draft changes |
| + |
| Auto completing users for draft changes did't work as the other |
| users didn't have access to the drafts. The visibility check for |
| the reviewer suggestion is now skipped. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1294[issue 1294]: |
| Shorten subject of parent commit for displaying in the UI |
| + |
| If the parent commit has a very long subject (> 80 characters) shorten |
| the subject for displaying it in the Gerrit web UI on the change screen. |
| This avoids that the 'Parent(s)' cell for the patch set becomes very |
| wide. |
| |
| * If subject is shortened for displaying in the UI indicate this by '...' |
| + |
| If a commit has a very long subject line (> 80 characters) it is |
| shortened when it is displayed in the Gerrit Web UI. Indicate to the |
| user that the subject was shortened by appending '...' to the shortened |
| subject. |
| + |
| Also the subject is now cropped after a whitespace if possible. |
| |
| * Insert Change-Id for revert commits |
| + |
| The 'Revert Change' action on a merged change allows to create a new |
| change that reverts the merged change. The commit message of the revert |
| commit now contains a Change-Id. |
| + |
| It is convenient if a Change-Id is automatically created and inserted |
| into the commit message of the revert commit since it makes rebasing of |
| the revert commit easier. |
| |
| * Use more gentle shade of red to highlight outdated dependencies |
| |
| ==== Patch Screens |
| |
| * New patch screen header |
| + |
| A new patch screen header was added that is displayed above both the |
| side-by-side and unified views. The new header contains actual links to |
| the available patchsets and shows which patchset is being currently |
| displayed. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1192[issue 1192]: |
| Add download links to the unified diff view |
| |
| * Improvement of the side-by-side viewer table |
| + |
| The line number column for the right side was moved to be on the far |
| right of the table, so that the layout now looks like this: |
| + |
| ---- |
| 1 | foo | bar | 1 |
| 2 | hello | hello | 2 |
| ---- |
| + |
| This looks nicer when reading a lot of code, as the line numbers are |
| less relevant than the code itself which is now in the center of the |
| UI. |
| + |
| Line numbers are still links to create comment editors, but they |
| use a light shade of gray and skip the underline decoration, making |
| them less visually distracting. |
| + |
| Skip lines now use a paler shade of blue and also hide the fact they |
| contain anchors, until you hover over them and the anchor shows up. |
| + |
| The expand before and after are changed to be arrows showing in |
| which direction the lines will appear above or below the skip |
| line. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=626[issue 626]: |
| Option to display line endings |
| + |
| There is a new user preference that allows to display Windows EOL/Cr-Lf. |
| '\r' is shown in a dotted-line box (similar to how '\r' is displayed in |
| GitWeb). |
| |
| * Streamlined review workflow |
| + |
| A link was added next to the "Reviewed" checkbox that marks the current |
| patch as reviewed and goes to the next unreviewed patch. |
| |
| * Add key commands to mark a patch as reviewed |
| + |
| Add key commands |
| + |
| . to toggle the reviewed flag for a patch ('m') |
| + |
| and |
| + |
| . to mark the patch as reviewed and navigate to the next unreviewed |
| patch ('M'). |
| |
| * Use download icons instead of the `Download` text links |
| |
| ==== User Dashboard |
| * Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-custom-dashboards.html[custom |
| dashboards] |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1407[issue 1407]: |
| Improve highlighting of unreviewed changes in the user's dashboard |
| + |
| A change will be highlighted as unreviewed if |
| + |
| . the user is reviewer of the change but hasn't published any change |
| message for the current patch set |
| . the user has published a change message for the current patch set, |
| but afterwards the change owner has published a change message on |
| the change |
| |
| * Sort outgoing reviews in the user dashboard by created date |
| |
| * Sort incoming reviews in the user dashboard by updated date |
| + |
| Sorting the incoming reviews by last updated date, descending, places |
| the most recently updated reviews at the top of the list for a user, |
| and the oldest stale at the bottom. This may help users to identify |
| items to take immediate action on, as they appear closer to the top. |
| |
| ==== Access Rights Screen |
| |
| * Display error if modifying access rights for a ref is forbidden |
| + |
| If a user is owner of at least one ref he is able to edit the access |
| rights on a project. If he adds access rights for other refs, these |
| access rights were silently ignored on save. Instead of this now an |
| error message is displayed to inform the user that he doesn't have |
| permissions to do the update for these refs. |
| + |
| In case of such an error the project access screen stays in the edit |
| mode so that the unsaved modifications are not lost. The user may now |
| propose the changes to the access rights through code review. |
| |
| * Allow to propose changes to access rights through code review |
| + |
| Users that are able to upload changes for code review for the |
| `refs/meta/config` branch can now propose changes to the project access |
| rights through code review directly from the ProjectAccessScreen. |
| + |
| When editing the project access rights there is a new button |
| 'Save for Review' which will create a new change for the access |
| rights modifications. Project owners are automatically added as |
| reviewer to this change. If a project owner agrees to the access rights |
| modifications he can simply approve and submit the change. |
| |
| * Show all access rights in WebUI if user can read `refs/meta/config` |
| + |
| Users who can read the `refs/meta/config` branch, can see all access |
| rights by fetching this branch and looking at the `project.config` |
| file. Now they can see the same information in the web UI. |
| |
| * Allow extra group suggestions for project owners |
| + |
| When suggesting groups to a user, only groups that are visible to the |
| user are suggested. These are those group that the user is member of. |
| For project owners now also groups to which they are not a member are |
| suggested when editing the access rights of the project. |
| |
| ==== Other |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1592[issue 1592]: |
| Ask user to login if change is not found |
| + |
| Accessing a change URL was failing with 'Application Error - The page |
| you requested was not found, or you do not have permission to view this |
| page' if the user was not signed in and the change was not visible to |
| `Anonymous Users`. Instead Gerrit now asks the user to login and |
| afterwards shows the change to the user if it exists and is visible. |
| If the change doesn't exist or is not visible, the user will still get |
| the NotFoundScreen after sign in. |
| |
| * Link to owner query from user names |
| + |
| Instead of linking from a user name to the user's dashboards, link to |
| a search for changes owned by that user. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#gerrit.reportBugUrl[Allow |
| configuring the `Report Bug` URL] |
| + |
| Let site administrators direct users to their own ticket queue, as for |
| many servers most of the reported bugs are small internal problems like |
| asking for a repository to be created or updating group memberships. |
| |
| * On project creation allow choosing the parent project from a popup |
| + |
| In the create project UI a user can now browse all projects and select |
| one as parent for the new project. |
| |
| * Check for open changes on branch deletion |
| + |
| Check for open changes when deleting a branch in the Gerrit WebUI. |
| Delete a branch only if there are no open changes for this branch. |
| This makes users aware of open changes when deleting a branch. |
| |
| * Enable ProjectBranchesScreen for the `All-Projects` project |
| + |
| This allows to see the branches of the `All-Projects` project in the |
| web UI. |
| |
| * Show for each project in the project list a link to the repository |
| browser (e.g. GitWeb). |
| |
| * Move the project listing menu items to a new top-level item |
| + |
| Finding the project listing was very opaque to end users. Nobody |
| expected to look under `Admin` and furthermore, anonymous users were |
| unable to find that link at all. |
| + |
| Introduced a new top-level `Projects` menu that has `List` in it to |
| take you to the project listing. |
| + |
| In addition the `Create new project` link from the top of that listing |
| was moved to this new menu. |
| |
| * Move the Groups and Plugins menu items to the top level |
| + |
| The top-level Admin menu is removed as it is now unnecessary after the |
| Projects, Groups and Plugins menu items were moved to the top-level. |
| |
| * Move form for group creation to own screen |
| + |
| Move the form for the group creation from the GroupListScreen to an |
| own new CreateGroupScreen and add a link to this screen at the |
| beginning of the GroupListScreen. The link to the CreateGroupScreen is |
| only visible if the user has the permission to create new groups. |
| |
| * Drop the `Owners` column from the group list screen |
| + |
| The `Owners` column on the group list screen has been dropped in order |
| to link:#performance-issue-on-showing-group-list[speed up the loading |
| of the group list screen]. |
| |
| * Drop the `Group Type` column from the group list screen |
| + |
| Since link:#migrate-ldap-groups[the LDAP group type was removed] there |
| is no need to display the group type on the group list screen anymore. |
| There are only 3 `SYSTEM` groups using well known names, and everything |
| else has the type `INTERNAL`. |
| |
| * When adding a user to a group create an account for the user if needed |
| + |
| Trying to add a user to a group that doesn't have an account fails with |
| '... is not a registered user.'. Now adding a user to a group does not |
| immediately fail if there is no account for the user, but it tries to |
| authenticate the user and if the authentication is successful a user |
| account is automatically created, so that the user can be added to the |
| group. This only works if LDAP is used as user backend. |
| + |
| This allows to add users to groups that did not log in into Gerrit |
| before. |
| |
| * Differentiate between draft changes and draft comments |
| + |
| Show the draft changes of the user when he clicks on `My` > `Drafts`. |
| The user's draft comments are now available under `My` > |
| `Draft Comments`. |
| |
| * Show NotFoundScreen if a user that can't create projects tries to |
| access the ProjectCreationScreen |
| |
| * Add Edit, Reload next to non-editable Full Name field |
| + |
| If the user database is actually an external system users might need go |
| to another server to edit their account data, and then re-import their |
| account data by going through a login cycle. This is highly similar to |
| LDAP where the directory provides account data and its refreshed every |
| time the user visits the `/login/` URL handler. |
| + |
| The URL for the external system can be configured for the |
| link:#custom-extension[`CUSTOM_EXTENSION`] auth type. |
| |
| === Access Rights |
| |
| * Restrict rebasing of a change in the web UI to the change owner and |
| the submitter |
| |
| * Add a new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_rebase[ |
| access right to permit rebasing changes in the web UI] |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=930[issue 930]: |
| Add new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_abandon[ |
| access right for abandoning changes] |
| |
| * Check if user can upload in order to restore |
| + |
| Restoring a change is similar to uploading a new change. If a branch |
| gets closed by removing the access rights to upload new changes it |
| shouldn't be possible to restore changes for this branch. |
| |
| [[hide-config]] |
| * Make read access to `refs/meta/config` by default exclusive to |
| project owners |
| + |
| When initializing a new site a set of default access rights is |
| configured on the `All-Projects` project. These default access rights |
| include read access on `refs/*` for `Anonymous Users` and read access |
| on `refs/meta/config` for `Project Owners`. Since the read access on |
| `refs/meta/config` for `Project Owners` was not exclusive, |
| `Anonymous users` were able to access the `refs/meta/config` branch |
| which by default should only be accessible by the project owners. |
| |
| === Search |
| * Offer suggestions for the search operators in the search panel |
| + |
| There are many search operators and it's difficult to remember all of |
| them. Now the search operators are suggested as the user types the |
| query. |
| |
| * Support alias `self` in queries |
| + |
| Writing an expression like "owner:self status:open" will now identify |
| changes that the caller owns and are still open. This `self` alias |
| is valid in contexts where a user is expected as an argument to a |
| query operator. |
| |
| * Add parent(s) revision information to output of query command |
| |
| * Add owner username to output of query command |
| |
| * `/query` API has been link:#query-deprecation[deprecated] |
| |
| === SSH |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1095[issue 1095] |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-set-account.html[SSH command to manage |
| accounts] |
| |
| * On link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-account.html[account creation] a |
| password for HTTP can be specified. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-set-project.html[SSH command to manage |
| project settings] |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-test-submit-rule.html[SSH command to test |
| submit rules] |
| + |
| The command creates a fresh Prolog environment and loads a Prolog |
| script from stdin. `can_submit` is then queried and the results are |
| returned to the user. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ban-commit.html[SSH command to ban |
| commits] |
| |
| [[ssh-alias]] |
| * Enable aliases for SSH commands |
| + |
| Site administrators can define aliases for SSH commands in the |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#ssh-alias[`ssh-alias` section] |
| of the Gerrit configuration. |
| |
| * Add submit records to the output of the |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-query.html[query] SSH command: |
| + |
| Add a command line option to the `query` SSH command to include submit |
| records in the output. |
| + |
| This facilitates the querying of information relating to the submit |
| status from the command line and by API clients, including information |
| such as whether the change can be submitted as-is, and whether the |
| submission criteria for each review label has been met. |
| |
| * Support JSON output format for the |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ls-projects.html[ls-projects] SSH command |
| |
| * Support creation of multiple branches in |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-project.html[create-project] SSH |
| command |
| + |
| In case if a project has some kind of waterfall automerging |
| a->b->c it is convenient to create all these branches at the |
| project creation time. |
| + |
| e.g. '.. gerrit create-project -b master -b foo -b bar ...' |
| |
| * Add verbose output option to |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ls-groups.html[ls-groups] command |
| + |
| The verbose mode enabled by the new option makes the ls-groups |
| command output a tab-separated table containing all available |
| information about each group (though not its members). |
| |
| === Documentation |
| |
| ==== Commands |
| |
| * document for the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-group.html[`create-group`] |
| command that for unknown users an account is automatically created if |
| the LDAP authentication succeeds |
| |
| * Update documentation and help text for the |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-review.html[`review`] SSH command |
| + |
| The review command can be applied to multiple changes, but the |
| help text was written in singular tense. |
| + |
| Add a paragraph in the documentation explaining that the |
| `--force-message` option will not be effective if the `review` command |
| fails because the user is not permitted to change the label. |
| |
| * Clarify that `init --batch` doesn't drop old database objects |
| |
| * Update the list of unsupported slave commands |
| |
| * Fix link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-stream-events.html[`stream-events`] |
| documentation |
| + |
| Some attributes contained in the events were not described, for a few |
| others the name was given in a wrong case. |
| |
| * Fix and complete synopsis of commands |
| |
| ==== Access Control |
| |
| * Clarify the ref format for |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_push_merge[`Push |
| Merge Commit`] |
| + |
| Elaborate on the required format of the ref used for `Push Merge Commit` |
| access right entries to avoid user confusion when granting access to |
| `refs/heads/*` still doesn't allow them to push any merge commits. |
| |
| * Document the |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#capability_emailReviewers[ |
| `emailReviewers`] capability |
| |
| ==== Error |
| * Improve documentation of link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/error-change-closed.html[ |
| `change closed` error] |
| + |
| The `change closed` error can also occur when trying to submit a |
| review label with the SSH review command onto a change that has |
| been closed (submitted and merged, or abandoned) or onto a patchset |
| that has been replaced by a newer patchset. |
| |
| * Correct documentation of `invalid author` and `invalid committer` |
| errors |
| + |
| The error messages `you are not committer ...` and `you are not |
| author ...` were replaced with `invalid author` and `invalid |
| committer`. |
| |
| * Describe that the `prohibited by Gerrit` error is returned if pushing |
| a tag fails because the tagger is somebody else and the `Forge |
| Committer` access right is not assigned. |
| |
| ==== Dev |
| |
| * Update push URL in link:../SUBMITTING_PATCHES[SUBMITTING_PATCHES] |
| + |
| Pushes are now accepted at the same address as clone/fetch/pull. |
| |
| * Update link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-contributing.html[contributor |
| document] |
| + |
| We now prefer to use Guava (previously known as Google Collections). |
| |
| * Fixed broken link to source code |
| + |
| Updated the documentation source code links to point to: |
| http://code.google.com/p/gerrit/source/checkout |
| |
| * State link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-eclipse.html#known-problems[known issues] |
| when debugging Gerrit with Eclipse |
| |
| * Improved the section on |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-eclipse.html#hosted-mode[hosted mode |
| debugging] |
| + |
| The existing section on hosted mode debugging left out a couple of |
| steps, and the requirement to use `DEVELOPMENT_BECOME_ANY_ACCOUNT` |
| instead of `OpenID` was not mentioned anywhere. |
| |
| * Add a link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-release.html[release preparation |
| document] |
| + |
| Document what it takes to make a Gerrit stable or stable-fix release, |
| and how to release Gerrit subprojects. |
| |
| ==== Other |
| * Add link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/prolog-cookbook.html[Cookbook for Prolog |
| submit rules] |
| + |
| A new document providing a step by step introduction into implementing |
| specific submit policies using Prolog based submit rules was added. |
| |
| * Describe link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/refs-notes-review.html[ |
| `refs/notes/review` and its contents] |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-mail.html[Document `RebasedPatchSet.vm` |
| and `Reverted.vm` mail templates] |
| |
| * Specify output file for curl commands in documentation |
| + |
| For downloading the `commit-msg` hook and the `gerrit-cherry-pick` |
| script users can either use scp or curl. Specify the output file for |
| each curl command so that the result is equal to the matching scp |
| command. |
| |
| * Document that user must be in repository root to install `commit-msg` |
| hook |
| |
| * Add some clarifications to the |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/install-quick.html[quick installation guide] |
| |
| * Add missing documentation about |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#hooks[hook configuration] |
| + |
| Add documentation of hook config for `change-restored`, `ref-updated` |
| and `cla-signed` hooks. |
| |
| * Document that the commit message hook file should be executable |
| |
| * Mention that also MySQL supports replication, not just Postgres |
| |
| * Make sorting of release notes consistent so that the release notes |
| for the newest release is always on top |
| |
| * Various corrections |
| + |
| Correct typos, spelling mistakes, and grammatical errors. |
| |
| === Dev |
| * Add link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-release.html#plugin-api[script for |
| releasing plugin API jars] |
| |
| * Pushes are now accepted at the same address as clone/fetch/pull |
| + |
| To submit patches commits can be pushed to |
| https://gerrit.googlesource.com/gerrit |
| |
| * Add `-Pchrome`, `-Pwebkit`, `-Pfirefox` aliases for building |
| + |
| This makes it easier to build for the browser you want to |
| test on, rather than remembering what its GWT name is. |
| |
| * Disable assertions for KeyCommandSet when running in gwtdebug mode |
| + |
| The assertions in the KeyCommandSet class cause exceptions when a |
| KeyCommand is registered several times. |
| |
| * Add the run profiles to the favorites menu |
| |
| * Add Intellij IDEA files to ignore list |
| |
| * Move local Maven repository to Google Cloud Storage |
| |
| * Make sure asciidoc uses unix line endings in generated HTML. |
| + |
| Use an explicit asciidoc attribute to make sure the produced HTML will |
| always contain unix line endings. This will help in producing build |
| results that are better comparable by size. |
| |
| * Remove timestamp from all `org.eclipse.core.resources.prefs` files |
| + |
| Eclipse overwrites these files when we import projects using m2e. |
| Eclipse 3 writes a timestamp at the top of these files making the Git |
| working tree dirty. Eclipse 4 (Juno) still overwrites these files but |
| doesn't write the timestamp. This should help to keep the working tree |
| clean. However, since the timestamp is currently present in these |
| files, Eclipse 4 would still make them dirty by overwriting and |
| effectively removing the timestamp. |
| + |
| This change removes the timestamp from these files. This helps those |
| using Eclipse 4 and doesn't make it worse for those still using Eclipse |
| 3. |
| |
| * Add Maven profile to skip build of plugin modules |
| + |
| Building the plugin modules ('Plugin API' and 'Plugin Archetype') may |
| take a significant amount of time (since many jars are downloaded). |
| During development it is not needed to build the plugin modules. A new |
| Maven profile was added that skips the build of the plugin modules, |
| so that developers have a faster turnaround. This profile is called |
| `no-plugins` and it's active by default. To include the plugin modules |
| into the build activate the `all` profile: |
| + |
| ---- |
| mvn clean package -P all |
| ---- |
| + |
| The script to make release builds has been adapted to activate the |
| `all` profile so that the plugin modules are always built for release |
| builds. |
| |
| === Mail |
| |
| * Add unified diff to newchange mail template |
| + |
| Add `$email.UnifiedDiff` as new macro to the `NewChange.vm` mail |
| template. This macro is expanded to a unified diff of the patch. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#sendemail.includeDiff[ |
| sendemail.includeDiff]: Enable `$email.UnifiedDiff` in `NewChange.vm` |
| + |
| Instead of making site administrators hack the email template, allow |
| admins to enable the diff feature by setting a configuration variable |
| in `gerrit.config`. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#sendemail.maximumDiffSize[ |
| sendemail.maximumDiffSize]: Limit the size of diffs sent by email |
| + |
| If a unified diff included in an email will exceed the limit configured |
| by the system administrator, only the affected file paths are listed in |
| the email instead. This gives interested parties some context on the |
| size and scope of the change, without killing their inbox. |
| |
| * Catch all exceptions when emailing change update |
| |
| * Allow unique from address generation |
| + |
| Allow the from email address to be a ParameterizedString that handles |
| the `${userHash}` variable. The value of the variable is the md5 hash |
| of the user name. This allows unique generation of email addresses, so |
| GMAIL threads names of users in conversations correctly. For example, |
| the from pattern for gerrit-review defined in the Gerrit configuration |
| looks like this: |
| + |
| ---- |
| [sendemail] |
| from = ${user} <noreply-gerritcodereview+${userHash}@google.com> |
| ---- |
| |
| * Show new change URLs in the body of the new change email |
| + |
| Some email clients hide the signature section of an email |
| automatically. If there are no reviewers listed on a new change, |
| such as when a change is pushed over HTTP and a notification is |
| automatically sent out to any subscribed watchers, the URL was |
| hidden inside of the signature and not readily available. |
| + |
| Show the URL right away in the body. |
| |
| === Miscellaneous |
| * Back in-memory caches with Guava, disk caches with H2 |
| + |
| Instead of using Ehcache for in-memory caches, use Guava. The Guava |
| cache code has been more completely tested by Google in high load |
| production environments, and it tends to have fewer bugs. It enables |
| caches to be built at any time, rather than only at server startup. |
| + |
| By creating a Guava cache as soon as it is declared, rather than |
| during the LifecycleListener.start() for the CachePool, we can promise |
| any downstream consumer of the cache that the cache is ready to |
| execute requests the moment it is supplied by Guice. This fixes a |
| startup ordering problem in the GroupCache and the ProjectCache, where |
| code wants to use one of these caches during startup to resolve a |
| group or project by name. |
| + |
| Tracking the Guava backend caches with a DynamicMap makes it possible |
| for plugins to define their own in-memory caches using CacheModule's |
| cache() function to declare the cache. It allows the core server to |
| make the cache available to administrators over SSH with the gerrit |
| show-caches and gerrit `flush-caches` commands. |
| + |
| Persistent caches store in a private H2 database per cache, with a |
| simple one-table schema that stores each entry in a table row as a |
| pair of serialized objects (key and value). Database reads are gated |
| by a BloomFilter, to reduce the number of calls made to H2 during |
| cache misses. In theory less than 3% of cache misses will reach H2 and |
| find nothing. Stores happen on a background thread quickly after the |
| put is made to the cache, reducing the risk that a diff or web_session |
| record is lost during an ungraceful shutdown. |
| + |
| Cache databases are capped around 128M worth of stored data by running |
| a prune cycle each day at 1 AM local server time. Records are removed |
| from the database by ordering on the last access time, where last |
| accessed is the last time the record was moved from disk to memory. |
| |
| * Add OpenID SSO support. |
| + |
| Setting `OPENID_SSO` for |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.type[`auth.type`] in the |
| `gerrit.config` will allow the admin to specify an SSO entry point URL |
| so that users clicking on "Sign In" are sent directly to that URL. |
| |
| * Git over HTTP BasicAuth against Gerrit basic auth. |
| + |
| Allows the configuration of native Gerrit username/password |
| authentication scheme used for Git over HTTP BasicAuth, as alternative |
| of the default DigestAuth scheme against the random generated password |
| on Gerrit DB. |
| + |
| Example setting for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.type[ |
| `auth.type`] and link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.gitBasicAuth[ |
| `auth.gitBasicAuth`]: |
| + |
| ---- |
| [auth] |
| type = LDAP |
| gitBasicAuth = true |
| ---- |
| + |
| With this configuration Git over HTTP protocol will be authenticated |
| using `HTTP-BasicAuth` and credentials checked on LDAP. |
| |
| * Abstract group systems into GroupBackend interface |
| + |
| Group backends are supposed to use unique prefixes to isolate the |
| namespaces. E.g. the group backend for LDAP is using `ldap/` as prefix |
| for the group names. |
| + |
| This means that to refer to an LDAP group in the WebUI the group name |
| needs to be prefixed with the `ldap/` string. E.g. if there is a group |
| in LDAP which is called "Developers", Gerrit will suggest this group |
| when the user types `ldap/De`. |
| + |
| WARNING: External groups are not anymore allowed to be members of |
| internal groups. |
| |
| [[migrate-ldap-groups]] |
| * Migrate existing internal LDAP groups |
| + |
| Previously, LDAP groups were mirrored in the AccountGroup table and |
| given an Id and UUID the same as internal groups. Update these groups |
| to be backed by only a GroupReference, with a special "ldap:" UUID |
| prefix. Migrate all existing references to the UUID in ownerGroupUUID |
| and any `project.config`. |
| + |
| This made the LDAP group type obsolete and it was removed. |
| |
| * link:https://code.google.com/p/gerrit/issues/detail?id=548[issue 548]: |
| Make commands to download patch sets |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#download.command[configurable] |
| + |
| For patch sets on the ChangeScreen different commands for downloading |
| the patch sets are offered. For some installations not all commands are |
| needed. Allow Gerrit administrators to configure which download |
| commands should be offered. |
| |
| * Add more link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#theme[theme color |
| options] |
| + |
| ** Add a theme option to change outdated background color |
| ** Add odd/even row background color for tables such as list of open |
| reviews. This makes them more visible without clicking on them. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-notify.html[Add `notify` section in |
| `project.config`] |
| + |
| The notify section allows project owners to include emails to users |
| directly from `project.config`. This removes the need to create fake |
| user accounts to always BCC a group mailing list. |
| |
| * Include the contributor agreements in the `project.config` and |
| migrate contributor agreements to `All-Projects` |
| + |
| Update the parsing of `project.config` to support the contributor |
| agreements. |
| + |
| Add a new schema to move the ContributorAgreement, AccountAgreement, |
| and AccountGroupAgreement information into the `All-Projects` |
| `project.config`. |
| |
| * Add `sameGroupVisibility` to `All-Projects` `project.config` |
| + |
| The `sameGroupVisiblity` is needed to restrict the visibility of |
| accounts when `accountVisibility` is `SAME_GROUP`. Namely, this is a |
| way to make sure the `autoVerify` group in a `contributor-agreements` |
| section is never suggested. |
| |
| * Add change topic in hook arguments |
| + |
| It was not possible for hook scripts to include topic-specific |
| behavior because the topic name was not included in the arguments. |
| |
| * Add `--is-draft` argument on `patchset-created` hook |
| + |
| The `--is-draft` argument will be passed with either `true` if |
| the patchset is a draft, or `false` otherwise. |
| + |
| This can be used by hooks that need to behave differently if the |
| change is a draft. |
| |
| * Log sign in failures on info level |
| + |
| If for a user signing in into the Gerrit web UI fails, this can have |
| many reasons, e.g. username is wrong, password is wrong, user is marked |
| as inactive, user is locked in the user backend etc. In all cases the |
| user just gets a generic error message 'Incorrect username or |
| password.'. Gerrit administrators had trouble to find the exact reason |
| for the sign in problem because the corresponding AccountException was |
| not logged. |
| |
| * Do not log 'Object too large' as error with full stacktrace |
| + |
| If a user pushes an object which is larger than the configured |
| `receive.maxObjectSizeLimit` parameter, the push is rejected with an |
| 'Object too large' error. In addition an error log entry with the full |
| stacktrace was written into the error log. |
| + |
| This is not really a server error, but just a user doing something that |
| is not allowed, and thus it should not be logged as error. For a Gerrit |
| administrator it might still be interesting how often the limit is hit. |
| This is why it makes sense to still log this on info level. |
| + |
| For the user pushing a too large object we now do not print the |
| 'fatal: Unpack error, check server log' message anymore, but only the |
| 'Object too large' error message. |
| |
| * Add better explanations to rejection messages |
| + |
| Provide information to the user why a certain push was rejected. |
| |
| * Automatic schema upgrade on Gerrit startup |
| + |
| In case when Gerrit administrator(s) don't have a direct access to the |
| file system where the review site is located it gets difficult to |
| perform a schema upgrade (run the init program). For such cases it is |
| convenient if Gerrit performs schema upgrade automatically on its |
| startup. |
| + |
| Since this is a potentially dangerous operation, by default it will not |
| be performed. The configuration parameter |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#site.upgradeSchemaOnStartup[ |
| site.upgradeSchemaOnStartup] is used to switch on automatic schema |
| upgrade. |
| |
| * Shorten column names that are longer than 30 characters |
| + |
| Some databases can't deal with column names that are longer than 30 |
| characters. Examples are MaxDB and |
| link:http://groups.google.com/group/repo-discuss/browse_thread/thread/ecb713d42c04ae8a/cc963525d8247a17?lnk=gst#cc963525d8247a17[Oracle]. |
| + |
| Gerrit had two column names in the `accounts` table that exceeded the |
| 30 characters: `displayPatchSetsInReverseOrder`, |
| `displayPersonNameInReviewCategory` |
| + |
| These 2 columns were renamed so that their names fit within the 30 |
| character range. |
| |
| * Increase the maximum length for tracking ID's to 32 characters |
| + |
| So far tracking ID's had a maximum length of only 20 characters. |
| |
| * Set `GERRIT_SITE` in Gerrit hooks as environment variable |
| + |
| Allows development of hooks parameterized on Gerrit location. This can |
| be useful to allow hooks to load the Gerrit configuration when needed |
| (from `$GERRIT_SITE`) or even store their additional config files under |
| `$GERRIT_SITE/etc` and retrieve them at startup. |
| |
| * Add an exponentially rolling garbage collection script |
| + |
| `git-exproll.sh` is a git garbage collection script aimed specifically |
| at reducing excessive garbage collection and particularly large |
| packfile churn for Gerrit installations. |
| + |
| Excessive garbage collection on "dormant" repos is wasteful of both CPU |
| and disk IO. Large packfile churn can lead to heavy RAM and FS usage |
| on Gerrit servers when the Gerrit process continues to hold open the |
| old delete packfiles. This situation is most detrimental when jgit is |
| configured with large caching parameters. Aside from these downsides, |
| running git gc often can be very beneficial to performance on servers. |
| This script attempts to implement a git gc policy which avoids the |
| downsides mentioned above so that git gc can be comfortably run very |
| regularly. |
| + |
| `git-exproll.sh` uses keep files to manage which files will get |
| repacked. It also uses timestamps on the repos to detect dormant repos |
| to avoid repacking them at all. The primary packfile objective is to |
| keep around a series of packfiles with sizes spaced out exponentially |
| from each other, and to roll smaller packfiles into larger ones once |
| the smaller ones have grown. This strategy attempts to balance disk |
| space usage with avoiding rewriting large packfiles most of the time. |
| + |
| The exponential packing objective above does not save a large amount of |
| time or CPU, but it does prevent the packfile churn. Depending on repo |
| usage, however the dormant repo detection and avoidance can result in a |
| very large time savings. |
| |
| * Automatically flush persistent H2 cache if the existing cache entries |
| are incompatible with the cache entry class and thus can't be |
| deserialized |
| |
| * Unpack JARs for running servers in `$site_path/tmp` |
| + |
| Instead of unpacking a running server into `~/.gerritcodereview/tmp` |
| only use that location for commands like init where there is no active |
| site. From gerrit.sh always use `$site_path/tmp` for the JARs to |
| isolate servers that run on the same host under the same UNIX user |
| account. |
| |
| [[custom-extension]] |
| * Allow for the `CUSTOM_EXTENSION` `auth.type` to configure URLs for |
| editing the user name and obtaining an HTTP password |
| + |
| Allow `CUSTOM_EXTENSION` auth type to supply by `auth.editFullNameUrl` |
| a URL in the web UI that links users to the other account system, |
| where they can edit their name, and then use another reload URL to |
| cycle through the `/login/` step and refresh the data cached by Gerrit. |
| + |
| Allow `CUSTOM_EXTENSION` auth type to supply by `auth.httpPasswordUrl` |
| a URL in the web UI that allows users to obtain an HTTP password. |
| + |
| Like the rest of the `CUSTOM_EXTENSION` stuff, this is hack that will |
| eventually go away when there is proper support for authentication |
| plugins. |
| |
| === Performance |
| [[performance-issue-on-showing-group-list]] |
| * Fix performance issues on showing the list of groups in the Gerrit |
| WebUI |
| + |
| Loading `Admin` > `Groups` on large servers was very slow. The entire |
| group membership database was downloaded to the browser when showing |
| just the list of groups. |
| + |
| Now the amount of data that needs to be downloaded to the browser is |
| reduced by using the more lightweight `AccountGroup` type instead of |
| the `GroupDetail` type when showing the groups in a list format. As a |
| consequence the `Owners` column that showed the name of the owner group |
| had been dropped. |
| |
| * Add LDAP-cache to minimize number of queries when unnesting groups |
| + |
| A new cache named "ldap_groups_byinclude" is introduced to help lessen |
| the number of queries needed to resolve nested LDAP-groups. |
| |
| * Add index for accessing change messages by patch set |
| + |
| This improves the performance of loading the dashboards. |
| |
| * Add a fast path to avoid checking every commit on push |
| + |
| If a user can forge author, committer and gerrit server identity, and |
| can upload merges, don't bother checking the commit history of what is |
| being uploaded. This can save time on servers that are trying to accept |
| a large project import using the push permission. |
| |
| * Improve performance of `ReceiveCommits` by reducing `RevWalk` load |
| + |
| JGit RevWalk does not perform well when a large number of objects are |
| added to the start set by `markStart` or `markUninteresting`. Avoid |
| putting existing `refs/changes/` or `refs/tags/` into the `RevWalk` and |
| instead use only the `refs/heads` namespace and the name of the branch |
| used in the `refs/for/` push line. |
| + |
| Catch existing changes by looking for their exact commit SHA-1, rather |
| than complete ancestry. This should have roughly the same outcome for |
| anyone pushing a new commit on top of an existing open change, but |
| with lower computational cost at the server. |
| |
| * Lookup changes in parallel during `ReceiveCommits` |
| + |
| If the database has high query latency, the loop that locates existing |
| changes on the destination branch given Change-Id can be slow. Start |
| all of the queries as commits are discovered, but don't block on |
| results until all queries were started. |
| + |
| If the database can build the `ResultSet` in the background, this may |
| hide some of the query latency by allowing the queries to overlap when |
| more than one lookup must be performed for a push. |
| |
| * Perform change update on multiple threads |
| + |
| When multiple changes need to be created or updated for a single push |
| operation they are now inserted into the database by parallel threads, |
| up to the maximum allowed thread count. The current thread is used |
| when the thread pool is already fully in use, falling back to the |
| prior behavior where each concurrent push operation can do its own |
| concurrent database update. The thread pool exists to reduce latency |
| so long as there are sufficient threads available. |
| + |
| This helps push times on databases that are high latency, such as |
| database servers that are running on a different machine from the |
| Gerrit server itself, e.g. gerrit.googlesource.com. |
| + |
| The new thread pool is |
| link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#receive.changeUpdateThreads[ |
| disabled by default], limiting the overhead to servers that have good |
| latency with their database, such as using in-process H2 database, or |
| a MySQL or PostgreSQL on the same host. |
| |
| * Use `BatchRefUpdate` to execute reference changes |
| + |
| Some storage backends for JGit are able to update multiple references |
| in a single pass efficiently. Take advantage of this by pushing |
| any normal reference updates (such as direct push or branch create) |
| into a single `BatchRefUpdate` object. |
| |
| * Assume labels are correct in ListChanges |
| + |
| To reduce end-user latency when displaying changes in a search result |
| or user dashboard, assume the labels are accurate in the database at |
| display time and don't recompute the access privileges of a reviewer. |
| |
| * Notify the cache that the git_tags was modified |
| + |
| The tag cache was updated in-place, which prevented the H2 based |
| storage from writing out the updated tag information. This meant |
| servers almost never had the right data stored on disk and had to |
| recompute it at startup. |
| + |
| Anytime the value is now modified in place, put it back into the |
| cache so it can be saved for use on the next startup. |
| |
| * Special case hiding `refs/meta/config` from Git clients |
| + |
| VisibleRefFilter requires a lot of server CPU to accurately provide |
| the correct listing to clients when they cannot read `refs/*`. |
| + |
| Since the default configuration is now to link:#hide-config[ |
| hide `refs/meta/config`], use a special case in VisibleRefFilter that |
| permits showing every reference except `refs/meta/config` if a user can |
| read every other reference in the repository. |
| |
| * Avoid second remote call to lookup approvals when loading change |
| results |
| + |
| By using the new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-changes.html[`/changes/`] |
| REST endpoint the web UI client now obtains the label information |
| during the query and avoids a second round trip to lookup the current |
| approvals for each displayed change. For most users this should improve |
| the way the page renders. The verified and code review columns will be |
| populated before the table is made visible, preventing the layout from |
| "jumping" the way the old UI did when the 2nd RPC finally finished and |
| supplied the label data. |
| |
| * Load patch set approvals in parallel |
| + |
| ResultSet is a future-like interface, the database system is free to |
| execute each result set asynchronously in the background if it |
| supports that. gwtorm's default SQL backend always runs queries |
| immediately and then returns a ListResultSet, so for most installs this |
| has no real impact in ordering. |
| + |
| For the system that runs gerrit-review, each query has a high cost in |
| network latency, the system treats ResultSet as a future promise to |
| supply the matching rows. Getting all of the necessary ResultSets up |
| front allows the database to send all requests to the backend as early |
| as possible, allowing the network latency to overlap. |
| |
| == Upgrades |
| * Update Gson to 2.1 |
| * Update GWT to 2.4.0 |
| * Update JGit to 2.0.0.201206130900-r.23-gb3dbf19 |
| |
| * Use gwtexpui 1.2.6 |
| + |
| ** Hide superfluous status text from clippy flash widget |
| ** Fix disappearance of text in CopyableLabel when clicking on it |
| |
| * Update Guava to 12.0.1 |
| + |
| This fixes a performance problem with LoadingCache where the cache's |
| inner table did not dynamically resize to handle a larger number |
| of cached items, causing O(N) lookup performance for most objects. |
| |
| == Bug Fixes |
| |
| === Security |
| * Ensure that only administrators can change the global capabilities |
| + |
| Only Gerrit server administrators (members of the groups that have |
| the `administrateServer` capability) should be able to edit the |
| global capabilities because being able to edit the global capabilities |
| means being able to assign the `administrateServer` capability. |
| + |
| Because of this on the `All-Projects` project it is disallowed to assign |
| + |
| . the `owner` access rights on `refs/*` |
| + |
| Project owners (members of groups to which the `owner` access right |
| is assigned) are able to edit the access control list of the projects |
| they own. Hence being owner of the `All-Projects` project would allow |
| to edit the global capabilities and assign the `administrateServer` |
| capability without being Gerrit administrator. |
| + |
| In earlier Gerrit versions (2.1.x) it was already implemented like |
| this but the corresponding checks got lost. |
| + |
| . the 'push' access right on `refs/meta/config` |
| + |
| Being able to push configuration changes to the `All-Projects` project |
| allows to edit the global capabilities and hence a user with this |
| access right could assign the `administrateServer` capability without |
| being Gerrit administrator. |
| + |
| From the Gerrit WebUI (ProjectAccessScreen) it is not possible anymore |
| to assign on the `All-Projects` project the `owner` access right on |
| `refs/*` and the `push` access right on `refs/meta/config`. |
| + |
| In addition it is ensured that an `owner` access right that is assigned |
| for `refs/*` on the `All-Projects` project has no effect and that only |
| Gerrit administrators with the `push` access right can push |
| configuration changes to the `All-Projects` project. |
| + |
| It is still possible to assign both access rights (`owner` on `refs/*` |
| and `push` on `refs/meta/config`) on the `All-Projects` project by directly |
| editing its `project.config` file and pushing to `refs/meta/config`. |
| To fix this it would be needed to reject assigning these access rights |
| on the `All-Projects` project as invalid configuration, however doing this |
| would mean to break existing configurations of the `All-Projects` project |
| that assign these access rights. At the moment there is no migration |
| framework in place that would allow to migrate `project.config` files. |
| Hence this check is currently not done and these access rights in this |
| case have simply no effect. |
| |
| === Web |
| |
| * Do not show "Session cookie not available" on sign in |
| + |
| When LDAP is used for authentication, clicking on the 'Sign In' link |
| opens a user/password dialog. In this dialog the "Session cookie not |
| available." message was always shown as warning. This warning was |
| pretty useless since the user was about to sign in because he had no |
| current session. |
| + |
| This problem was discussed on the |
| link:https://groups.google.com/forum/#!topic/repo-discuss/j-t77m8-7I0/discussion[ |
| Gerrit mailing list]. |
| |
| * Reject restoring a change if its destination branch does not exist |
| anymore |
| |
| * Reject submitting a change if its destination branch does not exist |
| anymore |
| + |
| If a branch got deleted and there was an open change for this branch, |
| it was still possible to submit this open change. As result the |
| destination branch was implicitly recreated, even if the user |
| submitting the change had no privileges to create branches. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1352[issue 1352]: |
| Don't display "Download" link for `/COMMIT_MSG` |
| + |
| The commit message file is special, it doesn't actually exist and |
| cannot be downloaded. Don't offer the download link in the side by |
| side viewer. |
| |
| * Dependencies were lost in the ChangeScreen's "Needed By" table |
| + |
| Older patchsets are now iterated for descendants, so that the dependency |
| chain does not break on new upstream patchsets. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1442[issue 1442]: |
| Only show draft change dependency if current user is owner or reviewer |
| + |
| In the change screen, the dependencies panel was showing draft changes |
| in the "Depends On" and "Needed By" lists for all users, and when there |
| was no user logged in. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1558[issue 1558]: |
| Create a draft patch set when a draft patch set is rebased |
| + |
| Rebasing a draft patch set created a non-draft patch set. It was |
| unexpected that rebasing a draft patch set published the modifications |
| done in the draft patch set. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1176[issue 1176]: |
| Fix disappearance of download command in Firefox |
| + |
| Clicking on the download command for a patch set in Firefox made the |
| download command disappear. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1587[issue 1587]: |
| Fix disappearance of action buttons when selecting the last patch set |
| as `Old Version History` |
| |
| * Fix updating patch list when `Old Version History` is changed |
| + |
| If a collapsed patch set panel was expanded and re-closed it's patch |
| list wasn't updated anymore when the selection for `Old Version History` |
| was changed. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1523[issue 1523]: |
| Update diff base to match old version history |
| + |
| When changing the diff base in the `Old Version History` on the change |
| screen and then entering the Side-By-Side view for a file, clicking on |
| the back button in the browser (reentering the change screen) was |
| causing the files to be wrongly compared with `Base` again. |
| |
| * Don't NPE if current patch set is not available |
| + |
| Broken changes may have the current patch set field incorrectly |
| specified, causing currentPatchSet to be unable to locate the |
| correct data and return it. When this happens don't NPE, just |
| claim the change is not reviewed. |
| |
| * link:https://code.google.com/p/gerrit/issues/detail?id=1555[issue 1555]: |
| Fix displaying of file diff if draft patch has been deleted |
| + |
| Displaying any file diff for a patch set failed if the change had any |
| gaps in its patch set history. Patch sets can be missing, if they |
| have been drafts and were deleted. |
| |
| * link:https://code.google.com/p/gerrit/issues/detail?id=856[issue 856]: |
| Fix displaying of comments on deleted files |
| + |
| Published and draft comments that are posted on deleted files were not |
| loaded and displayed. |
| |
| * link:https://code.google.com/p/gerrit/issues/detail?id=735[issue 735]: |
| Fix `ArrayIndexOutOfBoundsException` on navigation to next/previous |
| patch |
| + |
| An `ArrayIndexOutOfBoundsException` could occur when navigating from |
| one patch to the next/previous patch if the next/previous patch was a |
| newly added binary file. The exception occurred if the user was not |
| signed in or if the user was signed in and had `Syntax Coloring` in the |
| preferences enabled. |
| |
| * link:https://code.google.com/p/gerrit/issues/detail?id=816[issue 816]: |
| Fix wrong file indention in Side-by-Sie diff viewer on right side |
| |
| * Only set reviewed attribute on open changes |
| + |
| If a change is merged or abandoned, do not consider the reviewed |
| property for the calling user, so that the change is not highlighted |
| as unreviewed on the user's dashboard. |
| |
| * Change PatchTable pointer when loading patch |
| + |
| This patch fixes an issue with the "file list" table displayed by |
| clicking on the "Files" sub-menu when viewing a diff. |
| + |
| Originally when navigating between patch screens the highlighted row |
| (pointer) of the file list table would not change when not directly |
| interacting with the table e.g. by clicking on the previous or next |
| file link. |
| + |
| This patch updates the file list table whenever a new patch screen is loaded |
| so that the pointer corresponds to the current patch being displayed. |
| |
| * Don't hyperlink non-internal groups |
| + |
| When an external group (such as LDAP) is used in a permission rule, |
| don't attempt to link to the group in the internal account system UI. |
| The group won't load successfully. Instead just display the name and |
| put the UUID into a tooltip to show the full DN. |
| |
| * Fix: Popup jumps back to original position when resizing screen |
| + |
| On 'Watched Projects' screen, the 'Browse' button displays a popup |
| window. If the user moves it and then resizes the screen, it won't snap |
| back to the original position. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1457[issue 1457]: |
| Prevent groups from being renamed to empty string |
| |
| * Fixed AccountGroupInfoScreen search callback |
| + |
| If the search returned no results, the search button would not be |
| enabled and the status panel was not shown. Fixed the panel and button |
| to always be enabled. |
| |
| * Fix NullPointerException on `/p/` |
| + |
| Requesting just `/p/` caused a NullPointerException as the redirection |
| logic had no project name to form a URL from. Detect requests for `/p/` |
| and redirect to 'Admin' > 'Projects' to show the projects the caller |
| has access to. |
| |
| === Mail |
| |
| * Fix: Rebase did not mail all reviewers |
| |
| * Fix email showing in AccountLink instead of names |
| + |
| Prefer the full name for the display text of the link. |
| |
| * Fix signature delimiter for e-mail messages |
| + |
| Make sure the signature delimiter is "-- " (two dashes and a space). |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1397[issue 1397]: |
| Don't wait for banner message from SMTP server after STARTTLS |
| negotiation |
| + |
| According to RFC 2847 section 5.2, SMTP server won't send the banner |
| message again after STARTTLS negotiation. The original code will hang |
| until SMTP server kicks it off due to timeout and can't send email with |
| STARTTLS enabled, aka. `sendemail.smtpEncryption = tls`. |
| |
| * Extract all mail templates during site init |
| + |
| The example mail templates `RebasedPatchSet.vm`, `Restored.vm` and |
| `Reverted.vm` were not extracted during the initialization of a new |
| site. |
| |
| === SSH |
| * Fix reject message if bypassing code review is not allowed |
| + |
| If a user is not allowed to bypass code review, but tries to push a |
| commit directly, Gerrit rejected this push with the error message |
| "can not update the reference as a fast forward". This message was |
| confusing to the user since the push only failed due to missing |
| access rights. Go back to the old message that says "prohibited |
| by Gerrit". |
| |
| * Fix reject message if pushing tag is rejected because tagger is |
| somebody else |
| + |
| Pushing a tag that has somebody else as tagger requires the `Forge |
| Committer` access right. If this access right was missing Gerrit |
| was rejecting the push with "can not create new references". This error |
| message was misleading because the user may have thought that the |
| `Create Reference` access right was missing which was actually assigned. |
| + |
| The same reject message was also returned on push of an annotated tag |
| if the `Push Annotated Tag` access right was missing. Also in this case |
| the error message was not ideal. |
| + |
| Go back to the old more generic message which says `prohibited by |
| Gerrit`. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1437[issue 1437]: |
| Send event to stream when draft change is published |
| + |
| When a change is uploaded as a draft, a `patchset-created` event is |
| sent to the event stream, but since drafts are private to the owner, |
| the event is not publicly visible. When the draft is later published, |
| no publicly visible event was sent. As result of this external tools |
| that rely on the event stream to detect new changes didn't receive |
| events for any changes that were first uploaded as draft. |
| + |
| There is now a new event, `draft-published`, which is sent to the |
| event stream when a draft change is published. The content of this |
| event is the same as `patchset-created`. |
| |
| * Fix: Wrong ps/rev in `change-merged` stream-event |
| + |
| When using cherry-pick as merge strategy, the wrong ref was set in the |
| `change-merged` stream-event. |
| + |
| The issue stems from Gerrit would not acknowledge the resulting new |
| pachset (the actual cherry-pick). |
| |
| * Fix NullPointerException in `query` SSH command |
| + |
| Running the `query` SSH command with the options `--comments` and |
| `--format=JSON` failed with a NullPointerException if a change had a |
| message without author. Change messages have no author if they were |
| created by Gerrit. For such messages now the Gerrit Server identity is |
| returned as author. |
| |
| * Fix the `export-review-notes` command's Guice bindings |
| + |
| The `export-review-notes` command was broken because of the CachePool |
| class being bound twice. The startup of the command failed because of |
| that. |
| |
| * Fix sorting of SSH help text |
| + |
| Commands were displaying in random order, sort commands before output. |
| |
| * `replicate` command: Do not log errors for wrong user input |
| + |
| If the user provided an invalid combination of command options or an |
| non existing project name this was logged in the `error.log` but |
| printing the error out to the user is sufficient. |
| |
| === Authentication |
| |
| * Fix NPE in LdapRealm caused by non-LDAP users |
| + |
| Servers that are connected to LDAP but have non-LDAP user accounts |
| created by `gerrit create-account` (e.g. batch role accounts for |
| build systems) were crashing with a NullPointerException when the |
| LdapRealm tried to discover which LDAP groups the non-LDAP user |
| was a member of in the directory. |
| |
| * Fix domain field of HTTP digest authentication |
| + |
| Per RFC 2617 the domain field is optional. If it is not present, |
| the digest token is valid on any URL on the server. When set it |
| must be a path prefix describing the URLs that the password would |
| be valid against. |
| + |
| When a canonical URL is known, supply that as the only domain that |
| is valid. When the URL is missing (e.g. because the provider is |
| still broken) rely on the context path of the application instead. |
| |
| === Replication |
| |
| * Fix inconsistent behavior when replicating `refs/meta/config` |
| + |
| In `replication.config`, if `authGroup` is set to be used together with |
| `mirror = true`, refs blocked through the `authGroup` are deleted from |
| the slave/mirror. The same correctly applies if the `authGroup` is used |
| to block `refs/meta/config`. |
| + |
| However, if `replicatePermission` was set to `false`, Gerrit was |
| refusing to clean up `refs/meta/config` on the slave/mirror. |
| |
| * Fix bug with member assignment order in PushReplication. |
| + |
| The groupCache was being used before it was set in the class. Fix the |
| ordering of the assignment. |
| |
| === Approval Categories |
| |
| * Make `NoBlock` and `NoOp` approval category functions work |
| + |
| The approval category functions `NoBlock` and `NoOp` have not worked |
| since the integration of Prolog. |
| + |
| `MAY` was introduced as a new submit record status to complement `OK`, |
| `REJECT`, `NEED`, and `IMPOSSIBLE`. This allows the expression of |
| approval categories (labels) that are optional, i.e. could either be |
| set or unset without ever influencing whether the change could be |
| submitted. Previously there was no way to express this property in |
| the submit record. |
| + |
| This enables the `NoBlock` and `NoOp` approval category functions to |
| work as they now emit may() terms from the Prolog rules. Previously |
| they returned ok() terms lacking a nested user term, leading to |
| exceptions in code that expected a user context if the label was `OK`. |
| |
| * Fix category block status without negative score |
| + |
| Categories without blocking or approval scores will result in the |
| blocking/approved image appearing in the category column after changes |
| are merged should the score by the reviewer match the minimum or |
| maximum value respectively. |
| + |
| A check to ignore "No Score" values of 0 was added. |
| |
| * Don't remove dashes from approval category name |
| + |
| If an approval category name contained a dash, it was removed by |
| Gerrit. On the other side a space in an approval category name is |
| converted to a dash. This was confusing for writing Prolog submit |
| rules. If, for example, one defined a new category named `X-Y`, then in |
| the Prolog code the proper name for that category would have been `XY` |
| which was unintuitive. |
| |
| * Fix NPE in `PRED__load_commit_labels_1` |
| + |
| If a change query uses reviewer information and loads the approvals |
| map, but there are no approvals for a given patch set available, the |
| collection came out null, which cannot be iterated. Make it always be |
| an empty list. |
| |
| === Other |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1554[issue 1554]: |
| Fix cloning of new projects from slave servers |
| + |
| If a new project is created in Gerrit the replication creates the |
| repository for this new project directly in the filesystem of the slave |
| server. The slave server was not discovering this new repository and as |
| result any attempt to clone the corresponding project from the slave |
| server failed. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1548[issue 1548]: |
| Create a ref for the patch set that is created when a change is |
| cherry-picked and trigger the replication for it: |
| + |
| If Cherry Pick is chosen as submit type, on submit a new commit is |
| created by the cherry-pick. For this commit a new patch set is created |
| which is added to the change. Using any of the download commands to |
| fetch this new patch set failed with 'Couldn't find remote ref' because |
| no ref for the new patch set was created. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1626[issue 1626]: |
| Fix NullPointerException on cherry-pick if `changeMerge.test` is enabled |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1491[issue 1491]: |
| Fix nested submodule updates |
| |
| * Set link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#transfer.timeout[transfer |
| timeout] for pushes through HTTP |
| + |
| The transfer timeout was only set when pushing via SSH. |
| |
| * link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#receive.maxObjectSizeLimit[ |
| Limit maximum Git object size] when pushing through HTTP |
| + |
| The limit for the maximum object size was only set when pushing via SSH. |
| |
| * Fix units of `httpd.maxwait` |
| + |
| The default unit here is minutes, but Jetty wants to get milliseconds |
| from the maxWait field. Convert the minutes returned by getTimeUnit to |
| be milliseconds, matching what Jetty expects. |
| + |
| This should resolve a large number of 503 errors for Git over HTTP. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1493[issue 1493]: |
| Fix wrong "change ... closed" message on direct push |
| + |
| Pushing a commit directly into the central repository with bypassing |
| code review wrongly resulted in a "change ... closed" message if the |
| commit was already pushed for review and if a Change-Id was included in |
| the commit message. Despite of the error message the push succeeded and |
| the corresponding change got closed. Now the message is not printed |
| anymore. |
| |
| * Fix NPE that can hide guice CreationException on site init |
| + |
| Note that the `--show-stack-trace` option is needed to print the stack |
| trace when a program stops with a Die exception. |
| |
| * Do not automatically add author/committer as reviewer to drafts |
| |
| * Do not automatically add reviewers from footer lines to drafts |
| |
| * Fix NullPointerException in MergeOp |
| + |
| The body of the commit object may have been discarded earlier to |
| save memory, so ensure it exists before asking for the author. |
| |
| * link:http://code.google.com/p/gerrit/issues/detail?id=1396[issue 1396]: |
| Initialize the submodule commit message buffer |
| |
| * Fix file name matching in `commit_delta` to perform substring |
| matching |
| + |
| The `commit_delta` predicate was matching the entire file name against |
| the given regular expression while other predicates (`commit_edits`, |
| `commit_message_matches`) performed substring matching. It was |
| inconsistent that for `commit_delta` it was needed to write something |
| like: |
| + |
| ---- |
| commit_delta('.*\.java') |
| ---- |
| + |
| to match all `*.java` files, while for `commit_edits` it was: |
| + |
| ---- |
| commit_edits('\.java$', '...') |
| ---- |
| + |
| to match the same set of (Java) files. |
| |
| * Create index for submodule subscriptions on site upgrade |
| |
| * Fix URL to Jetty XML DTDs so they can be properly validated |
| |
| * Fix resource leak when `changeMerge.test` is `true` |
| |
| * Fix possible synchronization issue in TaskThunk |
| |
| * Fix possible NPEs in `ReplaceRequest.cmd` usage in `ReceiveCommits` |
| + |
| The `cmd` field is populated by `validate(boolean)`. If this method |
| fails, results on some `ReplaceRequests` may not be set. Guard the |
| attempt to access the field with a null check. |
| |
| * Match no labels if current patch set is not available |
| + |
| If the current patch set cannot be loaded from `ChangeData`, assume no |
| label information. This works around an NullPointerException inside of |
| `ChangeControl` where the `PatchSet` is otherwise required. |
| |
| * Create new patch set references before database records |
| + |
| Ensure the commit used by a new change or replacement patch set |
| always exists in the Git repository by writing the reference first |
| as part of the overall `BatchRefUpdate`, then inserting the database |
| records if all of the references stored successfully. |
| |
| * Fix rebase patch set and revert change to update Git first |
| + |
| Update the Git reference before writing to the database. This way the |
| repository cannot be corrupted if the server goes down between the two |
| actions. |
| |
| * Make sure we use only one type of NoteMerger for review notes creation |
| |
| * Fix generation of owner group in GroupDetail |
| + |
| Set the GroupDetail.ownerGroup to the AccountGroup.ownerGroupUUID |
| instead of the groupUUID. |
| |
| * Ensure that ObjectOutputStream in H2CacheImpl is closed |
| |
| * Ensure that RevWalk in SubmoduleOp is released |