import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_ATOMIC;
import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_DELETE_REFS;
import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_OFS_DELTA;
+import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_QUIET;
import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_REPORT_STATUS;
import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_SIDE_BAND_64K;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_AGENT;
private boolean allowNonFastForwards;
private boolean allowOfsDelta;
+ private boolean allowQuiet = true;
/** Identity to record action as within the reflog. */
private PersonIdent refLogIdent;
/** If {@link BasePackPushConnection#CAPABILITY_SIDE_BAND_64K} is enabled. */
private boolean sideBand;
+ private boolean quiet;
+
/** Lock around the received pack file, while updating refs. */
private PackLock packLock;
return enabledCapabilities.contains(CAPABILITY_SIDE_BAND_64K);
}
+ /**
+ * @return true if clients may request avoiding noisy progress messages.
+ * @since 4.0
+ */
+ public boolean isAllowQuiet() {
+ return allowQuiet;
+ }
+
+ /**
+ * Configure if clients may request the server skip noisy messages.
+ *
+ * @param allow
+ * true to allow clients to request quiet behavior; false to
+ * refuse quiet behavior and send messages anyway. This may be
+ * necessary if processing is slow and the client-server network
+ * connection can timeout.
+ * @since 4.0
+ */
+ public void setAllowQuiet(boolean allow) {
+ allowQuiet = allow;
+ }
+
+ /**
+ * True if the client wants less verbose output.
+ *
+ * @return true if the client has requested the server to be less verbose.
+ * @throws RequestNotYetReadException
+ * if the client's request has not yet been read from the wire,
+ * so we do not know if they expect side-band. Note that the
+ * client may have already written the request, it just has not
+ * been read.
+ * @since 4.0
+ */
+ public boolean isQuiet() throws RequestNotYetReadException {
+ if (enabledCapabilities == null)
+ throw new RequestNotYetReadException();
+ return quiet;
+ }
+
/**
* Get the user agent of the client.
* <p>
adv.advertiseCapability(CAPABILITY_SIDE_BAND_64K);
adv.advertiseCapability(CAPABILITY_DELETE_REFS);
adv.advertiseCapability(CAPABILITY_REPORT_STATUS);
+ if (allowQuiet)
+ adv.advertiseCapability(CAPABILITY_QUIET);
if (pushCertificateParser.enabled())
adv.advertiseCapability(
pushCertificateParser.getAdvertiseNonce());
/** Enable capabilities based on a previously read capabilities line. */
protected void enableCapabilities() {
sideBand = isCapabilityEnabled(CAPABILITY_SIDE_BAND_64K);
+ quiet = allowQuiet && isCapabilityEnabled(CAPABILITY_QUIET);
if (sideBand) {
OutputStream out = rawOut;
ProgressMonitor receiving = NullProgressMonitor.INSTANCE;
ProgressMonitor resolving = NullProgressMonitor.INSTANCE;
- if (sideBand)
+ if (sideBand && !quiet)
resolving = new SideBandProgressMonitor(msgOut);
try (ObjectInserter ins = db.newObjectInserter()) {
ObjectIdSubclassMap<ObjectId> baseObjects = null;
ObjectIdSubclassMap<ObjectId> providedObjects = null;
ProgressMonitor checking = NullProgressMonitor.INSTANCE;
- if (sideBand) {
+ if (sideBand && !quiet) {
SideBandProgressMonitor m = new SideBandProgressMonitor(msgOut);
m.setDelayStart(750, TimeUnit.MILLISECONDS);
checking = m;