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