[EGIT PATCH 08/23] Support for fetchThin and pushThin options in Transport

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This option determines whether we should use thin pack when possible
during fetching from or pushing to a remote repo.

For fetching the default is to produce a thin pack when remote side
supports it, while for pushing the default setting is to not produce a
thin pack.

Signed-off-by: Marek Zawirski <marek.zawirski@xxxxxxxxx>
---
 .../jgit/transport/PackFetchConnection.java        |    4 +-
 .../src/org/spearce/jgit/transport/Transport.java  |   63 ++++++++++++++++++++
 2 files changed, 66 insertions(+), 1 deletions(-)

diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/PackFetchConnection.java b/org.spearce.jgit/src/org/spearce/jgit/transport/PackFetchConnection.java
index 5f15a8d..6209030 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/PackFetchConnection.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/PackFetchConnection.java
@@ -150,6 +150,7 @@ abstract class PackFetchConnection extends FetchConnection {
 		local = packTransport.local;
 		uri = packTransport.uri;
 		includeTags = packTransport.getTagOpt() != TagOpt.NO_TAGS;
+		thinPack = packTransport.isFetchThin();
 
 		walk = new RevWalk(local);
 		reachableCommits = new RevCommitList<RevCommit>();
@@ -363,7 +364,8 @@ abstract class PackFetchConnection extends FetchConnection {
 			includeTags = wantCapability(line, OPTION_INCLUDE_TAG);
 		wantCapability(line, OPTION_OFS_DELTA);
 		multiAck = wantCapability(line, OPTION_MULTI_ACK);
-		thinPack = wantCapability(line, OPTION_THIN_PACK);
+		if (thinPack)
+			thinPack = wantCapability(line, OPTION_THIN_PACK);
 		if (wantCapability(line, OPTION_SIDE_BAND_64K))
 			sideband = true;
 		else if (wantCapability(line, OPTION_SIDE_BAND))
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/Transport.java b/org.spearce.jgit/src/org/spearce/jgit/transport/Transport.java
index 6cc38ec..c4b71eb 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/Transport.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/Transport.java
@@ -142,6 +142,16 @@ public abstract class Transport {
 		throw new NotSupportedException("URI not supported: " + remote);
 	}
 
+	/**
+	 * Default setting for {@link #fetchThin} option.
+	 */
+	public static final boolean DEFAULT_FETCH_THIN = true;
+
+	/**
+	 * Default setting for {@link #pushThin} option.
+	 */
+	public static final boolean DEFAULT_PUSH_THIN = false;
+
 	/** The repository this transport fetches into, or pushes out of. */
 	protected final Repository local;
 
@@ -165,6 +175,12 @@ public abstract class Transport {
 	 */
 	private TagOpt tagopt = TagOpt.NO_TAGS;
 
+	/** Should fetch request thin-pack if remote repository can produce it. */
+	private boolean fetchThin = DEFAULT_FETCH_THIN;
+
+	/** Should push produce thin-pack when sending objects to remote repository. */
+	private boolean pushThin = DEFAULT_PUSH_THIN;
+
 	/**
 	 * Create a new transport instance.
 	 * 
@@ -234,6 +250,53 @@ public abstract class Transport {
 	}
 
 	/**
+	 * Default setting is: {@link #DEFAULT_FETCH_THIN}
+	 * 
+	 * @return true if fetch should request thin-pack when possible; false
+	 *         otherwise
+	 * @see PackTransport
+	 */
+	public boolean isFetchThin() {
+		return fetchThin;
+	}
+
+	/**
+	 * Set the thin-pack preference for fetch operation. Default setting is:
+	 * {@link #DEFAULT_FETCH_THIN}
+	 * 
+	 * @param fetchThin
+	 *            true when fetch should request thin-pack when possible; false
+	 *            when it shouldn't
+	 * @see PackTransport
+	 */
+	public void setFetchThin(final boolean fetchThin) {
+		this.fetchThin = fetchThin;
+	}
+
+	/**
+	 * Default setting is: {@value #DEFAULT_PUSH_THIN}
+	 * 
+	 * @return true if push should produce thin-pack in pack transports
+	 * @see PackTransport
+	 */
+	public boolean isPushThin() {
+		return pushThin;
+	}
+
+	/**
+	 * Set thin-pack preference for push operation. Default setting is:
+	 * {@value #DEFAULT_PUSH_THIN}
+	 * 
+	 * @param pushThin
+	 *            true when push should produce thin-pack in pack transports;
+	 *            false when it shouldn't
+	 * @see PackTransport
+	 */
+	public void setPushThin(final boolean pushThin) {
+		this.pushThin = pushThin;
+	}
+
+	/**
 	 * Fetch objects and refs from the remote repository to the local one.
 	 * <p>
 	 * This is a utility function providing standard fetch behavior. Local
-- 
1.5.5.3

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux