Release notes for Gerrit 2.3 ============================ Gerrit 2.3 is now available: link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.3.war[http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.3.war] Schema Change ------------- *WARNING:* This release contains schema changes. To upgrade: ---- java -jar gerrit.war init -d site_path ---- *WARNING:* Upgrading to 2.3.x requires the server be first upgraded to 2.1.7 (or a later 2.1.x version), and then to 2.3.x. If you are upgrading from 2.2.x.x, you may ignore this warning and upgrade directly to 2.3.x. New Features ------------ Drafts ~~~~~~ * New draft statuses and magic branches + Adds draft status to Change. DRAFT status in change occurs before NEW and will be for a change that is not meant for review (yet). Also adds magic branches refs/drafts/ and refs/publish/ that will handle whether or not a patchset is a draft or goes straight to review. refs/for/ should be deprecated in favor of explicitly marking a patchset as a draft or directly to review. * Draft patchset and change visibility in UI + If a patchset is a draft, adds a (DRAFT) label next to the revision (or gitweb link if it exists). If a change is a draft, adds a (DRAFT) next to the subject and changes the status appropriately. * Publish draft patchsets in UI and SSH + Adds Publish button to draft patchsets in UI and an option to publish draft patchsets in the review ssh command. Publishing a draft patchset makes it visible. Publishing a draft patchset in a draft change irreversibly upgrades the change status to NEW. * Delete draft changes and patchsets + Adds ability to delete draft changes and patchsets that are not meant or fit for code review. Deleting a draft patchset also deletes the corresponding ref from the repository and decrements the next patch set number for the change if necessary. Deleting a draft change deletes all of its (draft) patchsets. * Add pushing drafts to refs/drafts/ + Pushing to refs/drafts/ will now push a draft patchset. If this is the first patch set, change created will be in draft status. Pushing a draft patchset to a draft change keeps it in draft status. Pushing a non-draft patchset (with refs/publish/ or refs/for/, they do the same thing) to a draft change turns it into a non-draft change. Draft patchsets cannot be submitted. * When pushing changes as drafts, output [DRAFT] next to the change link Web ~~~ * issue 203 Create project through web interface + Add a new panel in the Admin->Projects Screen. It enables the users that are allowed to create projects via command-line to create them also via web interface. * Suggest parent for 'create-project' in the UI. + Add a list of parent suggestions for 'create project' in the UI, so the user can select a parent for the new project from a list of projects that are already parents to other projects. * issue 981 Fix diffs skipping one line + Don't show '... skipping 1 common line ...'. The text to show this takes up just as much space as showing the line which was skipped. * issue 18 Support expanding lines of context in diff + Allow lines of context which were skipped in the side-by-side diff view to be expanded. This makes it easier to get more code context when needed but not show huge amounts of unneeded data. * Move checkbox to mark file as reviewed into title bar * Redirect the user to the reverted change (when reverting). * On group rename update the group name in the page title * In ProjectAccessScreen add link to history of project.config in gitweb * Removed superfluous 'comment' for patch history table. * Make OpenID login images transparent * Disable SSH Keys in the web UI if SSHD is disabled SSH ~~~ * Adds --description (-d) option to ls-projects + Allows listing of projects together with their respective description. * ls-projects: new option to list all accessible projects + Add a new option '--all' to the 'ls-projects' SSH command to display all projects that are accessible by the calling user account. Besides the projects that the calling user account has been granted 'READ' access to, this includes all projects that are owned by the calling user account (even if for these projects the 'READ' access right is not assigned to the calling user account). * Suggest parent for 'create-project' in the SSH command + Add an option '--suggest-parents' which will print out a list of projects that are already parents to another projects, thus it can help user to find a suitable parent for the new project. * Support reparenting all children of a parent project + This change adds a new option to the 'set-project-parent' command that allows reparenting all child projects of one parent project to another parent project. * set-parent-project: evict child projects from project cache * Add ssh command to list groups. * ls-groups: add option to list groups for a project + Add an option to the ls-groups SSH command that allows to list only those groups for which any permission is assigned to a project. * ls-groups: Add option to only list groups that are visible to all * ls-groups: Support listing groups by group type * ls-groups: Support listing of groups for a user * Add new SSH command to rename groups * Support for --file option for ssh queries. + Allows user to list files and attributes (ADDED, MODIFIED, DELETED, RENAMED, COPIED) when querying for patch sets. * Output full commit message in query results * Option for SSHD review-cmd to always publish the message. + "--force-message" option for the SSHD review command, which allows Gerrit to publish the "--message", even if the labels could not be applied due to change being closed. Config ~~~~~~ * issue 349 Apply states for projects (active, readonly and hidden) + Active state indicates the project is regular and is the default value. + Read Only means that users can see the project if read permission is granted, but all modification operations are disabled. + Hidden means the project is not visible for those who are not owners * Enable case insensitive login to Gerrit WebUI for LDAP authentication + Gerrit treats user names as case sensitive, while some LDAP servers don't. On first login to Gerrit the user enters his user name and Gerrit queries LDAP for it. Since LDAP is case-insensitive with regards to the username, the LDAP authentication succeeds regardless in which case the user typed in his user name. The username is stored in Gerrit exactly as entered by the user. For further logins the user always has to use the same case. If the user specifies his user name in a different case Gerrit tries to create a new account which fails with "Cannot assign user name ... to account ...; name already in use.". This error occurs because the LDAP query resolves to the same LDAP user and storing the username for SSH (which is by default always lower case) fails because such an entry exists already for the first account that the user created. + This change introduces a new configuration parameter that converts the user name always to lower case before doing the LDAP authentication. By this the login to the Gerrit WebUI gets case insensitive. If this configuration parameter is set, the user names for all existing accounts have to be converted to lower case. This change includes a server program to do this conversion. * Enable case insensitive authentication for git operations + A new configuration parameter is introduced that converts the username that is received to authenticate a git operation to lower case for looking up the user account in Gerrit. + By setting this parameter a case insensitive authentication for the git operations can be achieved, if it is ensured that the usernames in Gerrit (scheme 'username') are stored in lower case (e.g. if the parameter 'ldap.accountSshUserName' is set to '${sAMAccountName.toLowerCase}'). * Support replication to local folder * Read timeout parameter for LDAP connections: ldap.readTimeout + This helps prevent a very slow LDAP server from blocking all SSH command creation threads. * Introduce a git maxObjectSizeLimit in the [receive] config + This limits the size of uploaded files * Make 'Anonymous Coward' configurable * Add property to configure path separator in URLs for a gitweb service * Customize link-name pointing to gitweb-service. + Previously the link to the external gitweb-type pages said "(gitweb)" regardless if using cgit or a custom service. * Support gitweb.type=disabled * rules.enable: Support disabling per project prolog rules in gerrit.config * Allow site administrators to define Git-over-HTTP mirror URL * Allow sshd.listenAddress = off to disable the daemon * daemon: Allow httpd without sshd * Allow disabling certain features of HostPageServlet + These features are: user agent detection and automatic refresh logic associated with the site header, footer and CSS. Dev ~~~ * Fix 'No source code is available for type org.eclipse.jgit.lib.Constants' * Fix miscellaneous compiler warnings * Add entries to .gitignore for m2e settings/preference files * Package source JARs for antlr, httpd, server * pom.xml: change gerrit-war's dependency on gerrit-main to runtime + This only seems to matter to IntelliJ, since the Main class is provided to the war via an overlay in gerrit-war/pom.xml * Fixed the full name of the MAVEN2_CLASSPATH_CONTAINER + Fixes java.lang.NoClassDefFoundError: com/google/gwt/dev/DevMode Miscellaneous ~~~~~~~~~~~~~ * Allow superprojects to subscribe to submodules updates + The feature introduced in this release allows superprojects to subscribe to submodules updates. + When a commit is merged to a project, the commit content is scanned to identify if it registers submodules (if the commit contains new gitlinks and .gitmodules file with required info) and if so, a new submodule subscription is registered. + When a new commit of a registered submodule is merged, gerrit automatically updates the subscribers to the submodule with new commit having the updated gitlinks. + The most notable benefit of the feature is to not require to push/merge commits of super projects (subscribers) with gitlinks whenever a project being a submodule is updated. It is only required to push commits with gitlinks when they are created (and in this case it is also required to push .gitmodules file). * Allow Realm to participate when linking an account identity + When linking a new user identity to an existing account, permit the Realm to observe the new incoming identity and the current account, and to alter the request. This enables a Realm to observe when a user verifies a new email address link. * issue 871 Show latest patchset with cherry-picked merge + When a change is published via the cherry-pick merge strategy, show the final commit as a patchset in the change history. This now makes it possible to search for the cherry-picked SHA1. * issue 871 Display hash of the cherry-pick merge in comment * Added more verbose messages when changes are being rejected * Display proper error message when LDAP is unavailable * Clarify error msg when user's not allowed to '--force push'. * ContainerAuthFilter: fail with FORBIDDEN if username not set * Resolve 'Project Owners' group if it is included into another group * Hide SSH URL in email footers if SSH is disabled * Sort the jar files from the war before adding to classpath. * Apply user preferences when loading site * Ensure HttpLog can always get the user identity * Prevent comments spam for abandoned commit + If some change was abandoned but later submitted (e.g. by cherry-picking it to a another branch) then pushing a new branch that contains this change no longer adds a new comment. * Make Address, EmailHeader visible to other EmailSenders * Use transactions to handle comments when possible * Try to use transactions when creating changes * gerrit.sh: disown doesn't accept pid as a argument, fix script * gerrit.sh: detach gerrit properly so it won't keep bad ssh sessions open. * Cache list of all groups in the group cache * issue 1161 Evict project in user cache on save of project meta data * Ensure that the site paths are resolved to their canonical form (for Windows) * Connect Velocity to slf4j * Expose project permissionOnly status via JSON-RPC * Make HEAD of All-Projects point to refs/meta/config * issue 1158 Added support for European style dates * Make macros in email templates local to the template * Support http://server/project for Git access * Use _ instead of $ for implementation-detail Prolog predicates * Update the Sign In anchor with current URL + Always update the href of the Sign In anchor in the menu bar with the current page URL after /login/, making the redirect process bring users back to the current view after sign in. * Improve validation of email registration tokens Upgrades -------- * Upgrade to gwtorm 1.2 * Upgrade to JGit 1.1.0.201109151100-r.119-gb4495d1 + This is needed because of this change: https://gerrit-review.googlesource.com/#/c/30450/ * Support Velocity 1.5 (as well as previous 1.6.4) Bug Fixes --------- * Avoid NPE when group is missing * Do not fail with NPE if context path of request is null * Fix NPE in set-project-parent command if parent is not specified * Only send mail to author and committer if they are registered to prevent an NPE * Avoid potential NPE when querying the queue. * Allow loading Project Access when there is no refs/meta/config * Fix calculation of project name if repo is not existing + If a project inherits from a non existing parent, prevent a StringIndexOutOfBoundsException. * Fix: Suppress "Error on refs/cache-automerge" warnings. * Don't allow registering for cleanup after cleanup runs + This prevents leaking a database connection. * issue 807 Fix: Tags are not replicated properly * Prevent smtp rejected users from rejecting emails for all users * Fix token saving redirect in container auth + Update the jump page that redirects users from /#TOKEN to /login/TOKEN. This forces using the container based authentication. Also correct "/login//" to be just "/login/". * Use custom error messages for Git-over-HTTP + Ensure clients see messages related to contributor agreement not being activated even if they push over HTTP. * Avoid double key event for GroupReferenceBox * Fix git push authentication over HTTP * Fix http://login/ redirect bug * Fix missing targets in /login/ URLs * set-project-parent: if update of 1 project fails continue with others * Verify the case of the project name before opening git repository * Update top level SUBMITTING_PATCHES URLs Documentation ------------- * Some updates to the design docs * cmd-index: Fix link to documentation of rename-group command * Update documentation for testing SSH connection * Bypass review updated with 2.2.x permissions * Add documentation for 'peer_keys' * Improve 'Push Merge Commit' access right documentation * Access control: Capabilities documented ** Administrate Server ** Create Account ** Create Group ** Create Project ** Flush Caches ** Kill Task ** Priority ** Query Limit ** Start Replication ** View caches ** View connections ** View queue * Access control: Example roles documented ** Contributor ** Developer ** CI System ** Integrator ** Project owner ** Administrator