Merge "Cache config value in LdapAuthBackend"
diff --git a/Documentation/cmd-query.txt b/Documentation/cmd-query.txt
index bedfc3d..f28b4f5 100644
--- a/Documentation/cmd-query.txt
+++ b/Documentation/cmd-query.txt
@@ -37,10 +37,14 @@
 to resume the query at the change that follows the last change of
 the prior result set.
 
-Non-option arguments to this command are joined with spaces and then
-parsed as a query.  This simplifies calling conventions over SSH
-by permitting operators to appear in different arguments without
-multiple levels of quoting required.
+Non-option arguments to this command are joined with spaces and
+then parsed as a query. This simplifies calling conventions over
+SSH by permitting operators to appear in different arguments.
+
+Query operators may quote values using matched curly braches
+(e.g. `reviewerin:{Developer Group}`) to sidestep issues with 2
+levels of shell quoting (caller shell invoking SSH, and the SSH
+command line parser in the server).
 
 OPTIONS
 -------
diff --git a/Documentation/config-cla.txt b/Documentation/config-cla.txt
new file mode 100644
index 0000000..ebdead4
--- /dev/null
+++ b/Documentation/config-cla.txt
@@ -0,0 +1,82 @@
+Gerrit Code Review - Contributor Aggreements
+============================================
+
+Users can be required to sign one or more contributor agreements before
+being able to submit a change in a project.
+
+Contributor agreements are global and can be configured by modifying
+the `project.config` file on the `All-Projects` project. Push permission
+needs to be granted for the `refs/meta/config` branch to be able to push
+back the `project.config` file. Consult
+link:access-control.html[access controls] for details on how access
+permissions work.
+
+To retrieve the `project.config` file, initialize a temporary Git
+repository to edit the configuration:
+====
+  mkdir cfg_dir
+  cd cfg_dir
+  git init
+====
+
+Download the existing configuration from Gerrit:
+====
+  git fetch ssh://localhost:29418/All-Projects refs/meta/config
+  git checkout FETCH_HEAD
+====
+
+Contributor agreements are defined as contributor-agreement sections in
+`project.config`:
+====
+  [contributor-agreement "Individual"]
+    description = If you are going to be contributing code on your own, this is the one you want. You can sign this one online.
+    requireContactInformation = true
+    agreementUrl = static/cla_individual.html
+    autoVerify = group CLA Accepted - Individual
+    accepted = group CLA Accepted - Individual
+====
+
+Each `contributor-agreement` section within the `project.config` file must
+have a unique name. The section name will appear in the web UI.
+
+If not already present, add the UUID of the groups used in the
+`autoVerify` and `accepted` variables in the groups file.
+
+Commit the configuration change, and push it back:
+====
+  git commit -a -m "Add Individual contributor agreement"
+  git push ssh://localhost:29418/All-Projects HEAD:refs/meta/config
+====
+
+[[contributor-agreement.name.description]]contributor-agreement.<name>.description::
++
+Short text describing the contributor agreement. This text will appear
+when the user selects an agreement.
+
+[[contributor-agreement.name.requireContactInformation]]contributor-agreement.<name>.requireContactInformation::
++
+True if the user must provide contact information when signing a
+contributor agreement. Default is false.
+
+[[contributor-agreement.name.agreementUrl]]contributor-agreement.<name>.agreementUrl::
++
+An absolute URL or a relative path to an HTML file containing the text
+of the contributor agreement. The URL must use the http or https
+scheme. The path is relative to the `gerrit.basePath` variable in
+`gerrit.config`.
+
+[[contributor-agreement.name.autoVerify]]contributor-agreement.<name>.autoVerify::
++
+If present, the user can sign the contributor agreement online. The
+value is the group to which the user will be added after signing the
+agreement. The group's UUID must also appear in the `groups` file.
+
+[[contributor-agreement.name.accepted]]contributor-agreement.<name>.accepted::
++
+List of groups that will be considered when verifying that a
+contributor agreement has been accepted. The groups' UUID must also
+appear in the `groups` file.
+
+GERRIT
+------
+Part of link:index.html[Gerrit Code Review]
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index b2df5f3..588a2fc 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -305,8 +305,9 @@
 enabled for the Gerrit site.  If enabled a user must complete a
 contributor agreement before they can upload changes.
 +
-If enabled, the admin must also insert one or more rows into
-`contributor_agreements` and create agreement files under
+If enabled, the admin must also add one or more
+link:config-cla.html[contributor-agreement sections]
+in project.config and create agreement files under
 `'$site_path'/static`, so users can actually complete one or
 more agreements.
 +
