Browse Source

Merge "ReceivePack: support quiet capability"

stable-4.1
Matthias Sohn 10 years ago committed by Gerrit Code Review @ Eclipse.org
parent
commit
6424dcd694
  1. 50
      org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java
  2. 7
      org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java

50
org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java

@ -46,6 +46,7 @@ package org.eclipse.jgit.transport;
import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_ATOMIC; 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_DELETE_REFS;
import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_OFS_DELTA; 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_REPORT_STATUS;
import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_SIDE_BAND_64K; import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_SIDE_BAND_64K;
import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_AGENT; import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_AGENT;
@ -176,6 +177,7 @@ public abstract class BaseReceivePack {
private boolean allowNonFastForwards; private boolean allowNonFastForwards;
private boolean allowOfsDelta; private boolean allowOfsDelta;
private boolean allowQuiet = true;
/** Identity to record action as within the reflog. */ /** Identity to record action as within the reflog. */
private PersonIdent refLogIdent; private PersonIdent refLogIdent;
@ -234,6 +236,8 @@ public abstract class BaseReceivePack {
/** If {@link BasePackPushConnection#CAPABILITY_SIDE_BAND_64K} is enabled. */ /** If {@link BasePackPushConnection#CAPABILITY_SIDE_BAND_64K} is enabled. */
private boolean sideBand; private boolean sideBand;
private boolean quiet;
/** Lock around the received pack file, while updating refs. */ /** Lock around the received pack file, while updating refs. */
private PackLock packLock; private PackLock packLock;
@ -740,6 +744,45 @@ public abstract class BaseReceivePack {
return enabledCapabilities.contains(CAPABILITY_SIDE_BAND_64K); 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. * Get the user agent of the client.
* <p> * <p>
@ -969,6 +1012,8 @@ public abstract class BaseReceivePack {
adv.advertiseCapability(CAPABILITY_SIDE_BAND_64K); adv.advertiseCapability(CAPABILITY_SIDE_BAND_64K);
adv.advertiseCapability(CAPABILITY_DELETE_REFS); adv.advertiseCapability(CAPABILITY_DELETE_REFS);
adv.advertiseCapability(CAPABILITY_REPORT_STATUS); adv.advertiseCapability(CAPABILITY_REPORT_STATUS);
if (allowQuiet)
adv.advertiseCapability(CAPABILITY_QUIET);
if (pushCertificateParser.enabled()) if (pushCertificateParser.enabled())
adv.advertiseCapability( adv.advertiseCapability(
pushCertificateParser.getAdvertiseNonce()); pushCertificateParser.getAdvertiseNonce());
@ -1046,6 +1091,7 @@ public abstract class BaseReceivePack {
/** Enable capabilities based on a previously read capabilities line. */ /** Enable capabilities based on a previously read capabilities line. */
protected void enableCapabilities() { protected void enableCapabilities() {
sideBand = isCapabilityEnabled(CAPABILITY_SIDE_BAND_64K); sideBand = isCapabilityEnabled(CAPABILITY_SIDE_BAND_64K);
quiet = allowQuiet && isCapabilityEnabled(CAPABILITY_QUIET);
if (sideBand) { if (sideBand) {
OutputStream out = rawOut; OutputStream out = rawOut;
@ -1093,7 +1139,7 @@ public abstract class BaseReceivePack {
ProgressMonitor receiving = NullProgressMonitor.INSTANCE; ProgressMonitor receiving = NullProgressMonitor.INSTANCE;
ProgressMonitor resolving = NullProgressMonitor.INSTANCE; ProgressMonitor resolving = NullProgressMonitor.INSTANCE;
if (sideBand) if (sideBand && !quiet)
resolving = new SideBandProgressMonitor(msgOut); resolving = new SideBandProgressMonitor(msgOut);
try (ObjectInserter ins = db.newObjectInserter()) { try (ObjectInserter ins = db.newObjectInserter()) {
@ -1130,7 +1176,7 @@ public abstract class BaseReceivePack {
ObjectIdSubclassMap<ObjectId> baseObjects = null; ObjectIdSubclassMap<ObjectId> baseObjects = null;
ObjectIdSubclassMap<ObjectId> providedObjects = null; ObjectIdSubclassMap<ObjectId> providedObjects = null;
ProgressMonitor checking = NullProgressMonitor.INSTANCE; ProgressMonitor checking = NullProgressMonitor.INSTANCE;
if (sideBand) { if (sideBand && !quiet) {
SideBandProgressMonitor m = new SideBandProgressMonitor(msgOut); SideBandProgressMonitor m = new SideBandProgressMonitor(msgOut);
m.setDelayStart(750, TimeUnit.MILLISECONDS); m.setDelayStart(750, TimeUnit.MILLISECONDS);
checking = m; checking = m;

7
org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java

@ -151,6 +151,13 @@ public class GitProtocolConstants {
*/ */
public static final String CAPABILITY_ATOMIC = "atomic"; //$NON-NLS-1$ public static final String CAPABILITY_ATOMIC = "atomic"; //$NON-NLS-1$
/**
* The client expects less noise, e.g. no progress.
*
* @since 4.0
*/
public static final String CAPABILITY_QUIET = "quiet"; //$NON-NLS-1$
/** /**
* The client expects a status report after the server processes the pack. * The client expects a status report after the server processes the pack.
* *

Loading…
Cancel
Save