Browse Source

Expose pack fetch/push connections for subclassing

These classes need to be visible if an application wants to define
its own native pack based protocol embedded within another layer,
much like we already support for smart HTTP.

Change-Id: I7e2ac3ad01d15b94d340128a395fe0b2f560ff35
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
stable-0.9
Shawn O. Pearce 15 years ago
parent
commit
2b23aac1c0
  1. 26
      org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java
  2. 20
      org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java

26
org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java

@ -98,8 +98,8 @@ import org.eclipse.jgit.util.TemporaryBuffer;
* {@link #readAdvertisedRefs()} methods in constructor or before any use. They * {@link #readAdvertisedRefs()} methods in constructor or before any use. They
* should also handle resources releasing in {@link #close()} method if needed. * should also handle resources releasing in {@link #close()} method if needed.
*/ */
abstract class BasePackFetchConnection extends BasePackConnection implements public abstract class BasePackFetchConnection extends BasePackConnection
FetchConnection { implements FetchConnection {
/** /**
* Maximum number of 'have' lines to send before giving up. * Maximum number of 'have' lines to send before giving up.
* <p> * <p>
@ -177,7 +177,13 @@ abstract class BasePackFetchConnection extends BasePackConnection implements
private PacketLineOut pckState; private PacketLineOut pckState;
BasePackFetchConnection(final PackTransport packTransport) { /**
* Create a new connection to fetch using the native git transport.
*
* @param packTransport
* the transport.
*/
public BasePackFetchConnection(final PackTransport packTransport) {
super(packTransport); super(packTransport);
final FetchConfig cfg = local.getConfig().get(FetchConfig.KEY); final FetchConfig cfg = local.getConfig().get(FetchConfig.KEY);
@ -236,6 +242,20 @@ abstract class BasePackFetchConnection extends BasePackConnection implements
return Collections.<PackLock> emptyList(); return Collections.<PackLock> emptyList();
} }
/**
* Execute common ancestor negotiation and fetch the objects.
*
* @param monitor
* progress monitor to receive status updates.
* @param want
* the advertised remote references the caller wants to fetch.
* @param have
* additional objects to assume that already exist locally. This
* will be added to the set of objects reachable from the
* destination repository's references.
* @throws TransportException
* if any exception occurs.
*/
protected void doFetch(final ProgressMonitor monitor, protected void doFetch(final ProgressMonitor monitor,
final Collection<Ref> want, final Set<ObjectId> have) final Collection<Ref> want, final Set<ObjectId> have)
throws TransportException { throws TransportException {

20
org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java

@ -81,7 +81,7 @@ import org.eclipse.jgit.transport.RemoteRefUpdate.Status;
* {@link #readAdvertisedRefs()} methods in constructor or before any use. They * {@link #readAdvertisedRefs()} methods in constructor or before any use. They
* should also handle resources releasing in {@link #close()} method if needed. * should also handle resources releasing in {@link #close()} method if needed.
*/ */
class BasePackPushConnection extends BasePackConnection implements public abstract class BasePackPushConnection extends BasePackConnection implements
PushConnection { PushConnection {
static final String CAPABILITY_REPORT_STATUS = "report-status"; static final String CAPABILITY_REPORT_STATUS = "report-status";
@ -108,7 +108,13 @@ class BasePackPushConnection extends BasePackConnection implements
/** Time in milliseconds spent transferring the pack data. */ /** Time in milliseconds spent transferring the pack data. */
private long packTransferTime; private long packTransferTime;
BasePackPushConnection(final PackTransport packTransport) { /**
* Create a new connection to push using the native git transport.
*
* @param packTransport
* the transport.
*/
public BasePackPushConnection(final PackTransport packTransport) {
super(packTransport); super(packTransport);
thinPack = transport.isPushThin(); thinPack = transport.isPushThin();
} }
@ -143,6 +149,16 @@ class BasePackPushConnection extends BasePackConnection implements
return new TransportException(uri, JGitText.get().pushNotPermitted); return new TransportException(uri, JGitText.get().pushNotPermitted);
} }
/**
* Push one or more objects and update the remote repository.
*
* @param monitor
* progress monitor to receive status updates.
* @param refUpdates
* update commands to be applied to the remote repository.
* @throws TransportException
* if any exception occurs.
*/
protected void doPush(final ProgressMonitor monitor, protected void doPush(final ProgressMonitor monitor,
final Map<String, RemoteRefUpdate> refUpdates) final Map<String, RemoteRefUpdate> refUpdates)
throws TransportException { throws TransportException {

Loading…
Cancel
Save