From 2b23aac1c01f1df0d22d1ef052b87d9c462e6b77 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Tue, 3 Aug 2010 17:40:01 -0700 Subject: [PATCH] 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 --- .../transport/BasePackFetchConnection.java | 26 ++++++++++++++++--- .../transport/BasePackPushConnection.java | 20 ++++++++++++-- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java index af18f18d8..19f5748a2 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java @@ -98,8 +98,8 @@ * {@link #readAdvertisedRefs()} methods in constructor or before any use. They * should also handle resources releasing in {@link #close()} method if needed. */ -abstract class BasePackFetchConnection extends BasePackConnection implements - FetchConnection { +public abstract class BasePackFetchConnection extends BasePackConnection + implements FetchConnection { /** * Maximum number of 'have' lines to send before giving up. *

@@ -177,7 +177,13 @@ static enum MultiAck { 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); final FetchConfig cfg = local.getConfig().get(FetchConfig.KEY); @@ -236,6 +242,20 @@ public Collection getPackLocks() { return Collections. 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, final Collection want, final Set have) throws TransportException { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java index 0838f29c1..2112d85b3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java @@ -81,7 +81,7 @@ * {@link #readAdvertisedRefs()} methods in constructor or before any use. They * should also handle resources releasing in {@link #close()} method if needed. */ -class BasePackPushConnection extends BasePackConnection implements +public abstract class BasePackPushConnection extends BasePackConnection implements PushConnection { 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. */ 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); thinPack = transport.isPushThin(); } @@ -143,6 +149,16 @@ protected TransportException noRepository() { 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, final Map refUpdates) throws TransportException {