aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.pgm/src/org/eclipse
diff options
context:
space:
mode:
authorHarald Weiner <timeraider@gmx.at>2022-10-24 23:07:27 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2023-01-24 10:58:24 +0100
commiteb3a708676e3487bbd97df384c09595034034d7e (patch)
tree6fcb49a148a8b01f0a8ebf211174565997518fc6 /org.eclipse.jgit.pgm/src/org/eclipse
parentb48f5739d7a88ff0b2a2bfd55a6e8ddb10b0520d (diff)
downloadjgit-eb3a708676e3487bbd97df384c09595034034d7e.tar.gz
jgit-eb3a708676e3487bbd97df384c09595034034d7e.zip
[pgm] Fetch-CLI: add support for shallow
This adds support for shallow cloning. The CloneCommand and the FetchCommand now have the new options --depth, --shallow-since and --shallow-exclude to tell the server that the client doesn't want to download the complete history. Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=475615 Change-Id: I8f113bed25dd6df64f2f95de6a59d4675ab8a903
Diffstat (limited to 'org.eclipse.jgit.pgm/src/org/eclipse')
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java22
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java20
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java1
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java2
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/InstantHandler.java60
5 files changed, 105 insertions, 0 deletions
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
index f28915d3fa..9f9fa8fe99 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
@@ -13,7 +13,10 @@ package org.eclipse.jgit.pgm;
import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
+import java.time.Instant;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import org.eclipse.jgit.api.CloneCommand;
import org.eclipse.jgit.api.Git;
@@ -48,6 +51,15 @@ class Clone extends AbstractFetchCommand implements CloneCommand.Callback {
@Option(name = "--quiet", usage = "usage_quiet")
private Boolean quiet;
+ @Option(name = "--depth", metaVar = "metaVar_depth", usage = "usage_depth")
+ private Integer depth = null;
+
+ @Option(name = "--shallow-since", metaVar = "metaVar_shallowSince", usage = "usage_shallowSince")
+ private Instant shallowSince = null;
+
+ @Option(name = "--shallow-exclude", metaVar = "metaVar_shallowExclude", usage = "usage_shallowExclude")
+ private List<String> shallowExcludes = new ArrayList<>();
+
@Option(name = "--recurse-submodules", usage = "usage_recurseSubmodules")
private boolean cloneSubmodules;
@@ -97,6 +109,16 @@ class Clone extends AbstractFetchCommand implements CloneCommand.Callback {
.setMirror(isMirror).setNoCheckout(noCheckout).setBranch(branch)
.setCloneSubmodules(cloneSubmodules).setTimeout(timeout);
+ if (depth != null) {
+ command.setDepth(depth.intValue());
+ }
+ if (shallowSince != null) {
+ command.setShallowSince(shallowSince);
+ }
+ for (String shallowExclude : shallowExcludes) {
+ command.addShallowExclude(shallowExclude);
+ }
+
command.setGitDir(gitdir == null ? null : new File(gitdir));
command.setDirectory(localNameF);
boolean msgs = quiet == null || !quiet.booleanValue();
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java
index fbce4a5343..2e0c36b287 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java
@@ -14,6 +14,8 @@ package org.eclipse.jgit.pgm;
import java.io.IOException;
import java.text.MessageFormat;
+import java.time.Instant;
+import java.util.ArrayList;
import java.util.List;
import org.eclipse.jgit.api.FetchCommand;
@@ -62,6 +64,15 @@ class Fetch extends AbstractFetchCommand implements FetchCommand.Callback {
@Option(name = "--tags", usage="usage_tags", aliases = { "-t" })
private Boolean tags;
+ @Option(name = "--depth", metaVar = "metaVar_depth", usage = "usage_depth")
+ private Integer depth = null;
+
+ @Option(name = "--shallow-since", metaVar = "metaVar_shallowSince", usage = "usage_shallowSince")
+ private Instant shallowSince = null;
+
+ @Option(name = "--shallow-exclude", metaVar = "metaVar_shallowExclude", usage = "usage_shallowExclude")
+ private List<String> shallowExcludes = new ArrayList<>();
+
@Option(name = "--no-tags", usage = "usage_notags", aliases = { "-n" })
void notags(@SuppressWarnings("unused")
final boolean ignored) {
@@ -120,6 +131,15 @@ class Fetch extends AbstractFetchCommand implements FetchCommand.Callback {
fetch.setTagOpt(tags.booleanValue() ? TagOpt.FETCH_TAGS
: TagOpt.NO_TAGS);
}
+ if (depth != null) {
+ fetch.setDepth(depth.intValue());
+ }
+ if (shallowSince != null) {
+ fetch.setShallowSince(shallowSince);
+ }
+ for (String shallowExclude : shallowExcludes) {
+ fetch.addShallowExclude(shallowExclude);
+ }
if (0 <= timeout) {
fetch.setTimeout(timeout);
}
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java
index 490f800c0d..d07268b4c3 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java
@@ -214,6 +214,7 @@ public class CLIText extends TranslationBundle {
/***/ public String metaVar_filepattern;
/***/ public String metaVar_gitDir;
/***/ public String metaVar_hostName;
+ /***/ public String metaVar_instant;
/***/ public String metaVar_lfsStorage;
/***/ public String metaVar_linesOfContext;
/***/ public String metaVar_message;
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java
index 5d32e6561c..df0b39b52a 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java
@@ -13,6 +13,7 @@ package org.eclipse.jgit.pgm.opt;
import java.io.IOException;
import java.io.Writer;
import java.lang.reflect.Field;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -55,6 +56,7 @@ public class CmdLineParser extends org.kohsuke.args4j.CmdLineParser {
registry.registerHandler(RevCommit.class, RevCommitHandler.class);
registry.registerHandler(RevTree.class, RevTreeHandler.class);
registry.registerHandler(List.class, OptionWithValuesListHandler.class);
+ registry.registerHandler(Instant.class, InstantHandler.class);
}
private final Repository db;
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/InstantHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/InstantHandler.java
new file mode 100644
index 0000000000..feee78e9b6
--- /dev/null
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/InstantHandler.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2022, Harald Weiner and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.pgm.opt;
+
+import java.time.Instant;
+
+import org.eclipse.jgit.pgm.internal.CLIText;
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.args4j.CmdLineParser;
+import org.kohsuke.args4j.OptionDef;
+import org.kohsuke.args4j.spi.OptionHandler;
+import org.kohsuke.args4j.spi.Parameters;
+import org.kohsuke.args4j.spi.Setter;
+
+/**
+ * Custom argument handler {@link java.time.Instant} from string values.
+ * <p>
+ * Assumes the parser has been initialized with a Repository.
+ *
+ * @since 6.5
+ */
+public class InstantHandler extends OptionHandler<Instant> {
+ /**
+ * Create a new handler for the command name.
+ * <p>
+ * This constructor is used only by args4j.
+ *
+ * @param parser
+ * a {@link org.kohsuke.args4j.CmdLineParser} object.
+ * @param option
+ * a {@link org.kohsuke.args4j.OptionDef} object.
+ * @param setter
+ * a {@link org.kohsuke.args4j.spi.Setter} object.
+ */
+ public InstantHandler(CmdLineParser parser, OptionDef option,
+ Setter<? super Instant> setter) {
+ super(parser, option, setter);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public int parseArguments(Parameters params) throws CmdLineException {
+ Instant instant = Instant.parse(params.getParameter(0));
+ setter.addValue(instant);
+ return 1;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getDefaultMetaVariable() {
+ return CLIText.get().metaVar_instant;
+ }
+}