summaryrefslogtreecommitdiffstats
path: root/gerrit-server
diff options
context:
space:
mode:
authorShawn Pearce <sop@google.com>2013-11-26 20:30:05 -0800
committerShawn Pearce <sop@google.com>2013-11-26 20:30:36 -0800
commit951371917f7af219c8ba22eba04a0ad4b6adbd33 (patch)
tree1383bcda3f68acb21aa092664f5c982ae8a2a73e /gerrit-server
parent10532abdff4f771fd2847da9509512a474217e67 (diff)
parenta4a53664446b5f6a466b386773d89ff992093617 (diff)
Merge branch 'stable-2.6' into stable-2.7
* stable-2.6: Performance Fix: Minimize number of advertisedHaves Change-Id: Id19a9ef22aa7445bf8188b79d34aeb870eadb988
Diffstat (limited to 'gerrit-server')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java16
1 files changed, 16 insertions, 0 deletions
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 3e28b07d87..10e13741f4 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.Iterables;
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.AdvertiseRefsHook;
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 @@ public class ReceiveCommits {
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);