diff --git a/Documentation/index.txt b/Documentation/index.txt
index ca8be97..7abbd79 100644
--- a/Documentation/index.txt
+++ b/Documentation/index.txt
@@ -45,6 +45,7 @@
 * link:config-reverseproxy.html[Reverse Proxy]
 * link:config-hooks.html[Hooks]
 * link:config-mail.html[Mail Templates]
+* link:config-cla.html[Contributor Agreements]
 
 Developer Documentation
 -----------------------
diff --git a/Documentation/user-search.txt b/Documentation/user-search.txt
index 438b4e7..3bd437f 100644
--- a/Documentation/user-search.txt
+++ b/Documentation/user-search.txt
@@ -23,6 +23,7 @@
 |Open changes in Foo  | status:open project:Foo
 |=================================================
 
+
 Basic Change Search
 -------------------
 
@@ -109,7 +110,6 @@
 link:http://www.brics.dk/automaton/[dk.brics.automaton
 library] is used for evaluation of such patterns.
 
-
 [[branch]]
 branch:'BRANCH'::
 +
@@ -271,6 +271,17 @@
 Change has been abandoned.
 
 
+Argument Quoting
+----------------
+
+Operator values that are not bare words (roughly A-Z, a-z, 0-9, @,
+hypen, dot and underscore) must be quoted for the query parser.
+
+Quoting is accepted as either double quotes
+(e.g.  `message:"the value"`) or as matched
+curly braces (e.g. `message:{the value}`).
+
+
 Boolean Operators
 -----------------
 
@@ -427,6 +438,7 @@
 of a query.  Including either value in a web query may lead to
 unpredictable results.
 
+
 GERRIT
 ------
 Part of link:index.html[Gerrit Code Review]
diff --git a/gerrit-antlr/src/main/antlr3/com/google/gerrit/server/query/Query.g b/gerrit-antlr/src/main/antlr3/com/google/gerrit/server/query/Query.g
index 74b7851..423acb4 100644
--- a/gerrit-antlr/src/main/antlr3/com/google/gerrit/server/query/Query.g
+++ b/gerrit-antlr/src/main/antlr3/com/google/gerrit/server/query/Query.g
@@ -155,6 +155,10 @@
       String s = $text;
       setText(s.substring(1, s.length() - 1));
     }
+  | '{' ( ~('{'|'}') )* '}' {
+      String s = $text;
+      setText(s.substring(1, s.length() - 1));
+    }
   ;
 
 SINGLE_WORD
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java b/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
index 6be3a1c..67eb834 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
@@ -57,6 +57,10 @@
     return "/c/" + ps.getParentKey() + "/" + ps.get();
   }
 
+  public static String toProject(final Project.NameKey p) {
+    return ADMIN_PROJECTS + p.get();
+  }
+
   public static String toProjectAcceess(final Project.NameKey p) {
     return "/admin/projects/" + p.get() + ",access";
   }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
index 0229d38..6e1e0cf 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
@@ -650,6 +650,8 @@
               return QueryScreen.forQuery("status:open");
             case LINK_IDENTIY:
               return new MyIdentitiesScreen();
+            case REGISTER:
+              break;
           }
         }
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/ContactPanelShort.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/ContactPanelShort.java
index 4fbe7a0..9ac35f0 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/ContactPanelShort.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/ContactPanelShort.java
@@ -383,6 +383,7 @@
     me.setFullName(result.getFullName());
     me.setPreferredEmail(result.getPreferredEmail());
     Gerrit.refreshMenuBar();
+    display(me);
   }
 
   ContactInformation toContactInformation() {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/MyIdentitiesScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/MyIdentitiesScreen.java
index 899aa03..79a6bca 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/MyIdentitiesScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/MyIdentitiesScreen.java
@@ -72,6 +72,16 @@
         add(linkIdentity);
         break;
       }
+
+      case CLIENT_SSL_CERT_LDAP:
+      case CUSTOM_EXTENSION:
+      case DEVELOPMENT_BECOME_ANY_ACCOUNT:
+      case HTTP:
+      case HTTP_LDAP:
+      case LDAP:
+      case LDAP_BIND:
+      case OPENID_SSO:
+        break;
     }
   }
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java
index b250446..11cbcb2 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java
@@ -21,15 +21,13 @@
 import com.google.gerrit.client.projects.ProjectMap;
 import com.google.gerrit.client.rpc.ScreenLoadCallback;
 import com.google.gerrit.client.ui.InlineHyperlink;
