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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html