From 04fa307a70f8bc4f47a95fb18f74b0c9763d059b Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Tue, 22 May 2012 15:59:53 -0700 Subject: [PATCH] Reject non-fast-forwards earlier in BaseReceivePack If BaseReceivePack has setAllowNonFastForwards(false) configured (such as by receive.denynonfastforwards), automatically reject any command that attempts a non-fast-forward update before it goes further in processing. This matches with other checks in validateCommands(), such as the early failure of delete attempts when isAllowDeletes() is false. Change-Id: I3bb28e4dd6d17cb31ede09eb84ceb67cdb17ea5d --- .../org/eclipse/jgit/transport/BaseReceivePack.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java index c0d44b1db..a0b1c58c6 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java @@ -1100,6 +1100,12 @@ public abstract class BaseReceivePack { } else { cmd.setType(ReceiveCommand.Type.UPDATE_NONFASTFORWARD); } + + if (cmd.getType() == ReceiveCommand.Type.UPDATE_NONFASTFORWARD + && !isAllowNonFastForwards()) { + cmd.setResult(Result.REJECTED_NONFASTFORWARD); + continue; + } } if (!cmd.getRefName().startsWith(Constants.R_REFS) @@ -1123,8 +1129,10 @@ public abstract class BaseReceivePack { /** Execute commands to update references. */ protected void executeCommands() { - List toApply = ReceiveCommand.filter(commands, - Result.NOT_ATTEMPTED); + List toApply = filterCommands(Result.NOT_ATTEMPTED); + if (toApply.isEmpty()) + return; + ProgressMonitor updating = NullProgressMonitor.INSTANCE; if (sideBand) { SideBandProgressMonitor pm = new SideBandProgressMonitor(msgOut);