diff options
author | Shawn O. Pearce <sop@google.com> | 2009-06-08 08:47:54 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2009-06-08 08:47:54 -0700 |
commit | 3fb51eefe5a78d81a8badd7e3956457929ab8162 (patch) | |
tree | 05370b1da1d1c2dfa6cff6069b56b9c8fc479ac3 | |
parent | 66eb36819e2d26575a9c8425f7bfabbc5326bb29 (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.xml | 2 | ||||
-rw-r--r-- | src/main/java/com/google/gerrit/pgm/AbstractProgram.java | 94 | ||||
-rw-r--r-- | src/main/java/com/google/gerrit/pgm/ConvertSystemConfig.java | 9 | ||||
-rw-r--r-- | src/main/java/com/google/gerrit/pgm/CreateSchema.java | 19 | ||||
-rw-r--r-- | src/main/java/com/google/gerrit/pgm/Daemon.java | 11 | ||||
-rw-r--r-- | src/main/java/com/google/gerrit/pgm/ReimportPatchSets.java | 21 | ||||
-rw-r--r-- | src/main/java/com/google/gerrit/pgm/Version.java | 8 |
7 files changed, 118 insertions, 46 deletions
@@ -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; } } |