+import com.google.gerrit.client.ui.ProjectSearchLink;
 import com.google.gerrit.client.ui.ProjectsTable;
 import com.google.gerrit.client.ui.Screen;
 import com.google.gerrit.common.PageLinks;
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.Widget;
 
 public class ProjectListScreen extends Screen {
   private ProjectsTable projects;
@@ -83,7 +81,7 @@
       @Override
       protected void populate(final int row, final ProjectInfo k) {
         FlowPanel fp = new FlowPanel();
-        fp.add(createSearchLink(k));
+        fp.add(new ProjectSearchLink(k.name_key()));
         fp.add(new InlineHyperlink(k.name(), link(k)));
         table.setWidget(row, 1, fp);
         table.setText(row, 2, k.description());
@@ -95,17 +93,6 @@
 
         setRowItem(row, k);
       }
-
-      private Widget createSearchLink(final ProjectInfo projectInfo) {
-        Image image = new Image(Gerrit.RESOURCES.queryProjectLink());
-        InlineHyperlink h = new InlineHyperlink(" ",
-            PageLinks.toProjectDashboard(projectInfo.name_key(), "default"));
-        h.setTitle(Util.C.projectListQueryLink());
-        DOM.insertBefore(h.getElement(), image.getElement(),
-            DOM.getFirstChild(h.getElement()));
-
-        return h;
-      }
     };
     projects.setSavePointerId(PageLinks.ADMIN_PROJECTS);
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/auth/openid/OpenIdSsoPanel.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/auth/openid/OpenIdSsoPanel.java
index 85dd794..11f628c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/auth/openid/OpenIdSsoPanel.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/auth/openid/OpenIdSsoPanel.java
@@ -63,6 +63,10 @@
         FormElement.as(redirectForm.getElement()).setTarget("_top");
         redirectForm.submit();
         break;
+      case ERROR:
+      case NO_PROVIDER:
+      case NOT_ALLOWED:
+        break;
     }
   }
 }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
index 5e2eda4..2faf857 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
@@ -21,7 +21,8 @@
 import com.google.gerrit.client.ui.AccountLink;
 import com.google.gerrit.client.ui.BranchLink;
 import com.google.gerrit.client.ui.CommentedActionDialog;
-import com.google.gerrit.client.ui.ProjectLink;
+import com.google.gerrit.client.ui.InlineHyperlink;
+import com.google.gerrit.client.ui.ProjectSearchLink;
 import com.google.gerrit.common.PageLinks;
 import com.google.gerrit.common.data.AccountInfoCache;
 import com.google.gerrit.common.data.ChangeDetail;
@@ -34,6 +35,7 @@
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
+import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.InlineLabel;
 import com.google.gwt.user.client.ui.TextBox;
@@ -101,7 +103,13 @@
     table.setWidget(R_CHANGE_ID, 1, changeIdLabel);
 
     table.setWidget(R_OWNER, 1, AccountLink.link(acc, chg.getOwner()));
-    table.setWidget(R_PROJECT, 1, new ProjectLink(chg.getProject(), chg.getStatus()));
+
+    final HorizontalPanel p = new HorizontalPanel();
+    p.add(new ProjectSearchLink(chg.getProject()));
+    p.add(new InlineHyperlink(chg.getProject().get(),
+        PageLinks.toProject(chg.getProject())));
+    table.setWidget(R_PROJECT, 1, p);
+
     table.setWidget(R_BRANCH, 1, new BranchLink(dst.getShortName(), chg
         .getProject(), chg.getStatus(), dst.get(), null));
     table.setWidget(R_TOPIC, 1, topic(chg));
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchTable.java
index 5a1459f..5791f68 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchTable.java
@@ -27,7 +27,6 @@
 import com.google.gerrit.reviewdb.client.Patch.Key;
 import com.google.gerrit.reviewdb.client.Patch.PatchType;
 import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.RepeatingCommand;
 import com.google.gwt.event.dom.client.ClickEvent;
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
index 09aee76..3f71e76 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
@@ -295,6 +295,8 @@
         case INSERT:
         case REPLACE:
           return true;
+        case CONTEXT:
+          break;
       }
     } else if (o instanceof CommentList) {
       return true;
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
index 9c242d6..36eae80 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
@@ -514,6 +514,8 @@
         break;
       case FILES:       topPanel.add(fileList);
         break;
+      case MAIN:
+        break;
     }
   }
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/SideBySideTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/SideBySideTable.java
index a09b559..4ce402e 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/SideBySideTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/SideBySideTable.java
@@ -593,6 +593,8 @@
           m.addStyleName("wdi");
         }
         break;
