From e1908933fa9968b11e9ea03d88730aee3140534b Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 15 Oct 2013 09:43:09 -0400 Subject: [PATCH] Fix error on generating activity page when there is no activity --- src/main/java/com/gitblit/git/GitblitUploadPackFactory.java | 40 ++++++++++++++++++++++++---------------- 1 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gitblit/git/GitblitUploadPackFactory.java b/src/main/java/com/gitblit/git/GitblitUploadPackFactory.java index 85750f8..01dfc08 100644 --- a/src/main/java/com/gitblit/git/GitblitUploadPackFactory.java +++ b/src/main/java/com/gitblit/git/GitblitUploadPackFactory.java @@ -15,30 +15,30 @@ */ package com.gitblit.git; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.transport.DaemonClient; import org.eclipse.jgit.transport.RefFilter; import org.eclipse.jgit.transport.UploadPack; import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException; import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException; import org.eclipse.jgit.transport.resolver.UploadPackFactory; +import com.gitblit.Constants; import com.gitblit.GitBlit; import com.gitblit.models.UserModel; -import com.gitblit.utils.IssueUtils; -import com.gitblit.utils.PushLogUtils; /** * The upload pack factory creates an upload pack which controls what refs are * advertised to cloning/pulling clients. - * + * * @author James Moger - * + * * @param <X> the connection type */ public class GitblitUploadPackFactory<X> implements UploadPackFactory<X> { @@ -51,14 +51,14 @@ int timeout = 0; if (req instanceof HttpServletRequest) { - // http/https request may or may not be authenticated + // http/https request may or may not be authenticated user = GitBlit.self().authenticate((HttpServletRequest) req); if (user == null) { user = UserModel.ANONYMOUS; } - } else if (req instanceof DaemonClient) { + } else if (req instanceof GitDaemonClient) { // git daemon request is always anonymous - DaemonClient client = (DaemonClient) req; + GitDaemonClient client = (GitDaemonClient) req; // set timeout from Git daemon timeout = client.getDaemon().getTimeout(); } @@ -67,7 +67,7 @@ UploadPack up = new UploadPack(db); up.setRefFilter(refFilter); up.setTimeout(timeout); - + return up; } @@ -76,13 +76,13 @@ * requesting user. */ public static class UserRefFilter implements RefFilter { - + final UserModel user; - + public UserRefFilter(UserModel user) { this.user = user; } - + @Override public Map<String, Ref> filter(Map<String, Ref> refs) { if (user.canAdmin()) { @@ -90,10 +90,18 @@ return refs; } - // normal users can not clone gitblit refs - refs.remove(IssueUtils.GB_ISSUES); - refs.remove(PushLogUtils.GB_PUSHES); + // normal users can not clone any gitblit refs + // JGit's RefMap is custom and does not support iterator removal :( + List<String> toRemove = new ArrayList<String>(); + for (String ref : refs.keySet()) { + if (ref.startsWith(Constants.R_GITBLIT)) { + toRemove.add(ref); + } + } + for (String ref : toRemove) { + refs.remove(ref); + } return refs; } } -} +} \ No newline at end of file -- Gitblit v1.9.1