[JGIT PATCH 6/6] Add --timeout command line options
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
.../src/org/spearce/jgit/pgm/Daemon.java | 5 +++++
.../src/org/spearce/jgit/pgm/Fetch.java | 5 +++++
.../src/org/spearce/jgit/pgm/LsRemote.java | 6 ++++++
.../src/org/spearce/jgit/pgm/Push.java | 5 +++++
.../src/org/spearce/jgit/pgm/UploadPack.java | 6 ++++++
5 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Daemon.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Daemon.java
index e064fd8..6508910 100644
--- a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Daemon.java
+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Daemon.java
@@ -54,6 +54,9 @@
@Option(name = "--listen", metaVar = "HOSTNAME", usage = "hostname (or ip) to listen on")
String host;
+ @Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity")
+ int timeout = -1;
+
@Option(name = "--enable", metaVar = "SERVICE", usage = "enable the service in all repositories", multiValued = true)
final List<String> enable = new ArrayList<String>();
@@ -85,6 +88,8 @@ protected void run() throws Exception {
host != null ? new InetSocketAddress(host, port)
: new InetSocketAddress(port));
d.setExportAll(exportAll);
+ if (0 <= timeout)
+ d.setTimeout(timeout);
for (final String n : enable)
service(d, n).setEnabled(true);
diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Fetch.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Fetch.java
index 81d6893..d7be9fa 100644
--- a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Fetch.java
+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Fetch.java
@@ -48,6 +48,9 @@
@Command(common = true, usage = "Update remote refs from another repository")
class Fetch extends AbstractFetchCommand {
+ @Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity")
+ int timeout = -1;
+
@Option(name = "--fsck", usage = "perform fsck style checks on receive")
private Boolean fsck;
@@ -86,6 +89,8 @@ protected void run() throws Exception {
tn.setDryRun(dryRun);
if (thin != null)
tn.setFetchThin(thin.booleanValue());
+ if (0 <= timeout)
+ tn.setTimeout(timeout);
final FetchResult r;
try {
r = tn.fetch(new TextProgressMonitor(), toget);
diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/LsRemote.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/LsRemote.java
index bfa38ec..da2de9a 100644
--- a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/LsRemote.java
+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/LsRemote.java
@@ -38,18 +38,24 @@
package org.spearce.jgit.pgm;
import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.Option;
import org.spearce.jgit.lib.AnyObjectId;
import org.spearce.jgit.lib.Ref;
import org.spearce.jgit.transport.FetchConnection;
import org.spearce.jgit.transport.Transport;
class LsRemote extends TextBuiltin {
+ @Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity")
+ int timeout = -1;
+
@Argument(index = 0, metaVar = "uri-ish", required = true)
private String remote;
@Override
protected void run() throws Exception {
final Transport tn = Transport.open(db, remote);
+ if (0 <= timeout)
+ tn.setTimeout(timeout);
final FetchConnection c = tn.openFetch();
try {
for (final Ref r : c.getRefs()) {
diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Push.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Push.java
index 19d31a1..018a521 100644
--- a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Push.java
+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/Push.java
@@ -55,6 +55,9 @@
@Command(common = true, usage = "Update remote repository from local refs")
class Push extends TextBuiltin {
+ @Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity")
+ int timeout = -1;
+
@Argument(index = 0, metaVar = "uri-ish")
private String remote = "origin";
@@ -104,6 +107,8 @@ protected void run() throws Exception {
final List<Transport> transports = Transport.openAll(db, remote);
for (final Transport transport : transports) {
+ if (0 <= timeout)
+ transport.setTimeout(timeout);
transport.setPushThin(thin);
if (receivePack != null)
transport.setOptionReceivePack(receivePack);
diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/UploadPack.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/UploadPack.java
index d09d442..1d9af24 100644
--- a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/UploadPack.java
+++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/UploadPack.java
@@ -40,10 +40,14 @@
import java.io.File;
import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.Option;
import org.spearce.jgit.lib.Repository;
@Command(common = false, usage = "Server side backend for 'jgit fetch'")
class UploadPack extends TextBuiltin {
+ @Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity")
+ int timeout = -1;
+
@Argument(index = 0, required = true, metaVar = "DIRECTORY", usage = "Repository to read from")
File srcGitdir;
@@ -62,6 +66,8 @@ protected void run() throws Exception {
if (!db.getObjectsDirectory().isDirectory())
throw die("'" + srcGitdir.getPath() + "' not a git repository");
rp = new org.spearce.jgit.transport.UploadPack(db);
+ if (0 <= timeout)
+ rp.setTimeout(timeout);
rp.upload(System.in, System.out, System.err);
}
}
--
1.6.3.2.416.g04d0