summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2009-06-08 08:47:54 -0700
committerShawn O. Pearce <sop@google.com>2009-06-08 08:47:54 -0700
commit3fb51eefe5a78d81a8badd7e3956457929ab8162 (patch)
tree05370b1da1d1c2dfa6cff6069b56b9c8fc479ac3
parent66eb36819e2d26575a9c8425f7bfabbc5326bb29 (diff)
Convert command line programs to use args4j
Our command line programs started by `java -jar gerrit.war ...` now use args4j for their command line argument processing. This better matches with now the SSHD based commands are processed. Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--pom.xml2
-rw-r--r--src/main/java/com/google/gerrit/pgm/AbstractProgram.java94
-rw-r--r--src/main/java/com/google/gerrit/pgm/ConvertSystemConfig.java9
-rw-r--r--src/main/java/com/google/gerrit/pgm/CreateSchema.java19
-rw-r--r--src/main/java/com/google/gerrit/pgm/Daemon.java11
-rw-r--r--src/main/java/com/google/gerrit/pgm/ReimportPatchSets.java21
-rw-r--r--src/main/java/com/google/gerrit/pgm/Version.java8
7 files changed, 118 insertions, 46 deletions
diff --git a/pom.xml b/pom.xml
index 096bc302af..f9f906d914 100644
--- a/pom.xml
+++ b/pom.xml
@@ -486,7 +486,7 @@ limitations under the License.
<dependency>
<groupId>gerrit</groupId>
<artifactId>executablewar</artifactId>
- <version>1.0</version>
+ <version>1.1</version>
<scope>provided</scope>
</dependency>
diff --git a/src/main/java/com/google/gerrit/pgm/AbstractProgram.java b/src/main/java/com/google/gerrit/pgm/AbstractProgram.java
new file mode 100644
index 0000000000..0088e3398a
--- /dev/null
+++ b/src/main/java/com/google/gerrit/pgm/AbstractProgram.java
@@ -0,0 +1,94 @@
+// Copyright (C) 2009 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.pgm;
+
+import com.google.gerrit.git.WorkQueue;
+import com.google.gerrit.server.ssh.CmdLineParser;
+
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.args4j.Option;
+
+import java.io.StringWriter;
+
+/** Base class for command line invocations of Gerrit Code Review. */
+public abstract class AbstractProgram {
+ private final Object sleepLock = new Object();
+ private boolean running = true;
+
+ @Option(name = "--help", usage = "display this help text", aliases = {"-h"})
+ private boolean help;
+
+ private String getName() {
+ String n = getClass().getName();
+ int dot = n.lastIndexOf('.');
+ if (0 < dot) {
+ n = n.substring(dot + 1);
+ }
+ return n.toLowerCase();
+ }
+
+ public final int main(final String[] argv) throws Exception {
+ final CmdLineParser clp = new CmdLineParser(this);
+ try {
+ clp.parseArgument(argv);
+ } catch (CmdLineException err) {
+ if (!help) {
+ System.err.println("fatal: " + err.getMessage());
+ return 1;
+ }
+ }
+
+ if (help) {
+ final StringWriter msg = new StringWriter();
+ msg.write(getName());
+ clp.printSingleLineUsage(msg, null);
+ msg.write('\n');
+
+ msg.write('\n');
+ clp.printUsage(msg, null);
+ msg.write('\n');
+ System.err.println(msg.toString());
+ return 1;
+ }
+
+ try {
+ return run();
+ } finally {
+ WorkQueue.terminate();
+ }
+ }
+
+ /** Method that never returns, e.g. to keep a daemon running. */
+ protected int never() {
+ synchronized (sleepLock) {
+ while (running) {
+ try {
+ sleepLock.wait(60 * 60 * 1000L);
+ } catch (InterruptedException e) {
+ continue;
+ }
+ }
+ return 0;
+ }
+ }
+
+ /**
+ * Run this program's logic, returning the command exit status.
+ * <p>
+ * When this method completes, the JVM is terminated. To keep the JVM running,
+ * use {@code return never()}.
+ */
+ public abstract int run() throws Exception;
+}
diff --git a/src/main/java/com/google/gerrit/pgm/ConvertSystemConfig.java b/src/main/java/com/google/gerrit/pgm/ConvertSystemConfig.java
index 64bac4c0c9..8323bf684e 100644
--- a/src/main/java/com/google/gerrit/pgm/ConvertSystemConfig.java
+++ b/src/main/java/com/google/gerrit/pgm/ConvertSystemConfig.java
@@ -16,22 +16,20 @@ package com.google.gerrit.pgm;
import com.google.gerrit.client.reviewdb.ReviewDb;
import com.google.gerrit.server.GerritServer;
-import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.jdbc.JdbcSchema;
import org.spearce.jgit.lib.RepositoryConfig;
import java.io.File;
import java.io.FileNotFoundException;
-import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/** Export system_config from schema version 11 to gerrit.config file. */
-public class ConvertSystemConfig {
- public static void main(final String[] argv) throws OrmException,
- SQLException, IOException {
+public class ConvertSystemConfig extends AbstractProgram {
+ @Override
+ public int run() throws Exception {
final ReviewDb db = GerritServer.createDatabase().open();
try {
final Statement s = ((JdbcSchema) db).getConnection().createStatement();
@@ -58,6 +56,7 @@ public class ConvertSystemConfig {
} finally {
db.close();
}
+ return 0;
}
private static void export(RepositoryConfig config, ResultSet rs)
diff --git a/src/main/java/com/google/gerrit/pgm/CreateSchema.java b/src/main/java/com/google/gerrit/pgm/CreateSchema.java
index 8b7126944b..cd35d2105c 100644
--- a/src/main/java/com/google/gerrit/pgm/CreateSchema.java
+++ b/src/main/java/com/google/gerrit/pgm/CreateSchema.java
@@ -15,28 +15,17 @@
package com.google.gerrit.pgm;
import com.google.gerrit.client.rpc.Common;
-import com.google.gerrit.git.WorkQueue;
import com.google.gerrit.server.GerritServer;
-import com.google.gwtjsonrpc.server.XsrfException;
-import com.google.gwtorm.client.OrmException;
/**
* Creates the Gerrit 2 database schema.
*/
-public class CreateSchema {
- public static void main(final String[] argv) throws OrmException,
- XsrfException {
- try {
- mainImpl(argv);
- } finally {
- WorkQueue.terminate();
- }
- }
-
- private static void mainImpl(final String[] argv) throws OrmException,
- XsrfException {
+public class CreateSchema extends AbstractProgram {
+ @Override
+ public int run() throws Exception {
GerritServer.getInstance(false);
Common.getSchemaFactory().open().close();
System.out.println("Gerrit2 schema initialized");
+ return 0;
}
}
diff --git a/src/main/java/com/google/gerrit/pgm/Daemon.java b/src/main/java/com/google/gerrit/pgm/Daemon.java
index 6fc3f5090d..e69e501594 100644
--- a/src/main/java/com/google/gerrit/pgm/Daemon.java
+++ b/src/main/java/com/google/gerrit/pgm/Daemon.java
@@ -15,16 +15,13 @@
package com.google.gerrit.pgm;
import com.google.gerrit.server.ssh.GerritSshDaemon;
-import com.google.gwtjsonrpc.server.XsrfException;
-import com.google.gwtorm.client.OrmException;
-
-import java.net.SocketException;
/** Run only the SSH daemon portions of Gerrit. */
-public class Daemon {
- public static void main(final String[] argv) throws SocketException,
- OrmException, XsrfException {
+public class Daemon extends AbstractProgram {
+ @Override
+ public int run() throws Exception {
GerritSshDaemon.startSshd();
+ return never();
}
}
diff --git a/src/main/java/com/google/gerrit/pgm/ReimportPatchSets.java b/src/main/java/com/google/gerrit/pgm/ReimportPatchSets.java
index 5930967f5d..bc36b50970 100644
--- a/src/main/java/com/google/gerrit/pgm/ReimportPatchSets.java
+++ b/src/main/java/com/google/gerrit/pgm/ReimportPatchSets.java
@@ -21,9 +21,7 @@ import com.google.gerrit.client.reviewdb.ReviewDb;
import com.google.gerrit.client.rpc.Common;
import com.google.gerrit.git.InvalidRepositoryException;
import com.google.gerrit.git.PatchSetImporter;
-import com.google.gerrit.git.WorkQueue;
import com.google.gerrit.server.GerritServer;
-import com.google.gwtjsonrpc.server.XsrfException;
import com.google.gwtorm.client.OrmException;
import org.spearce.jgit.lib.ObjectId;
@@ -34,7 +32,6 @@ import org.spearce.jgit.revwalk.RevCommit;
import org.spearce.jgit.revwalk.RevWalk;
import java.io.BufferedReader;
-import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;
import java.util.ArrayList;
@@ -53,18 +50,9 @@ import java.util.ArrayList;
* For each supplied PatchSet the info and patch entities are completely updated
* based on the data stored in Git.
*/
-public class ReimportPatchSets {
- public static void main(final String[] argv) throws OrmException,
- XsrfException, IOException {
- try {
- mainImpl(argv);
- } finally {
- WorkQueue.terminate();
- }
- }
-
- private static void mainImpl(final String[] argv) throws OrmException,
- XsrfException, IOException {
+public class ReimportPatchSets extends AbstractProgram {
+ @Override
+ public int run() throws Exception {
final GerritServer gs = GerritServer.getInstance(false);
final ArrayList<PatchSet.Id> todo = new ArrayList<PatchSet.Id>();
final BufferedReader br =
@@ -74,6 +62,7 @@ public class ReimportPatchSets {
todo.add(PatchSet.Id.parse(line.replace('|', ',')));
}
+ int exitStatus = 0;
final ReviewDb db = Common.getSchemaFactory().open();
final ProgressMonitor pm = new TextProgressMonitor();
try {
@@ -122,9 +111,11 @@ public class ReimportPatchSets {
e2.getNextException().printStackTrace();
}
}
+ exitStatus = 1;
} finally {
pm.endTask();
db.close();
}
+ return exitStatus;
}
}
diff --git a/src/main/java/com/google/gerrit/pgm/Version.java b/src/main/java/com/google/gerrit/pgm/Version.java
index ba4eabcae5..6c48680c42 100644
--- a/src/main/java/com/google/gerrit/pgm/Version.java
+++ b/src/main/java/com/google/gerrit/pgm/Version.java
@@ -22,7 +22,7 @@ import java.util.Properties;
/** Display the version of Gerrit. */
-public class Version {
+public class Version extends AbstractProgram {
private static String version;
public static synchronized String getVersion() {
@@ -49,12 +49,14 @@ public class Version {
return version;
}
- public static void main(final String[] argv) {
+ @Override
+ public int run() throws Exception {
final String v = getVersion();
if (v == null) {
System.err.println("fatal: version unavailable");
- System.exit(1);
+ return 1;
}
System.out.println("gerrit version " + v);
+ return 0;
}
}