Merge branch 'stable-2.6' into stable-2.7

* stable-2.6:
  Performance Fix: Minimize number of advertisedHaves

Change-Id: Id19a9ef22aa7445bf8188b79d34aeb870eadb988
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 3e28b07..10e1374 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
@@ -37,6 +37,7 @@
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.collect.SetMultimap;
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.CheckedFuture;
@@ -119,6 +120,7 @@
 import org.eclipse.jgit.transport.AdvertiseRefsHookChain;
 import org.eclipse.jgit.transport.BaseReceivePack;
 import org.eclipse.jgit.transport.ReceiveCommand;
+import org.eclipse.jgit.transport.RefFilter;
 import org.eclipse.jgit.transport.ReceiveCommand.Result;
 import org.eclipse.jgit.transport.ReceivePack;
 import org.eclipse.jgit.transport.UploadPack;
@@ -376,6 +378,20 @@
     rp.setAllowDeletes(true);
     rp.setAllowNonFastForwards(true);
     rp.setCheckReceivedObjects(true);
+    rp.setRefFilter(new RefFilter() {
+      @Override
+      public Map<String, Ref> filter(Map<String, Ref> refs) {
+        Map<String, Ref> filteredRefs = Maps.newHashMapWithExpectedSize(refs.size());
+        for (Map.Entry<String, Ref> e : refs.entrySet()) {
+          String name = e.getKey();
+          if (!name.startsWith("refs/changes/")
+              && !name.startsWith(GitRepositoryManager.REFS_CACHE_AUTOMERGE)) {
+            filteredRefs.put(name, e.getValue());
+          }
+        }
+        return filteredRefs;
+      }
+    });
 
     if (!projectControl.allRefsAreVisible()) {
       rp.setCheckReferencedObjectsAreReachable(config.checkReferencedObjectsAreReachable);