git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
MZMarek Zawirski <marek.zawirski@gmail.com>
Date
Jun 27, 2008, 22:06 UTC
Message-ID
<1214604407-30572-9-git-send-email-marek.zawirski@gmail.com>
In-Reply-To
<1214604407-30572-8-git-send-email-marek.zawirski@gmail.com>

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@gmail.com>
---
 .../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
Previous: Marek ZawirskiNext: Marek Zawirski
Message 9 of 26 in “Push implementation”
  1. 00/23 Push implementationMarek Zawirski, Jun 27, 2008
  2. 01/23 Fix: let FetchProcess use fetch() instead of doFetch()Marek Zawirski, Jun 27, 2008
  3. 02/23 RefUpdate: new possible result Result.IO_FAILUREMarek Zawirski, Jun 27, 2008
  4. 03/23 Refactor TrackingRefUpdate to not hold RefSpecMarek Zawirski, Jun 27, 2008
  5. 04/23 New constructor without RefSpec for TrackingRefUpdateMarek Zawirski, Jun 27, 2008
  6. 05/23 Add RemoteRefUpdate classMarek Zawirski, Jun 27, 2008
  7. 06/23 Refactor: extract superclass OperationResult from FetchResultMarek Zawirski, Jun 27, 2008
  8. 07/23 Add PushResult classMarek Zawirski, Jun 27, 2008
  9. 08/23 Support for fetchThin and pushThin options in TransportMarek Zawirski, Jun 27, 2008
  10. 09/23 Big refactor: *Connection hierarchyMarek Zawirski, Jun 27, 2008
  11. 10/23 Add ignoreMissingUninteresting option to PackWriterMarek Zawirski, Jun 27, 2008
  12. 11/23 Add BasePackPushConnection implementing git-send-pack protocolMarek Zawirski, Jun 27, 2008
  13. 12/23 Fix: let RevWalk reset correctly before isMergedInto()Marek Zawirski, Jun 27, 2008
  14. 13/23 Add PushProcess class implementing git-send-pack logicMarek Zawirski, Jun 27, 2008
  15. 14/23 Clarify Repository#resolve() documentationMarek Zawirski, Jun 27, 2008
  16. 15/23 Add String versions of methods in RefSpecMarek Zawirski, Jun 27, 2008
  17. 16/23 Transport* - general support for push() and implementationsMarek Zawirski, Jun 27, 2008
  18. 17/23 Test cases for PushProcessMarek Zawirski, Jun 27, 2008
  19. 18/23 Test cases for RefSpec to RemoteRefUpdate conversionsMarek Zawirski, Jun 27, 2008
  20. 19/23 Repository search for command line toolsMarek Zawirski, Jun 27, 2008
  21. 20/23 Push command line utilityMarek Zawirski, Jun 27, 2008
  22. 21/23 Don't accept RefSpec with null source for fetchMarek Zawirski, Jun 27, 2008
  23. 22/23 Add new handy constructors to TransportException, PackProtocolExceptionMarek Zawirski, Jun 27, 2008
  24. 23/23 Use new TransportException constructorsMarek Zawirski, Jun 27, 2008
  25. Robin RosenbergJun 28, 2008
  26. Robin RosenbergJun 27, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.