+      case REPLACE:
+        break;
     }
     m.append(lineHtml);
     m.closeTd();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/UnifiedDiffTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/UnifiedDiffTable.java
index 24bf41f..c143acc 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/UnifiedDiffTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/UnifiedDiffTable.java
@@ -70,6 +70,8 @@
         case INSERT:
           createCommentEditor(row + 1, PC, pl.getLineB(), (short) 1);
           break;
+        case REPLACE:
+          break;
       }
     }
   }
@@ -159,6 +161,8 @@
       case INSERT:
         createCommentEditor(row + 1, PC, pl.getLineB(), (short) 1);
         break;
+      case REPLACE:
+        break;
     }
   }
 
@@ -537,6 +541,8 @@
         m.append("+");
         m.append(text);
         break;
+      case REPLACE:
+        break;
     }
     m.closeTd();
   }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/ProjectSearchLink.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/ProjectSearchLink.java
new file mode 100644
index 0000000..bedf17b
--- /dev/null
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/ProjectSearchLink.java
@@ -0,0 +1,33 @@
+// Copyright (C) 2012 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.client.ui;
+
+import com.google.gerrit.client.Gerrit;
+import com.google.gerrit.client.admin.Util;
+import com.google.gerrit.common.PageLinks;
+import com.google.gerrit.reviewdb.client.Project;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.Image;
+
+public class ProjectSearchLink extends InlineHyperlink {
+
+  public ProjectSearchLink(Project.NameKey projectName) {
+    super(" ", PageLinks.toProjectDashboard(projectName, "default"));
+    setTitle(Util.C.projectListQueryLink());
+    final Image image = new Image(Gerrit.RESOURCES.queryProjectLink());
+    DOM.insertBefore(getElement(), image.getElement(),
+        DOM.getFirstChild(getElement()));
+  }
+}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritConfigProvider.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritConfigProvider.java
index 2e26256..9b81f0d 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritConfigProvider.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritConfigProvider.java
@@ -107,6 +107,12 @@
         config.setEditFullNameUrl(cfg.getString("auth", null, "editFullNameUrl"));
         config.setHttpPasswordUrl(cfg.getString("auth", null, "httpPasswordUrl"));
         break;
+
+      case CLIENT_SSL_CERT_LDAP:
+      case DEVELOPMENT_BECOME_ANY_ACCOUNT:
+      case HTTP:
+      case HTTP_LDAP:
+        break;
     }
     config.setUseContributorAgreements(cfg.getBoolean("auth",
         "contributoragreements", false));
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetPublishDetailFactory.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetPublishDetailFactory.java
index 8a4320f..b38f6cf 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetPublishDetailFactory.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetPublishDetailFactory.java
@@ -169,6 +169,10 @@
                   ok++;
                 }
                 break;
+
+              case IMPOSSIBLE:
+              case REJECT:
+                break;
             }
           }
 
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAuth.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAuth.java
index ea12008..1524707 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAuth.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAuth.java
@@ -54,6 +54,15 @@
         auth.string("SSO logout URL", "logoutUrl", null);
         break;
       }
+
+      case CLIENT_SSL_CERT_LDAP:
+      case CUSTOM_EXTENSION:
+      case DEVELOPMENT_BECOME_ANY_ACCOUNT:
+      case LDAP:
+      case LDAP_BIND:
+      case OPENID:
+      case OPENID_SSO:
+        break;
     }
 
     switch (auth_type) {
@@ -80,6 +89,14 @@
         ldap.string("Group BaseDN", "groupBase", aBase);
         break;
       }
+
+      case CLIENT_SSL_CERT_LDAP:
+      case CUSTOM_EXTENSION:
+      case DEVELOPMENT_BECOME_ANY_ACCOUNT:
+      case HTTP:
+      case OPENID:
+      case OPENID_SSO:
+        break;
     }
 
     if (auth.getSecure("registerEmailPrivateKey") == null) {
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
index b23aa86..80ea82f 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
@@ -169,7 +169,7 @@
 
   /** Set the full name of the user ("Given-name Surname" style). */
   public void setFullName(final String name) {
-    fullName = name;
+    fullName = name != null ? name.trim() : null;
   }
 
   /** Email address the user prefers to be contacted through. */
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountProjectWatch.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountProjectWatch.java
index e592101..946270a 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountProjectWatch.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountProjectWatch.java
@@ -142,6 +142,9 @@
 
       case SUBMITTED_CHANGES:
         return notifySubmittedChanges;
+
+      case ALL:
+        break;
     }
     return false;
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
index 3ec1e3c..4658edf 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
@@ -247,7 +247,8 @@
           changeToRevert.getDest());
       change.setTopic(changeToRevert.getTopic());
 
