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
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 457faba..e7150bb 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_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 @@
}
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 @@
}
final List<String> 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";