| Release notes for Gerrit 2.5 |
| ============================ |
| |
| Gerrit 2.5 is now available: |
| |
| link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.5.war[http://code.google.com/p/gerrit/downloads/detail?name=gerrit-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. |
| |
| 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 partioned 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:../Documentation/dev-plugins.html#plugin[plugins] and |
| link:../Documentation/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:../Documentation/dev-plugins.html[Documentation about |
| plugin development] including instructions for: |
| ** link:../Documentation/dev-plugins.html#getting-started[how to get |
| started with plugin development] |
| ** link:../Documentation/dev-plugins.html#deployment[plugin |
| deployment/installation] |
| |
| * link:../Documentation/dev-plugins.html#API[API for plugins and |
| extensions] |
| |
| * Support for link:../Documentation/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:../Documentation/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:../Documentation/dev-plugins.html#ssh[bind the implementation |
| as that SSH command]. |
| + |
| Likewise link:../Documentation/dev-plugins.html#http[HTTP servlets |
| can also be bound to URLs]. |
| |
| * link:../Documentation/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:../Documentation/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:../Documentation/dev-plugins.html#macros[macros in |
| Markdown plugin documentation] |
| |
| * link:../Documentation/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:../Documentation/cmd-plugin-ls.html[list the installed |
| plugins] |
| ** link:../Documentation/cmd-plugin-install.html[install plugins] |
| ** link:../Documentation/cmd-plugin-enable.html[enable plugins] |
| ** link:../Documentation/cmd-plugin-remove.html[disable plugins] |
| ** link:../Documentation/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:../Documentation/config-gerrit.html#plugins.checkFrequency[ |
| plugins.checkFrequency] in the Gerrit config file. By configuration |
| the scanner can also be disabled. |
| |
| * link:../Documentation/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:../Documentation/dev-plugins.html#getting-started[Maven |
| archetype for creating gerrit plugin projects] |
| |
| 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:../Documentation/rest-api.html[Documentation of the REST API] |
| |
| * Support REST endpoints to |
| ** link:../Documentation/rest-api.html#changes[query changes] |
| ** link:../Documentation/rest-api.html#projects[list projects] |
| ** link:../Documentation/rest-api.html#suggest-projects[suggest |
| projects] |
| ** link:../Documentation/rest-api.html#accounts_self_capabilities[query |
| the global capabilities of the calling user] |
| |
| * Support link:../Documentation/rest-api.html#authentication[anonymous |
| and authenticated access] to the REST endpoints |
| |
| * Support link:../Documentation/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:../Documentation/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 |
| |
| * Disable submit button if merge will fail |
| + |
| Only if link:../Documentation/config-gerrit.html#changeMerge[ |
| `changeMerge.test = true`]. |
| |
| * 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. |
| |
| User Dashboard |
| ^^^^^^^^^^^^^^ |
| * Support for link:../Documentation/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 |
| ^^^^^ |
| |
| * 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. |
| |
| * 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. |
| |
| * 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. |
| |
| * 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 similiar 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:../Documentation/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:../Documentation/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:../Documentation/cmd-set-account.html[SSH command to manage |
| accounts] |
| |
| * link:../Documentation/cmd-set-project.html[SSH command to manage |
| project settings] |
| |
| * link:../Documentation/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:../Documentation/config-gerrit.html#ssh-alias[`ssh-alias` section] |
| of the Gerrit configuration. |
| |
| * Support JSON output format for the |
| link:../Documentation/cmd-ls-projects.html[ls-projects] SSH command |
| |
| * Support creation of multiple branches in |
| link:../Documentation/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:../Documentation/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:../documentation/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:../documentation/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:../Documentation/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:../Documentation/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:../Documentation/access-control.html#capability_emailReviewers[ |
| `emailReviewers`] capability |
| |
| Error |
| ^^^^^ |
| * Improve documentation of link:../Documentation/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`. |
| |
| Dev |
| ^^^ |
| |
| * Update push URL in link:../SUBMITTING_PATCHES[SUBMITTING_PATCHES] |
| + |
| Pushes are now accepted at the same address as clone/fetch/pull. |
| |
| * Update link:../Documentation/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:../Documentation/dev-eclipse.html#known-problems[known issues] |
| when debugging Gerrit with Eclipse |
| |
| * Improved the section on |
| link:../Documentation/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:../Documentation/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 |
| ^^^^^ |
| |
| * 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:../Documentation/install-quick.html[quick installation guide] |
| |
| * Add missing documentation about |
| link:../Documentation/config-gerrit.html#hooks[hook configuration] |
| + |
| Add documentation of hook config for `change-restored`, `ref-updated` |
| and `cla-signed` hooks. |
| |
| * 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:../Documentation/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, Eclispe 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 Eclispe |
| 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:../Documentation/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:../Documentation/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 Gauva 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:../Documentation/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:../Documentation/config-gerrit.html#auth.type[ |
| `auth.type`] and link:../Documentation/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. |
| |
| * 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. |
| |
| * Abstract group systems into GroupBackend interface |
| |
| * Add more link:../Documentation/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:../Documentation/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. |
| |
| * 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:../Documentation/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 parametrised 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 exccessive 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. |
| |
| * 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 |
| ~~~~~~~~~~~ |
| * 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:../Documentation/rest-api.html#changes[`/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 diappearance 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` |
| capabilitiy 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 decendents, 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. |
| |
| * 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. |
| |
| * 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. |
| |
| * Fix displaying of comments on deleted files |
| + |
| Published and draft comments that are posted on deleted files were not |
| loaded and displayed. |
| |
| * 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`. |
| |
| SSH |
| ~~~ |
| |
| * 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 the `export-review-notes` command's Guice bindings |
| + |
| The `export-review-notes` command was broken becasue 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 behaviour 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 |
| |
| * 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. |
| |
| * 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 |
| ~~~~~ |
| |
| * Set link:../Documentation/config-gerrit.html#transfer.timeout[transfer |
| timeout] for pushes through HTTP |
| + |
| The transfer timeout was only set when pushing via SSH. |
| |
| * link:../Documentation/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 |
| |
| * 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 |
| |
| * 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 |
| |
| * 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. |