Merge branch 'stable-2.11'

* stable-2.11:
  Update 2.11 release notes
  Fix minor bugs in ChangeHookRunner
  RebaseDialog: Organize imports
  Force javac to use -encoding UTF-8
  Fix NullPointerException when executing query with --comments option
  Remove '--recheck-mergeable' option in 2.11 release notes
  ReceiveCommits: Fix NPE when pushing to refs/changes/n
  ChangeControl: Optimize creation by not re-reading changes

Change-Id: Iab97e14b80b1867f785034544ecb33bb39aab2ef
diff --git a/ReleaseNotes/ReleaseNotes-2.11.txt b/ReleaseNotes/ReleaseNotes-2.11.txt
index ddac38c..6071d8a 100644
--- a/ReleaseNotes/ReleaseNotes-2.11.txt
+++ b/ReleaseNotes/ReleaseNotes-2.11.txt
@@ -14,7 +14,7 @@
 *WARNING:* This release contains schema changes.  To upgrade:
 ----
   java -jar gerrit.war init -d site_path
-  java -jar gerrit.war reindex --recheck-mergeable -d site_path
+  java -jar gerrit.war reindex -d site_path
 ----
 
 *WARNING:* Upgrading to 2.11.x requires the server be first upgraded to 2.8 (or
@@ -556,6 +556,19 @@
 the documentation], if more than one `footer` token was specified in the
 `trackingid` section, only the first was used.
 
+* Treat empty
+link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#hooks[
+`hooks.*`] values as missing, rather than trying to execute the hooks
+directory.
+
+* Fix `changed-merged` hook configuration.
++
+Contrary to the
+link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#hooks[
+documentation], the changed-merged hook configuration value was being
+read from `hooks.changeMerged`. Fix to use `hooks.changeMergedHook` as
+documented.
+
 Web UI
 ~~~~~~
 
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/AbstractPushForReview.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/AbstractPushForReview.java
index 1d21cad..e65d51e 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/AbstractPushForReview.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/AbstractPushForReview.java
@@ -202,6 +202,18 @@
   }
 
   @Test
+  public void testPushNewPatchsetToRefsChanges() throws GitAPIException,
+    IOException, OrmException {
+    PushOneCommit.Result r = pushTo("refs/for/master");
+    r.assertOkStatus();
+    PushOneCommit push =
+        pushFactory.create(db, admin.getIdent(), PushOneCommit.SUBJECT,
+            "b.txt", "anotherContent", r.getChangeId());
+    r = push.to(git, "refs/changes/" + r.getChange().change().getId().get());
+    r.assertOkStatus();
+  }
+
+  @Test
   public void testPushForMasterWithApprovals_MissingLabel() throws GitAPIException,
       IOException {
       PushOneCommit.Result r = pushTo("refs/for/master/%l=Verify");
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/RebaseDialog.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/RebaseDialog.java
index 58f806a..2b755b2 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/RebaseDialog.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/RebaseDialog.java
@@ -21,8 +21,8 @@
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.rpc.Natives;
 import com.google.gerrit.reviewdb.client.Change;
-import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.ui.CheckBox;
 import com.google.gwt.user.client.ui.SuggestBox;
 import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java b/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
index 086a6d0..8bd082d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
@@ -14,6 +14,7 @@
 
 package com.google.gerrit.common;
 
+import com.google.common.base.Strings;
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.google.gerrit.common.data.ContributorAgreement;
@@ -263,7 +264,7 @@
         draftPublishedHook = sitePath.resolve(new File(hooksPath, getValue(config, "hooks", "draftPublishedHook", "draft-published")).getPath());
         commentAddedHook = sitePath.resolve(new File(hooksPath, getValue(config, "hooks", "commentAddedHook", "comment-added")).getPath());
         changeMergedHook = sitePath.resolve(new File(hooksPath, getValue(config, "hooks", "changeMergedHook", "change-merged")).getPath());
-        mergeFailedHook = sitePath.resolve(new File(hooksPath, getValue(config, "hooks", "mergeFailed", "merge-failed")).getPath());
+        mergeFailedHook = sitePath.resolve(new File(hooksPath, getValue(config, "hooks", "mergeFailedHook", "merge-failed")).getPath());
         changeAbandonedHook = sitePath.resolve(new File(hooksPath, getValue(config, "hooks", "changeAbandonedHook", "change-abandoned")).getPath());
         changeRestoredHook = sitePath.resolve(new File(hooksPath, getValue(config, "hooks", "changeRestoredHook", "change-restored")).getPath());
         refUpdatedHook = sitePath.resolve(new File(hooksPath, getValue(config, "hooks", "refUpdatedHook", "ref-updated")).getPath());
@@ -300,7 +301,7 @@
      */
     private String getValue(final Config config, final String section, final String setting, final String fallback) {
         final String result = config.getString(section, null, setting);
-        return (result == null) ? fallback : result;
+        return Strings.isNullOrEmpty(result) ? fallback : result;
     }
 
     /**
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 cf63e78..be584d6 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
@@ -2038,7 +2038,7 @@
         @Override
         public PatchSet.Id call() throws OrmException, IOException, NoSuchChangeException {
           try {
-            if (magicBranch.edit) {
+            if (magicBranch != null && magicBranch.edit) {
               return upsertEdit();
             } else if (caller == Thread.currentThread()) {
               return insertPatchSet(db);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
index 62e1ba9..f8279a0 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -596,7 +596,7 @@
   public List<ChangeMessage> messages()
       throws OrmException {
     if (messages == null) {
-      messages = cmUtil.byChange(db, notes);
+      messages = cmUtil.byChange(db, notes());
     }
     return messages;
   }
diff --git a/tools/default.defs b/tools/default.defs
index 01e9476..30518c4 100644
--- a/tools/default.defs
+++ b/tools/default.defs
@@ -20,18 +20,38 @@
 include_defs('//tools/java_sources.defs')
 import copy
 
-# Add AutoValue support to java_library.
+# Set defaults on java rules:
+#  - Add AutoValue annotation processing support.
+#  - Treat source files as UTF-8.
+
 _buck_java_library = java_library
 def java_library(*args, **kwargs):
-  _set_auto_value(kwargs)
+  _munge_args(kwargs)
   _buck_java_library(*args, **kwargs)
 
-# Add AutoValue support to java_test.
 _buck_java_test = java_test
 def java_test(*args, **kwargs):
-  _set_auto_value(kwargs)
+  _munge_args(kwargs)
   _buck_java_test(*args, **kwargs)
 
+
+# Munge kwargs to set Gerrit-specific defaults.
+def _munge_args(kwargs):
+  _set_auto_value(kwargs)
+  _set_extra_arguments(kwargs)
+
+def _set_extra_arguments(kwargs):
+  ext = 'extra_arguments'
+  if ext not in kwargs:
+    kwargs[ext] = []
+  extra_args = kwargs[ext]
+
+  for arg in extra_args:
+    if arg.startswith('-encoding'):
+      return
+
+  extra_args.extend(['-encoding', 'UTF-8'])
+
 def _set_auto_value(kwargs):
   apk = 'annotation_processors'
   if apk not in kwargs:
@@ -47,6 +67,7 @@
     aps.extend(AUTO_VALUE_PROCESSORS)
     apds.extend(AUTO_VALUE_PROCESSOR_DEPS)
 
+
 def genantlr(
     name,
     srcs,