-      PatchSet.Id id = nextPatchSetId(git, change.currentPatchSetId());
+      PatchSet.Id id =
+          new PatchSet.Id(change.getId(), Change.INITIAL_PATCH_SET_ID);
       final PatchSet ps = new PatchSet(id);
       ps.setCreatedOn(change.getCreatedOn());
       ps.setUploader(change.getOwner());
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/CapabilityControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/CapabilityControl.java
index 1524185..d9c42d5 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/CapabilityControl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/CapabilityControl.java
@@ -159,6 +159,11 @@
           case BATCH:
             batch = true;
             break;
+
+          case ALLOW:
+          case BLOCK:
+          case DENY:
+            break;
         }
       }
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupDetailFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupDetailFactory.java
index 2e500bd..0aef40c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupDetailFactory.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupDetailFactory.java
@@ -80,6 +80,8 @@
         detail.setMembers(loadMembers());
         detail.setIncludes(loadIncludes());
         break;
+      case SYSTEM:
+        break;
     }
     detail.setAccounts(aic.create());
     detail.setCanModify(control.isOwner());
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index ac575a0..07bbfd8 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -581,6 +581,9 @@
               autoCloseChanges(c);
             }
             break;
+
+          case DELETE:
+            break;
         }
 
         if (isConfig(c)) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/OutgoingEmail.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/OutgoingEmail.java
index caa441d..187b8a7 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/OutgoingEmail.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/OutgoingEmail.java
@@ -332,6 +332,8 @@
             case CC:
               ((EmailHeader.AddressList) headers.get(HDR_CC)).add(addr);
               break;
+            case BCC:
+              break;
           }
         }
       } else {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/util/RequestScopePropagator.java b/gerrit-server/src/main/java/com/google/gerrit/server/util/RequestScopePropagator.java
index b4a44d2..f63da5439 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/util/RequestScopePropagator.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/util/RequestScopePropagator.java
@@ -14,6 +14,8 @@
 
 package com.google.gerrit.server.util;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.common.base.Throwables;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.server.ReviewDb;
@@ -58,11 +60,15 @@
   }
 
   /**
-   * Wraps callable in a new {@link Callable} that propagates the current
-   * request state when the callable is invoked. The method must be called in a
-   * request scope and the returned Callable may only be invoked in a thread
-   * that is not already in a request scope. The returned Callable will inherit
-   * toString() from the passed in Callable. A
+   * Ensures that the current request state is available when the passed in
+   * Callable is invoked.
+   *
+   * If needed wraps the passed in Callable in a new {@link Callable} that
+   * propagates the current request state when the returned Callable is invoked.
+   * The method must be called in a request scope and the returned Callable may
+   * only be invoked in a thread that is not already in a request scope or is in
+   * the same request scope. The returned Callable will inherit toString() from
+   * the passed in Callable. A
    * {@link com.google.gerrit.server.git.WorkQueue.Executor} does not accept a
    * Callable, so there is no ProjectCallable implementation. Implementations of
    * this method must be consistent with Guice's
@@ -80,12 +86,17 @@
    * @return a new Callable which will execute in the current request scope.
    */
   public final <T> Callable<T> wrap(final Callable<T> callable) {
+    final RequestContext callerContext = checkNotNull(local.getContext());
     final Callable<T> wrapped =
-        wrapImpl(context(local.getContext(), cleanup(callable)));
+        wrapImpl(context(callerContext, cleanup(callable)));
     return new Callable<T>() {
       @Override
       public T call() throws Exception {
-        return wrapped.call();
+        if (callerContext == local.getContext()) {
+          return callable.call();
+        } else {
+          return wrapped.call();
+        }
       }
 
       @Override
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
index bdcb4fb..f2baddd 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
@@ -250,6 +250,10 @@
         case RUNNING: tasksRunning++; break;
         case READY: tasksReady++; break;
         case SLEEPING: tasksSleeping++; break;
+        case CANCELLED:
+        case DONE:
+        case OTHER:
+          break;
       }
     }
     stdout.format(