Update to latest JGit to get AdvertiseRefsHook
Convert VisibleRefFilter and ReceiveCommitsRefFilter to be
AdvertiseRefsHooks. For now, the basic functionality remains the same.
Change-Id: I415c54c8a5ee657f41e5ff2ca4a8f9c7b7a16c1b
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java
index 0f962ac..7de1f84 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java
@@ -215,7 +215,7 @@
}
if (!pc.allRefsAreVisible()) {
- up.setRefFilter(new VisibleRefFilter(tagCache, repo, pc, db.get(), true));
+ up.setAdvertiseRefsHook(new VisibleRefFilter(tagCache, repo, pc, db.get(), true));
}
next.doFilter(request, response);
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 4d9a705..2976d3f 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
@@ -207,9 +207,9 @@
if (!projectControl.allRefsAreVisible()) {
rp.setCheckReferencedObjectsAreReachable(true);
- rp.setRefFilter(new VisibleRefFilter(tagCache, repo, projectControl, db, false));
+ rp.setAdvertiseRefsHook(new VisibleRefFilter(tagCache, repo, projectControl, db, false));
}
- rp.setRefFilter(new ReceiveCommitsRefFilter(rp.getRefFilter()));
+ rp.setAdvertiseRefsHook(new ReceiveCommitsAdvertiseRefsHook(rp.getAdvertiseRefsHook()));
rp.setPreReceiveHook(this);
rp.setPostReceiveHook(this);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsAdvertiseRefsHook.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsAdvertiseRefsHook.java
new file mode 100644
index 0000000..076e0f9
--- /dev/null
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsAdvertiseRefsHook.java
@@ -0,0 +1,54 @@
+// Copyright (C) 2010 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.server.git;
+
+import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.transport.AdvertiseRefsHook;
+import org.eclipse.jgit.transport.ReceivePack;
+import org.eclipse.jgit.transport.ServiceMayNotContinueException;
+import org.eclipse.jgit.transport.UploadPack;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/** Exposes only the non refs/changes/ reference names. */
+class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook {
+ private final AdvertiseRefsHook base;
+
+ public ReceiveCommitsAdvertiseRefsHook(AdvertiseRefsHook base) {
+ this.base = base != null ? base : AdvertiseRefsHook.DEFAULT;
+ }
+
+ @Override
+ public void advertiseRefs(UploadPack us) {
+ throw new UnsupportedOperationException(
+ "ReceiveCommitsAdvertiseRefsHook cannot be used for UploadPack");
+ }
+
+ @Override
+ public void advertiseRefs(ReceivePack rp) {
+ Map<String, Ref> oldRefs = rp.getAdvertisedRefs();
+ if (oldRefs == null) {
+ oldRefs = rp.getRepository().getAllRefs();
+ }
+ HashMap<String, Ref> r = new HashMap<String, Ref>();
+ for (Map.Entry<String, Ref> e : oldRefs.entrySet()) {
+ if (!e.getKey().startsWith("refs/changes/")) {
+ r.put(e.getKey(), e.getValue());
+ }
+ }
+ rp.setAdvertisedRefs(r, rp.getAdvertisedObjects());
+ }
+}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsRefFilter.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsRefFilter.java
deleted file mode 100644
index 730305c..0000000
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommitsRefFilter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2010 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.server.git;
-
-import org.eclipse.jgit.lib.Ref;
-import org.eclipse.jgit.transport.RefFilter;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/** Exposes only the non refs/changes/ reference names. */
-class ReceiveCommitsRefFilter implements RefFilter {
- private final RefFilter base;
-
- public ReceiveCommitsRefFilter(RefFilter base) {
- this.base = base != null ? base : RefFilter.DEFAULT;
- }
-
- @Override
- public Map<String, Ref> filter(Map<String, Ref> refs) {
- HashMap<String, Ref> r = new HashMap<String, Ref>();
- for (Map.Entry<String, Ref> e : refs.entrySet()) {
- if (!e.getKey().startsWith("refs/changes/")) {
- r.put(e.getKey(), e.getValue());
- }
- }
- return base.filter(r);
- }
-}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/VisibleRefFilter.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/VisibleRefFilter.java
index deb9a92..fc47f10 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/VisibleRefFilter.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/VisibleRefFilter.java
@@ -24,7 +24,8 @@
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.transport.RefFilter;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.transport.AbstractAdvertiseRefsHook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,7 +37,7 @@
import java.util.Map;
import java.util.Set;
-public class VisibleRefFilter implements RefFilter {
+public class VisibleRefFilter extends AbstractAdvertiseRefsHook {
private static final Logger log =
LoggerFactory.getLogger(VisibleRefFilter.class);
@@ -58,11 +59,6 @@
this.showChanges = showChanges;
}
- @Override
- public Map<String, Ref> filter(Map<String, Ref> refs) {
- return filter(refs, false);
- }
-
public Map<String, Ref> filter(Map<String, Ref> refs, boolean filterTagsSeperately) {
final Set<Change.Id> visibleChanges = visibleChanges();
final Map<String, Ref> result = new HashMap<String, Ref>();
@@ -108,6 +104,16 @@
return result;
}
+ @Override
+ protected Map<String, Ref> getAdvertisedRefs(
+ Repository repository, RevWalk revWalk) {
+ return filter(repository.getAllRefs());
+ }
+
+ private Map<String, Ref> filter(Map<String, Ref> refs) {
+ return filter(refs, false);
+ }
+
private Set<Change.Id> visibleChanges() {
if (!showChanges) {
return Collections.emptySet();
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Receive.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Receive.java
index b79d212..0322f0b 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Receive.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Receive.java
@@ -25,8 +25,8 @@
import org.eclipse.jgit.errors.UnpackException;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.transport.AdvertiseRefsHook;
import org.eclipse.jgit.transport.ReceivePack;
-import org.eclipse.jgit.transport.RefFilter;
import org.kohsuke.args4j.Option;
import java.io.IOException;
@@ -97,17 +97,17 @@
msg.append("Unpack error on project \""
+ projectControl.getProject().getName() + "\":\n");
- msg.append(" RefFilter: " + rp.getRefFilter());
- if (rp.getRefFilter() == RefFilter.DEFAULT) {
+ msg.append(" AdvertiseRefsHook: " + rp.getAdvertiseRefsHook());
+ if (rp.getAdvertiseRefsHook() == AdvertiseRefsHook.DEFAULT) {
msg.append("DEFAULT");
- } else if (rp.getRefFilter() instanceof VisibleRefFilter) {
+ } else if (rp.getAdvertiseRefsHook() instanceof VisibleRefFilter) {
msg.append("VisibleRefFilter");
} else {
- msg.append(rp.getRefFilter().getClass());
+ msg.append(rp.getAdvertiseRefsHook().getClass());
}
msg.append("\n");
- if (rp.getRefFilter() instanceof VisibleRefFilter) {
+ if (rp.getAdvertiseRefsHook() instanceof VisibleRefFilter) {
Map<String, Ref> adv = rp.getAdvertisedRefs();
msg.append(" Visible references (" + adv.size() + "):\n");
for (Ref ref : adv.values()) {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java
index d24b382..46eb788 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java
@@ -45,8 +45,8 @@
final UploadPack up = new UploadPack(repo);
if (!projectControl.allRefsAreVisible()) {
- up.setRefFilter(new VisibleRefFilter(tagCache, repo, projectControl,
- db.get(), true));
+ up.setAdvertiseRefsHook(new VisibleRefFilter(tagCache, repo,
+ projectControl, db.get(), true));
}
up.setPackConfig(config.getPackConfig());
up.setTimeout(config.getTimeout());
diff --git a/pom.xml b/pom.xml
index a898b9b..14db525 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,7 +46,7 @@
</issueManagement>
<properties>
- <jgitVersion>1.3.0.201202151440-r</jgitVersion>
+ <jgitVersion>1.3.0.201202151440-r.54-gd725ecb</jgitVersion>
<gwtormVersion>1.4</gwtormVersion>
<gwtjsonrpcVersion>1.2.5</gwtjsonrpcVersion>
<gwtexpuiVersion>1.2.5</gwtexpuiVersion>