From 7e4cef3930680058939b41bce3c9f26ee4be5aaa Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Sun, 29 Jul 2012 21:13:30 -0700 Subject: [PATCH] Add a fast path to avoid checking every commit on push If a user can forge author, commiter and gerrit server identity, and can upload merges, don't bother checking the commit history of what is being uploaded. This can save time on servers that are trying to accept a large project import using the push permission. Change-Id: Idfc49c5fff93d51f38297f25b8757a1ce2b8564a --- .../google/gerrit/server/git/ReceiveCommits.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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 457faba22b..e7150bb9a1 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 @@ -21,6 +21,7 @@ import static org.eclipse.jgit.transport.ReceiveCommand.Result.REJECTED_MISSING_ import static org.eclipse.jgit.transport.ReceiveCommand.Result.REJECTED_NONFASTFORWARD; import static org.eclipse.jgit.transport.ReceiveCommand.Result.REJECTED_OTHER_REASON; +import com.google.common.collect.Iterables; import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.ListMultimap; import com.google.gerrit.common.ChangeHooks; @@ -1590,6 +1591,18 @@ public class ReceiveCommits { } private void validateNewCommits(RefControl ctl, ReceiveCommand cmd) { + if (ctl.canForgeAuthor() + && ctl.canForgeCommitter() + && ctl.canForgeGerritServerIdentity() + && ctl.canUploadMerges() + && !project.isUseSignedOffBy() + && Iterables.isEmpty(rejectCommits) + && !GitRepositoryManager.REF_CONFIG.equals(ctl.getRefName()) + && !(MagicBranch.isMagicBranch(cmd.getRefName()) + || NEW_PATCHSET.matcher(cmd.getRefName()).matches())) { + return; + } + final RevWalk walk = rp.getRevWalk(); walk.reset(); walk.sort(RevSort.NONE); @@ -1690,7 +1703,7 @@ public class ReceiveCommits { } final List idList = c.getFooterLines(CHANGE_ID); - if ((MagicBranch.isMagicBranch(cmd.getRefName()) || NEW_PATCHSET.matcher(cmd.getRefName()).matches())) { + if (MagicBranch.isMagicBranch(cmd.getRefName()) || NEW_PATCHSET.matcher(cmd.getRefName()).matches()) { if (idList.isEmpty()) { if (project.isRequireChangeID()) { String errMsg = "missing Change-Id in commit message";