From e462bbf2974d33f1a5a0b2a808e150aa0e22d6f4 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gmail.com> Date: Wed, 05 Mar 2014 21:50:16 -0500 Subject: [PATCH] Fire an event on received ticket branch updates to trigger reindex --- src/main/java/com/gitblit/git/GitblitReceivePack.java | 48 +++++++++++++++++++++++++++++++++--------------- 1 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/gitblit/git/GitblitReceivePack.java b/src/main/java/com/gitblit/git/GitblitReceivePack.java index e5c0ea4..605632c 100644 --- a/src/main/java/com/gitblit/git/GitblitReceivePack.java +++ b/src/main/java/com/gitblit/git/GitblitReceivePack.java @@ -50,6 +50,8 @@ import com.gitblit.manager.IGitblit; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; +import com.gitblit.tickets.BranchTicketService; +import com.gitblit.tickets.BranchTicketService.TicketsBranchUpdated; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.ClientLogger; import com.gitblit.utils.CommitCache; @@ -85,13 +87,11 @@ protected String gitblitUrl; - protected String repositoryUrl; - protected GroovyScriptEngine gse; - private final IStoredSettings settings; + protected final IStoredSettings settings; - private final IGitblit gitblit; + protected final IGitblit gitblit; public GitblitReceivePack( IGitblit gitblit, @@ -226,18 +226,28 @@ } } - // reset branch commit cache on REWIND and DELETE for (ReceiveCommand cmd : commands) { String ref = cmd.getRefName(); if (ref.startsWith(Constants.R_HEADS)) { switch (cmd.getType()) { case UPDATE_NONFASTFORWARD: case DELETE: + // reset branch commit cache on REWIND and DELETE CommitCache.instance().clear(repository.name, ref); break; default: break; } + } else if (ref.equals(BranchTicketService.BRANCH)) { + // ensure pushing user is an administrator OR an owner + // i.e. prevent ticket tampering + boolean permitted = user.canAdmin() || repository.isOwner(user.username); + if (!permitted) { + sendRejection(cmd, "{0} is not permitted to push to {1}", user.username, ref); + } + } else if (ref.startsWith(Constants.R_FOR)) { + // prevent accidental push to refs/for + sendRejection(cmd, "{0} is not configured to receive patchsets", repository.name); } } @@ -334,6 +344,14 @@ } catch (Exception e) { LOGGER.error(MessageFormat.format("Failed to update {0} pushlog", repository.name), e); } + + // check for updates pushed to the BranchTicketService branch + for (ReceiveCommand cmd : commands) { + if (Result.OK.equals(cmd.getResult()) + && BranchTicketService.BRANCH.equals(cmd.getRefName())) { + rp.getRepository().fireEvent(new TicketsBranchUpdated(repository)); + } + } // run Groovy hook scripts Set<String> scripts = new LinkedHashSet<String>(); @@ -390,10 +408,6 @@ this.gitblitUrl = url; } - protected void setRepositoryUrl(String url) { - this.repositoryUrl = url; - } - protected void sendRejection(final ReceiveCommand cmd, final String why, Object... objects) { String text; if (ArrayUtils.isEmpty(objects)) { @@ -406,14 +420,14 @@ } protected void sendHeader(String msg, Object... objects) { - sendMessage("--->", msg, objects); + sendInfo("--> ", msg, objects); } - protected void sendMessage(String msg, Object... objects) { - sendMessage(" ", msg, objects); + protected void sendInfo(String msg, Object... objects) { + sendInfo(" ", msg, objects); } - protected void sendMessage(String prefix, String msg, Object... objects) { + protected void sendInfo(String prefix, String msg, Object... objects) { String text; if (ArrayUtils.isEmpty(objects)) { text = msg; @@ -422,7 +436,9 @@ text = MessageFormat.format(msg, objects); super.sendMessage(prefix + text); } - LOGGER.info(text + " (" + user.username + ")"); + if (!StringUtils.isEmpty(msg)) { + LOGGER.info(text + " (" + user.username + ")"); + } } protected void sendError(String msg, Object... objects) { @@ -434,7 +450,9 @@ text = MessageFormat.format(msg, objects); super.sendError(text); } - LOGGER.error(text + " (" + user.username + ")"); + if (!StringUtils.isEmpty(msg)) { + LOGGER.error(text + " (" + user.username + ")"); + } } /** -- Gitblit v1.9.1