| Release notes for Gerrit 2.0.19, 2.0.19.1, 2.0.19.2 | 
 | =================================================== | 
 |  | 
 | Gerrit 2.0.19.2 is now available in the usual location: | 
 |  | 
 | link:http://code.google.com/p/gerrit/downloads/list[http://code.google.com/p/gerrit/downloads/list] | 
 |  | 
 | Important Notices | 
 | ----------------- | 
 |  | 
 | * Prior User Sessions | 
 | + | 
 | The cookie used to identify a signed-in user has been changed.  All users | 
 | will be automatically signed-out during this upgrade, and will need to | 
 | sign-in again after the upgrade is complete. | 
 | Users who try to use a web session from before the upgrade may receive the | 
 | obtuse error message "Invalid xsrfKey in request".  Prior web clients are | 
 | misinterpreting the error from the server.  Users need to sign-out and | 
 | sign-in again to pick up a new session. | 
 | This change was necessary to close GERRIT-83, see below. | 
 |  | 
 | * Preserving Sessions Across Restarts | 
 | + | 
 | Administrators who wish to preserve user sessions across server restarts must | 
 | set [http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html#cache.directory cache.directory] in gerrit.config.  This allows Gerrit to flush the set | 
 | of active sessions to disk during shutdown, and load them back during startup. | 
 |  | 
 | Schema Change | 
 | ------------- | 
 |  | 
 | *WARNING: This version contains a schema change* (since 2.0.18) | 
 |  | 
 | Important notes about this schema change: | 
 |  | 
 | * Do not run the schema change while the server is running. | 
 | + | 
 | This upgrade adds a new required column to the changes table, something | 
 | which cannot be done while users are creating records. Like .18, I _strongly_ | 
 | suggest a full shutdown, schema upgrade, then startup approach. | 
 | Apply the database specific schema script: | 
 | ---- | 
 |   java -jar gerrit.war --cat sql/upgrade016_017_postgres.sql | psql reviewdb | 
 |   java -jar gerrit.war --cat sql/upgrade016_017_mysql.sql    | mysql reviewdb | 
 | ---- | 
 |  | 
 |  | 
 | New Features | 
 | ------------ | 
 | * New ssh create-project command | 
 | + | 
 | Thanks to Ulrik Sjölin we now have `gerrit create-project`  | 
 | available over SSH, to construct a new repository and database | 
 | record for a project.  Documentation has also been updated to | 
 | reflect that the command is now available. | 
 |  | 
 | * Be more liberal in accepting Signed-off-by lines | 
 | + | 
 | The "Require Signed-off-by line" feature in a project is now  | 
 | more liberal.  Gerrit now requires that the commit be signed off | 
 | by either the author or the committer.  This was relaxed because | 
 | kernel developers often cherry-pick in patches signed off by | 
 | the author and by Linus Torvalds, but not by the committer who | 
 | did the backport cherry-pick. | 
 |  | 
 | * Allow cache.name.diskLimit = 0 to disable on disk cache | 
 | + | 
 | Setting cache.name.diskLimit to 0 will disable the disk for  | 
 | that cache, even though cache.directory was set.  This allows | 
 | sites to set cache.diff.diskLimit to 0 to avoid caching the diff | 
 | records on disk, but still allow caching web_sessions to disk, | 
 | so that live sessions are maintained across server restarts. | 
 | This is a change in behavior, the prior meaning of diskLimit = | 
 | 0 was "unlimited", which is not very sane given how Ehcache | 
 | manages the on disk cache files. | 
 |  | 
 | * Allow human-readable units in config.name.maxage | 
 | + | 
 | Timeouts for any cache.name.maxAge may now be specified in human | 
 | readable units, such as "12 days" or "3 hours".  The server will | 
 | automatically convert them to minutes during parsing.  If no | 
 | unit is specified, minutes are assumed, to retain compatibility | 
 | with prior releases. | 
 |  | 
 | * Add native LDAP support to Gerrit | 
 | + | 
 | Gerrit now has native LDAP support.  Setting auth.type to  | 
 | HTTP_LDAP and then configuring the handful of ldap properties | 
 | in gerrit.config will allow Gerrit to load group membership | 
 | directly from the organization's LDAP server.  This replaces | 
 | the need for the sync-groups script posted in the wiki.  See: | 
 | link:http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html#ldap[http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html#ldap] | 
 | If you use the sync-groups script from the wiki page, you would | 
 | also need to delete the group members after upgrading, to remove | 
 | unnecessary records in your database: | 
 | {{{ | 
 | DELETE FROM account_group_members | 
 | WHERE group_id IN ( | 
 | SELECT group_id FROM account_groups | 
 | WHERE automatic_membership = 'Y'); | 
 | }}} | 
 |  | 
 | * Don't allow users to edit their name if it comes from LDAP | 
 | + | 
 | User information loaded from LDAP, such as full name or SSH | 
 | username, cannot be modified by the end-user.  This allows the | 
 | Gerrit site administrator to require that users conform to the | 
 | standard information published by the organization's directory | 
 | service.  Updates in LDAP are automatically reflected in Gerrit  | 
 | the next time the user signs-in. | 
 |  | 
 | * Remembers anchor during HTTP logins | 
 | + | 
 | When using an HTTP SSO product, clicking on a Gerrit link received | 
 | out-of-band (e.g. by email or IM) often required clicking the | 
 | link twice.  On the first click Gerrit redirect you to the | 
 | organization's single-sign-on authentication system, which upon  | 
 | success redirected to your dashboard.  The actual target of the | 
 | link was often lost, so a second click was required. | 
 | With .19 and later, if the administrator changes the frontend web | 
 | server to perform authentication only for the /login/ subdirectory | 
 | of Gerrit, this can be avoided.  For example with Apache: | 
 | ---- | 
 |      <Location "/login/"> | 
 |        AuthType Basic | 
 |        AuthName "Gerrit Code Review" | 
 |        Require valid-user | 
 |        ... | 
 |      </Location> | 
 | ---- | 
 |    During a request for an arbitrary URL, such as '/#change,42', | 
 |    Gerrit realizes the user is not logged in.  Instead of sending an | 
 |    immediate redirect for authentication, Gerrit sends JavaScript    | 
 |    to save the target token (the part after the '#' in the URL) | 
 |    by redirecting the user to '/login/change,42'.  This enters     | 
 |    the secured area, and performs the authentication.  When the | 
 |    authenticated user returns to '/login/change,42' Gerrit sends | 
 |    a redirect back to the original URL, '/#change,42'. | 
 |  | 
 |  | 
 | * Create check_schema_version during schema creation | 
 | + | 
 | Schema upgrades for PostgreSQL now validate that the current  | 
 | schema version matches the expected schema version at the start | 
 | of the upgrade script.  If the schema does not match, the script | 
 | aborts, although it will spew many errors. | 
 |  | 
 | * Reject disconnected ancestries when creating changes | 
 | + | 
 | Uploading commits to a project now requires that the new commits | 
 | share a common ancestry with the existing commits of that project. | 
 | This catches and prevents problems caused by a user making a typo  | 
 | in the project name, and inadverently selecting the wrong project. | 
 |  | 
 | * Change-Id tags in commit messages to associate commits | 
 | + | 
 | Gerrit now looks for 'Change-Id: I....' in the footer area of a | 
 | commit message and uses this to identify a change record within | 
 | the project. | 
 | If the listed Change-Id has not been seen before, a new change  | 
 | record is created.  If the Change-Id is already known, Gerrit | 
 | updates the change with the new commit.  This simplifies updating | 
 | multiple changes at once, such as might happen when rebasing an | 
 | entire series of commits that are still being reviewed. | 
 | A commit-msg hook can be installed to automatically generate  | 
 | these Change-Id lines during initial commit: | 
 | {{{ | 
 | scp -P 29418 review.example.com:hooks/commit-msg .git/hooks/ | 
 | }}} | 
 | Using this hook ensures that the Change-Id is predicatable once | 
 | the commit is uploaded for review. | 
 | For more details, please see the docs: | 
 | link:http://gerrit.googlecode.com/svn/documentation/2.0/user-changeid.html[http://gerrit.googlecode.com/svn/documentation/2.0/user-changeid.html] | 
 |  | 
 | Bug Fixes | 
 | --------- | 
 | * Fix yet another ArrayIndexOutOfBounds during side-by-s... | 
 | + | 
 | We found yet another bug with the side-by-side view failing  | 
 | under certain conditions.  I think this is the last bug. | 
 |  | 
 | * Apply URL decoding to parameter of /cat/ | 
 | * Fix old image when shown inline in unified diff | 
 | + | 
 | Images weren't displaying correctly, even though | 
 | mimetype.image/png.safe was true in gerrit.config. | 
 | Turned out to be a problem with the parameter decoding of the  | 
 | /cat/ servlet, as well as the link being generated wrong. | 
 |  | 
 | * Fix high memory usage seen in `gerrit show-caches` | 
 | + | 
 | In Gerrit 2.0.18 JGit had a bug where the repository wasn't being  | 
 | reused in memory.  This meant that we were constantly reloading | 
 | the repository data in from disk, so the server was always maxed | 
 | out at core.packedGitLimit and core.packedGitOpenFiles, as no | 
 | data was being reused from the cache.  Fixed in this release. | 
 |  | 
 | * Fix display of timeouts in `gerrit show-caches` | 
 | + | 
 | Timeouts were not always shown correctly, sometimes 12 hours  | 
 | was showing up as 2.5 days, which is completely wrong.  Fixed. | 
 |  | 
 | * GERRIT-261  Fix reply button when comment is on the last line | 
 | + | 
 | The "Reply" button didn't work if the comment was on the last  | 
 | line of the file, the browser caught an array index out of | 
 | bounds exception as we walked off the end of the table looking | 
 | for where to insert the new editor box. | 
 |  | 
 | * GERRIT-83   Make sign-out really invalidate the user's session | 
 | + | 
 | The sign-out link now does more than delete the cookie from the  | 
 | user's browser, it also removes the token from the server side. | 
 | By removing it from the server, we prevent replay attacks where | 
 | an attacker has observed the user's cookie and then later tries | 
 | to issue their own requests with the user's cookie.  Note that | 
 | this sort of attack is difficult if SSL is used, as the attacker | 
 | would have a much more difficult time of sniffing the user's | 
 | cookie while it was still live. | 
 |  | 
 | * Evict account record after changing SSH username | 
 | + | 
 | Changing the SSH username on the web immediately affected the  | 
 | SSH daemon, but the web still showed the old username.  This | 
 | was due to the change operation not flushing the cache that | 
 | the web code was displaying from.  Fixed. | 
 |  | 
 | * Really don't allow commits to replace in wrong project | 
 | + | 
 | It was possible for users to upload replacement commits to the  | 
 | wrong project, e.g. uploading a replacement commit to project | 
 | B while picking a change number from project A.  Fixed.  | 
 |  | 
 | =Fixes in 2.0.19.1= | 
 | ------------------- | 
 |  | 
 | * Fix NPE during direct push to branch closing a change | 
 | + | 
 | Closing changes by pushing their commits directly into the branch didn't | 
 | always work as expected, due to some data not being initialized correctly. | 
 |  | 
 | * Ignore harmless "Pipe closed" in scp command | 
 | + | 
 | scp command on the server side threw exceptions when a client aborted the | 
 | data transfer.  We typically don't care to log such cases.  | 
 |  | 
 | * Refactor user lookup during permission checking | 
 | * GERRIT-264  Fix membership in Registered Users group | 
 | + | 
 | Users were not a member of "Registered Users", this was a rather serious | 
 | bug in the code as it meant many users lost their access rights. | 
 |  | 
 | * GERRIT-265  Correctly catch "Invalid xsrfKey in request" error as ... | 
 | + | 
 | Above I mentioned we should handle this error as "Not Signed In", only | 
 | the pattern match wasn't quite right.  Fixed. | 
 |  | 
 | * GERRIT-263  Fix --re=bob to match bob@example.com when using HTTP_LDAP | 
 | + | 
 | HTTP_LDAP broke using local usernames to match an account.  Fixed. | 
 |  | 
 | =Fixes in 2.0.19.2= | 
 | ------------------- | 
 | * Don't line wrap project or group names in admin panels | 
 | + | 
 | Line wrapping group names like "All Users" when the description column | 
 | has a very long name in it is ugly. | 
 |  | 
 | * GERRIT-267  Don't add users to a change review if they cannot access | 
 | + | 
 | If a user cannot access a change, let the owner know when they try to | 
 | add the user as a reviewer, or CC them on it. | 
 |  | 
 | * commit-msg: Do not insert Change-Id if the message is ... | 
 | + | 
 | The commit-msg hook didn't allow users to abort accidental git commit | 
 | invocations, as it still modified the file, making git commit think | 
 | that the end-user wanted to make a commit.  Anyone who has a copy of | 
 | the hook should upgrade to the new hook, if possible. | 
 |  | 
 | * Support recursive queries against LDAP directories | 
 | * Fix parsing of LDAP search scope properties | 
 | + | 
 | As reported on repo-discuss, recursive search is sometimes necessary, | 
 | and is now the default. | 
 |  | 
 | Removed Features | 
 | ---------------- | 
 |  | 
 | * Remove support for /user/email style URLs | 
 | + | 
 | I decided to remove this URL, its a pain to support and not | 
 | discoverable.  Its unlikely anyone is really using it, but if | 
 | they are, they could try using "#q,owner:email,n,z" instead. | 
 |  | 
 | Other Changes | 
 | ------------- | 
 |  | 
 | * Start 2.0.19 development | 
 | * Document the Failure and UnloggedFailure classes in Ba... | 
 | * Merge change 11109 | 
 | * Document gerrit receive-pack is alias for git receive-... | 
 | * Define a simple query language for Gerrit | 
 | * Create new projects on remote systems with mkdir -p | 
 | * Set the GIT_DIR/description file during gerrit create-... | 
 | * Remove unnecessary toLowerCase calls in AdminCreatePro... | 
 | * Remove unnecessary exception from AdminCreateProject | 
 | * Remove unused import from AccountExternalId | 
 | * Abstract out account creation and simplify sign-on for... | 
 | * Implement server side sign-out handling | 
 | * Cleanup private keys in system_config table | 
 | * Remove dead max_session_age field from system_config | 
 | * Report 'Invalid xsrfKey' as 'Not Signed In' | 
 | * Update gerrit flush-caches documentation about web_ses... | 
 | * Update documentation on cache "web_sessions" configura... | 
 | * Add getSchemeRest to AccountExternalId | 
 | * Cleanup ContactStore and WebModule injection | 
 | * Catch Bouncy Castle Crypto not installed when loading ... | 
 | * Declare caches in Guice rather than hardcoded in Cache... | 
 | * Remove old commented out cache configuration code | 
 | * Don't NPE in SSH keys panel when SSHD is bound to loca... | 
 | * Don't send users to #register,register,mine | 
 | * Document the new LDAP support | 
 | * Cleanup section anchors to be more useful | 
 | * Put anchors on every configuration variable section | 
 | * Add missing AOSP copyright header to WebSession | 
 | * Fix short header lines in gerrit-config.txt | 
 | * Update documentation about system_config private key f... | 
 | * Fetch groups from LDAP during user authentication | 
 | * Actually honor cache.ldap_groups.maxage | 
 | * Add enum parsing support to ConfigUtil | 
 | * Rename LoginType to AuthType | 
 | * Support loading the sshUserName from LDAP | 
 | * Change ldap.accountDisplayName to ldap.accountFullName | 
 | * Fix parsing set-to-nothing options in ldap section | 
 | * Report more friendly errors from gwtjsonrpc | 
 | * Ensure dialog box displays correctly on network failure | 
 | * Document how setting LDAP properties disables web UI | 
 | * Ensure the commit body is parsed before getting the co... | 
 | * Cleanup more section anchors | 
 | * Make documentation table of contents anchors human rea... | 
 | * Remove notes about HTML 5 offline support | 
 | * Fix typo in LegacyGerritServlet javadoc | 
 | * Use subList in server side change query code | 
 | * Remove unsupported /all_unclaimed | 
 | * Rewrite UrlRewriteFilter in terms of Guice bindings | 
 | * Create a commit-msg hook to generate Change-Id tags | 
 | * Add change_key to changes table in database | 
 | * Allow searching for changes by Change-Id strings | 
 | * Display the change key, aka Change-ID in the informati... | 
 | * Display abbreviated change ids in change lists | 
 | * Change javax.security AccountNotFoundException to NoSu... | 
 | * Automatically update existing changes during refs/for/... | 
 | * Automatically close changes when pushing into a branch... | 
 | * Document the new commit-msg hook supplied by Gerrit | 
 | * Correct title of "Command Line Tools" documentation pa... | 
 | * Correct URL example used in Google Analytics Integrati... | 
 | * Correct comment about customizing categories and caches | 
 | * Fix formatting of remote.name.timeout section in docum... | 
 | * Add anchors for remote settings in replication.config ... | 
 | * Widen the search panel now that Change-Ids are 41 char... | 
 | * Revert "Ensure dialog box displays correctly on networ... | 
 | * Allow searches for Change-Ids starting with lowercase ... | 
 | * Fix line wrapped formatting in ChangeListServiceImpl | 
 | * Move Change.Key abbreviation to Change.Key class | 
 | * Format change ids in listing tables with a fixed with ... | 
 | * Cleanup documentation of the commit-msg hook | 
 | * Cleanup the command line tool index page | 
 | * Correct stale documentation section about SSH authenti... | 
 | * Correct access control documentation about project own... | 
 | * Quote the current directory when running asciidoc | 
 | * Move the Default Workflow link into the top of the Use... | 
 | * Correct formatting of usage in gerrit-cherry-pick docu... | 
 | * Document how Gerrit uses Change-Id lines | 
 | * Add Change-Id lines during cherry-pick if not already ... | 
 | * Fix "no common ancestry" bug | 
 | * Fix commit-msg hook to handle first lines like "foo: f... | 
 | * Add a link to Gerrit's project to the top of gerrit-ch... | 
 | * Add full ASLv2 copyright notice to commit-msg hook | 
 | * Embed Gerrit's version number into shell scripts copie... | 
 | * Don't drop max_session_age column in transaction durin... | 
 | * gerrit 2.0.19 |