From 72a7824f2f1d78e9eefde02843e95c9c5b2c4938 Mon Sep 17 00:00:00 2001
From: Vitaly Litvak <vitaliy@fundcount.com>
Date: Tue, 28 Jan 2014 09:18:04 -0500
Subject: [PATCH] Added fisheye hook script
---
src/main/java/com/gitblit/git/GitblitReceivePack.java | 73 ++++++++++++++++--------------------
1 files changed, 32 insertions(+), 41 deletions(-)
diff --git a/src/main/java/com/gitblit/git/GitblitReceivePack.java b/src/main/java/com/gitblit/git/GitblitReceivePack.java
index 8da603a..1678a70 100644
--- a/src/main/java/com/gitblit/git/GitblitReceivePack.java
+++ b/src/main/java/com/gitblit/git/GitblitReceivePack.java
@@ -44,12 +44,10 @@
import com.gitblit.Constants;
import com.gitblit.Constants.AccessRestrictionType;
-import com.gitblit.GitBlit;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.client.Translation;
-import com.gitblit.manager.IRepositoryManager;
-import com.gitblit.manager.IRuntimeManager;
+import com.gitblit.manager.IGitblit;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.ArrayUtils;
@@ -87,21 +85,27 @@
protected String gitblitUrl;
- protected String repositoryUrl;
-
protected GroovyScriptEngine gse;
- public GitblitReceivePack(Repository db, RepositoryModel repository, UserModel user) {
+ protected final IStoredSettings settings;
+
+ protected final IGitblit gitblit;
+
+ public GitblitReceivePack(
+ IGitblit gitblit,
+ Repository db,
+ RepositoryModel repository,
+ UserModel user) {
+
super(db);
-
- IRepositoryManager repositoryManager = GitBlit.getManager(IRepositoryManager.class);
-
+ this.settings = gitblit.getSettings();
+ this.gitblit = gitblit;
this.repository = repository;
- this.user = user == null ? UserModel.ANONYMOUS : user;
- this.groovyDir = repositoryManager.getHooksFolder();
+ this.user = user;
+ this.groovyDir = gitblit.getHooksFolder();
try {
// set Grape root
- File grapeRoot = repositoryManager.getGrapesFolder();
+ File grapeRoot = gitblit.getGrapesFolder();
grapeRoot.mkdirs();
System.setProperty("grape.root", grapeRoot.getAbsolutePath());
this.gse = new GroovyScriptEngine(groovyDir.getAbsolutePath());
@@ -161,8 +165,11 @@
if (repository.accessRestriction.atLeast(AccessRestrictionType.PUSH) && repository.verifyCommitter) {
// enforce committer verification
if (StringUtils.isEmpty(user.emailAddress)) {
- // emit warning if user does not have an email address
- LOGGER.warn(MessageFormat.format("Consider setting an email address for {0} ({1}) to improve committer verification.", user.getDisplayName(), user.username));
+ // reject the push because the pushing account does not have an email address
+ for (ReceiveCommand cmd : commands) {
+ sendRejection(cmd, "Sorry, the account \"{0}\" does not have an email address set for committer verification!", user.username);
+ }
+ return;
}
// Optionally enforce that the committer of first parent chain
@@ -195,16 +202,9 @@
PersonIdent committer = commit.getCommitterIdent();
if (!user.is(committer.getName(), committer.getEmailAddress())) {
- String reason;
- if (StringUtils.isEmpty(user.emailAddress)) {
- // account does not have an email address
- reason = MessageFormat.format("{0} by {1} <{2}> was not committed by {3} ({4})",
- commit.getId().name(), committer.getName(), StringUtils.isEmpty(committer.getEmailAddress()) ? "?":committer.getEmailAddress(), user.getDisplayName(), user.username);
- } else {
- // account has an email address
- reason = MessageFormat.format("{0} by {1} <{2}> was not committed by {3} ({4}) <{5}>",
- commit.getId().name(), committer.getName(), StringUtils.isEmpty(committer.getEmailAddress()) ? "?":committer.getEmailAddress(), user.getDisplayName(), user.username, user.emailAddress);
- }
+ // verification failed
+ String reason = MessageFormat.format("{0} by {1} <{2}> was not committed by {3} ({4}) <{5}>",
+ commit.getId().name(), committer.getName(), StringUtils.isEmpty(committer.getEmailAddress()) ? "?":committer.getEmailAddress(), user.getDisplayName(), user.username, user.emailAddress);
LOGGER.warn(reason);
cmd.setResult(Result.REJECTED_OTHER_REASON, reason);
allRejected &= true;
@@ -224,13 +224,13 @@
}
}
- // 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:
@@ -239,9 +239,8 @@
}
}
- IRepositoryManager repositoryManager = GitBlit.getManager(IRepositoryManager.class);
Set<String> scripts = new LinkedHashSet<String>();
- scripts.addAll(repositoryManager.getPreReceiveScriptsInherited(repository));
+ scripts.addAll(gitblit.getPreReceiveScriptsInherited(repository));
if (!ArrayUtils.isEmpty(repository.preReceiveScripts)) {
scripts.addAll(repository.preReceiveScripts);
}
@@ -265,8 +264,6 @@
LOGGER.debug("skipping post-receive hooks, no refs created, updated, or removed");
return;
}
-
- IStoredSettings settings = GitBlit.getManager(IRuntimeManager.class).getSettings();
// log ref changes
for (ReceiveCommand cmd : commands) {
@@ -336,11 +333,9 @@
LOGGER.error(MessageFormat.format("Failed to update {0} pushlog", repository.name), e);
}
- IRepositoryManager repositoryManager = GitBlit.getManager(IRepositoryManager.class);
-
// run Groovy hook scripts
Set<String> scripts = new LinkedHashSet<String>();
- scripts.addAll(repositoryManager.getPostReceiveScriptsInherited(repository));
+ scripts.addAll(gitblit.getPostReceiveScriptsInherited(repository));
if (!ArrayUtils.isEmpty(repository.postReceiveScripts)) {
scripts.addAll(repository.postReceiveScripts);
}
@@ -393,10 +388,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)) {
@@ -409,14 +400,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;
@@ -455,7 +446,7 @@
}
Binding binding = new Binding();
- binding.setVariable("gitblit", GitBlit.self());
+ binding.setVariable("gitblit", gitblit);
binding.setVariable("repository", repository);
binding.setVariable("receivePack", this);
binding.setVariable("user", user);
--
Gitblit v1.9.1