Add event hook support
The following hooks are defined and implemented: * patchset-created --change <change id> --project <project name> --branch <branch> --commit <sha1> --patchset <patchset id> * comment-added --change <change id> --project <project name> --branch <branch> --author <comment author> --comment <comment> [--<approval category id> <score> --<approval category id> <score> ...] * change-merged --change <change id> --project <project name> --branch <branch> --submitter <submitter> --commit <sha1> * change-abandoned --change <change id> --project <project name> --branch <branch> --abandoner <abandoner> --reason <reason> Bug: issue 368 Bug: issue 383 Change-Id: Ic2f041a71c744d0938d79b1106c9119d6318731a Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
committed by
Shawn O. Pearce
parent
48bc519a98
commit
6c2b677980
@@ -14,6 +14,7 @@
|
||||
|
||||
package com.google.gerrit.sshd.commands;
|
||||
|
||||
import com.google.gerrit.common.ChangeHookRunner;
|
||||
import com.google.gerrit.common.data.ApprovalType;
|
||||
import com.google.gerrit.common.data.ApprovalTypes;
|
||||
import com.google.gerrit.reviewdb.ApprovalCategory;
|
||||
@@ -49,8 +50,10 @@ import org.slf4j.LoggerFactory;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class ApproveCommand extends BaseCommand {
|
||||
@@ -106,6 +109,9 @@ public class ApproveCommand extends BaseCommand {
|
||||
@Inject
|
||||
private FunctionState.Factory functionStateFactory;
|
||||
|
||||
@Inject
|
||||
private ChangeHookRunner hooks;
|
||||
|
||||
private List<ApproveOption> optionList;
|
||||
|
||||
@Override
|
||||
@@ -154,6 +160,9 @@ public class ApproveCommand extends BaseCommand {
|
||||
msgBuf.append(patchSetId.get());
|
||||
msgBuf.append(": ");
|
||||
|
||||
final Map<ApprovalCategory.Id, ApprovalCategoryValue.Id> approvalsMap =
|
||||
new HashMap<ApprovalCategory.Id, ApprovalCategoryValue.Id>();
|
||||
|
||||
for (ApproveOption co : optionList) {
|
||||
final ApprovalCategory.Id category = co.getCategoryId();
|
||||
PatchSetApproval.Key psaKey =
|
||||
@@ -174,10 +183,12 @@ public class ApproveCommand extends BaseCommand {
|
||||
}
|
||||
}
|
||||
|
||||
String message =
|
||||
db.approvalCategoryValues().get(
|
||||
new ApprovalCategoryValue.Id(category, score)).getName();
|
||||
final ApprovalCategoryValue.Id val =
|
||||
new ApprovalCategoryValue.Id(category, score);
|
||||
|
||||
String message = db.approvalCategoryValues().get(val).getName();
|
||||
msgBuf.append(" " + message + ";");
|
||||
approvalsMap.put(category, val);
|
||||
}
|
||||
|
||||
msgBuf.deleteCharAt(msgBuf.length() - 1);
|
||||
@@ -196,6 +207,9 @@ public class ApproveCommand extends BaseCommand {
|
||||
|
||||
ChangeUtil.touch(change, db);
|
||||
sendMail(change, change.currentPatchSetId(), cm);
|
||||
|
||||
hooks.doCommentAddedHook(change, currentUser.getAccount(), changeComment,
|
||||
approvalsMap);
|
||||
}
|
||||
|
||||
private Set<PatchSet.Id> parsePatchSetId(final String patchIdentity)
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
package com.google.gerrit.sshd.commands;
|
||||
|
||||
import com.google.gerrit.common.ChangeHookRunner;
|
||||
import static com.google.gerrit.reviewdb.ApprovalCategory.PUSH_HEAD;
|
||||
import static com.google.gerrit.reviewdb.ApprovalCategory.PUSH_HEAD_REPLACE;
|
||||
import static com.google.gerrit.reviewdb.ApprovalCategory.PUSH_HEAD_UPDATE;
|
||||
@@ -153,6 +154,9 @@ final class Receive extends AbstractGitCommand {
|
||||
@Inject
|
||||
private PatchSetInfoFactory patchSetInfoFactory;
|
||||
|
||||
@Inject
|
||||
private ChangeHookRunner hooks;
|
||||
|
||||
@Inject
|
||||
@CanonicalWebUrl
|
||||
@Nullable
|
||||
@@ -870,6 +874,8 @@ final class Receive extends AbstractGitCommand {
|
||||
} catch (EmailException e) {
|
||||
log.error("Cannot send email for new change " + change.getId(), e);
|
||||
}
|
||||
|
||||
hooks.doPatchsetCreatedHook(change, ps);
|
||||
}
|
||||
|
||||
private static boolean isReviewer(final FooterLine candidateFooterLine) {
|
||||
@@ -1132,6 +1138,8 @@ final class Receive extends AbstractGitCommand {
|
||||
insertDummyApproval(result, reviewer, catId, db);
|
||||
}
|
||||
}
|
||||
|
||||
hooks.doPatchsetCreatedHook(result.change, ps);
|
||||
}
|
||||
|
||||
final RefUpdate ru = repo.updateRef(ps.getRefName());
|
||||
@@ -1447,6 +1455,8 @@ final class Receive extends AbstractGitCommand {
|
||||
final PatchSet.Id psi = result.patchSet.getId();
|
||||
log.error("Cannot send email for submitted patch set " + psi, e);
|
||||
}
|
||||
|
||||
hooks.doChangeMergedHook(result.change, currentUser.getAccount(), result.patchSet);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user