Browse Source

Add an input stream and an error stream to TextBuiltin base class

Leverage these streams to remove calls to System.in and System.err

Bug: 413522
Change-Id: I8396f3e273c93e23861e8bcfb2ab8182fb09220d
Signed-off-by: Guillaume Nodet <gnodet@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-3.4
Guillaume Nodet 11 years ago committed by Matthias Sohn
parent
commit
c0574fe680
  1. 7
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java
  2. 2
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AmazonS3Client.java
  3. 2
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/IndexPack.java
  4. 2
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java
  5. 2
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ReceivePack.java
  6. 7
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java
  7. 78
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java
  8. 2
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java
  9. 4
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java
  10. 34
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCommands.java

7
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java

@ -50,7 +50,6 @@ package org.eclipse.jgit.pgm;
import static java.lang.Character.valueOf; import static java.lang.Character.valueOf;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.text.MessageFormat; import java.text.MessageFormat;
import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Constants;
@ -60,6 +59,7 @@ import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.pgm.internal.CLIText; import org.eclipse.jgit.pgm.internal.CLIText;
import org.eclipse.jgit.transport.FetchResult; import org.eclipse.jgit.transport.FetchResult;
import org.eclipse.jgit.transport.TrackingRefUpdate; import org.eclipse.jgit.transport.TrackingRefUpdate;
import org.eclipse.jgit.util.io.ThrowingPrintWriter;
import org.kohsuke.args4j.Option; import org.kohsuke.args4j.Option;
abstract class AbstractFetchCommand extends TextBuiltin { abstract class AbstractFetchCommand extends TextBuiltin {
@ -92,11 +92,10 @@ abstract class AbstractFetchCommand extends TextBuiltin {
} finally { } finally {
reader.release(); reader.release();
} }
showRemoteMessages(r.getMessages()); showRemoteMessages(errw, r.getMessages());
} }
static void showRemoteMessages(String pkt) { static void showRemoteMessages(ThrowingPrintWriter writer, String pkt) throws IOException {
PrintWriter writer = new PrintWriter(System.err);
while (0 < pkt.length()) { while (0 < pkt.length()) {
final int lf = pkt.indexOf('\n'); final int lf = pkt.indexOf('\n');
final int cr = pkt.indexOf('\r'); final int cr = pkt.indexOf('\r');

2
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AmazonS3Client.java

@ -116,7 +116,7 @@ class AmazonS3Client extends TextBuiltin {
final OutputStream os = s3.beginPut(bucket, key, null, null); final OutputStream os = s3.beginPut(bucket, key, null, null);
final byte[] tmp = new byte[2048]; final byte[] tmp = new byte[2048];
int n; int n;
while ((n = System.in.read(tmp)) > 0) while ((n = ins.read(tmp)) > 0)
os.write(tmp, 0, n); os.write(tmp, 0, n);
os.close(); os.close();

2
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/IndexPack.java

@ -62,7 +62,7 @@ class IndexPack extends TextBuiltin {
@Override @Override
protected void run() throws Exception { protected void run() throws Exception {
BufferedInputStream in = new BufferedInputStream(System.in); BufferedInputStream in = new BufferedInputStream(ins);
ObjectInserter inserter = db.newObjectInserter(); ObjectInserter inserter = db.newObjectInserter();
try { try {
PackParser p = inserter.newPackParser(in); PackParser p = inserter.newPackParser(in);

2
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java

@ -161,7 +161,7 @@ class Push extends TextBuiltin {
printRefUpdateResult(reader, uri, result, rru); printRefUpdateResult(reader, uri, result, rru);
} }
AbstractFetchCommand.showRemoteMessages(result.getMessages()); AbstractFetchCommand.showRemoteMessages(errw, result.getMessages());
if (everythingUpToDate) if (everythingUpToDate)
outw.println(CLIText.get().everythingUpToDate); outw.println(CLIText.get().everythingUpToDate);
} }

2
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ReceivePack.java

@ -76,6 +76,6 @@ class ReceivePack extends TextBuiltin {
} }
rp = new org.eclipse.jgit.transport.ReceivePack(db); rp = new org.eclipse.jgit.transport.ReceivePack(db);
rp.receive(System.in, outs, System.err); rp.receive(ins, outs, errs);
} }
} }

7
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java

@ -199,10 +199,9 @@ abstract class RevWalkTextBuiltin extends TextBuiltin {
final int n = walkLoop(); final int n = walkLoop();
if (count) { if (count) {
final long end = System.currentTimeMillis(); final long end = System.currentTimeMillis();
System.err.print(n); errw.print(n);
System.err.print(' '); errw.print(' ');
System.err errw.println(MessageFormat.format(
.println(MessageFormat.format(
CLIText.get().timeInMilliSeconds, CLIText.get().timeInMilliSeconds,
Long.valueOf(end - start))); Long.valueOf(end - start)));
} }

78
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java

@ -50,8 +50,10 @@ import static org.eclipse.jgit.lib.Constants.R_TAGS;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.PrintWriter; import java.io.PrintWriter;
@ -84,6 +86,13 @@ public abstract class TextBuiltin {
@Option(name = "--help", usage = "usage_displayThisHelpText", aliases = { "-h" }) @Option(name = "--help", usage = "usage_displayThisHelpText", aliases = { "-h" })
private boolean help; private boolean help;
/**
* Input stream, typically this is standard input.
*
* @since 3.4
*/
protected InputStream ins;
/** /**
* Writer to output to, typically this is standard output. * Writer to output to, typically this is standard output.
* *
@ -106,6 +115,20 @@ public abstract class TextBuiltin {
@Deprecated @Deprecated
protected PrintWriter out; protected PrintWriter out;
/**
* Error writer, typically this is standard error.
*
* @since 3.4
*/
protected ThrowingPrintWriter errw;
/**
* Error output stream, typically this is standard error.
*
* @since 3.4
*/
protected OutputStream errs;
/** Git repository the command was invoked within. */ /** Git repository the command was invoked within. */
protected Repository db; protected Repository db;
@ -137,16 +160,27 @@ public abstract class TextBuiltin {
try { try {
final String outputEncoding = repository != null ? repository final String outputEncoding = repository != null ? repository
.getConfig().getString("i18n", null, "logOutputEncoding") : null; //$NON-NLS-1$ //$NON-NLS-2$ .getConfig().getString("i18n", null, "logOutputEncoding") : null; //$NON-NLS-1$ //$NON-NLS-2$
if (ins == null)
ins = new FileInputStream(FileDescriptor.in);
if (outs == null) if (outs == null)
outs = new FileOutputStream(FileDescriptor.out); outs = new FileOutputStream(FileDescriptor.out);
BufferedWriter bufw; if (errs == null)
errs = new FileOutputStream(FileDescriptor.err);
BufferedWriter outbufw;
if (outputEncoding != null)
outbufw = new BufferedWriter(new OutputStreamWriter(outs,
outputEncoding));
else
outbufw = new BufferedWriter(new OutputStreamWriter(outs));
out = new PrintWriter(outbufw);
outw = new ThrowingPrintWriter(outbufw);
BufferedWriter errbufw;
if (outputEncoding != null) if (outputEncoding != null)
bufw = new BufferedWriter(new OutputStreamWriter(outs, errbufw = new BufferedWriter(new OutputStreamWriter(errs,
outputEncoding)); outputEncoding));
else else
bufw = new BufferedWriter(new OutputStreamWriter(outs)); errbufw = new BufferedWriter(new OutputStreamWriter(errs));
out = new PrintWriter(bufw); errw = new ThrowingPrintWriter(errbufw);
outw = new ThrowingPrintWriter(bufw);
} catch (IOException e) { } catch (IOException e) {
throw die(CLIText.get().cannotCreateOutputStream); throw die(CLIText.get().cannotCreateOutputStream);
} }
@ -184,14 +218,15 @@ public abstract class TextBuiltin {
* *
* @param args * @param args
* the arguments supplied on the command line, if any. * the arguments supplied on the command line, if any.
* @throws IOException
*/ */
protected void parseArguments(final String[] args) { protected void parseArguments(final String[] args) throws IOException {
final CmdLineParser clp = new CmdLineParser(this); final CmdLineParser clp = new CmdLineParser(this);
try { try {
clp.parseArgument(args); clp.parseArgument(args);
} catch (CmdLineException err) { } catch (CmdLineException err) {
if (!help) { if (!help) {
System.err.println(MessageFormat.format(CLIText.get().fatalError, err.getMessage())); this.errw.println(MessageFormat.format(CLIText.get().fatalError, err.getMessage()));
System.exit(1); System.exit(1);
} }
} }
@ -207,8 +242,9 @@ public abstract class TextBuiltin {
* Print the usage line * Print the usage line
* *
* @param clp * @param clp
* @throws IOException
*/ */
public void printUsageAndExit(final CmdLineParser clp) { public void printUsageAndExit(final CmdLineParser clp) throws IOException {
printUsageAndExit("", clp); //$NON-NLS-1$ printUsageAndExit("", clp); //$NON-NLS-1$
} }
@ -217,20 +253,20 @@ public abstract class TextBuiltin {
* *
* @param message * @param message
* @param clp * @param clp
* @throws IOException
*/ */
public void printUsageAndExit(final String message, final CmdLineParser clp) { public void printUsageAndExit(final String message, final CmdLineParser clp) throws IOException {
PrintWriter writer = new PrintWriter(System.err); errw.println(message);
writer.println(message); errw.print("jgit "); //$NON-NLS-1$
writer.print("jgit "); //$NON-NLS-1$ errw.print(commandName);
writer.print(commandName); clp.printSingleLineUsage(errw, getResourceBundle());
clp.printSingleLineUsage(writer, getResourceBundle()); errw.println();
writer.println();
errw.println();
writer.println(); clp.printUsage(errw, getResourceBundle());
clp.printUsage(writer, getResourceBundle()); errw.println();
writer.println();
errw.flush();
writer.flush();
System.exit(1); System.exit(1);
} }

2
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java

@ -82,6 +82,6 @@ class UploadPack extends TextBuiltin {
up = new org.eclipse.jgit.transport.UploadPack(db); up = new org.eclipse.jgit.transport.UploadPack(db);
if (0 <= timeout) if (0 <= timeout)
up.setTimeout(timeout); up.setTimeout(timeout);
up.upload(System.in, outs, System.err); up.upload(ins, outs, errs);
} }
} }

4
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java

@ -117,7 +117,7 @@ class RebuildCommitGraph extends TextBuiltin {
@Override @Override
protected void run() throws Exception { protected void run() throws Exception {
if (!really && !db.getRefDatabase().getRefs(ALL).isEmpty()) { if (!really && !db.getRefDatabase().getRefs(ALL).isEmpty()) {
System.err.println( errw.println(
MessageFormat.format(CLIText.get().fatalThisProgramWillDestroyTheRepository MessageFormat.format(CLIText.get().fatalThisProgramWillDestroyTheRepository
, db.getDirectory().getAbsolutePath(), REALLY)); , db.getDirectory().getAbsolutePath(), REALLY));
throw die(CLIText.get().needApprovalToDestroyCurrentRepository); throw die(CLIText.get().needApprovalToDestroyCurrentRepository);
@ -294,7 +294,7 @@ class RebuildCommitGraph extends TextBuiltin {
rw.parseAny(id); rw.parseAny(id);
} catch (MissingObjectException mue) { } catch (MissingObjectException mue) {
if (!Constants.TYPE_COMMIT.equals(type)) { if (!Constants.TYPE_COMMIT.equals(type)) {
System.err.println(MessageFormat.format(CLIText.get().skippingObject, type, name)); errw.println(MessageFormat.format(CLIText.get().skippingObject, type, name));
continue; continue;
} }
throw new MissingObjectException(id, type); throw new MissingObjectException(id, type);

34
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCommands.java

@ -43,14 +43,16 @@
package org.eclipse.jgit.pgm.debug; package org.eclipse.jgit.pgm.debug;
import java.io.IOException;
import java.net.URL; import java.net.URL;
import org.kohsuke.args4j.Option;
import org.eclipse.jgit.pgm.Command; import org.eclipse.jgit.pgm.Command;
import org.eclipse.jgit.pgm.CommandCatalog; import org.eclipse.jgit.pgm.CommandCatalog;
import org.eclipse.jgit.pgm.CommandRef; import org.eclipse.jgit.pgm.CommandRef;
import org.eclipse.jgit.pgm.TextBuiltin; import org.eclipse.jgit.pgm.TextBuiltin;
import org.eclipse.jgit.pgm.internal.CLIText; import org.eclipse.jgit.pgm.internal.CLIText;
import org.eclipse.jgit.util.io.ThrowingPrintWriter;
import org.kohsuke.args4j.Option;
@Command(usage = "usage_displayAListOfAllRegisteredJgitCommands") @Command(usage = "usage_displayAListOfAllRegisteredJgitCommands")
class ShowCommands extends TextBuiltin { class ShowCommands extends TextBuiltin {
@ -67,39 +69,39 @@ class ShowCommands extends TextBuiltin {
width += 2; width += 2;
for (final CommandRef c : list) { for (final CommandRef c : list) {
System.err.print(c.isCommon() ? '*' : ' '); errw.print(c.isCommon() ? '*' : ' ');
System.err.print(' '); errw.print(' ');
System.err.print(c.getName()); errw.print(c.getName());
for (int i = c.getName().length(); i < width; i++) for (int i = c.getName().length(); i < width; i++)
System.err.print(' '); errw.print(' ');
pretty.print(c); pretty.print(errw, c);
System.err.println(); errw.println();
} }
System.err.println(); errw.println();
} }
static enum Format { static enum Format {
/** */ /** */
USAGE { USAGE {
void print(final CommandRef c) { void print(ThrowingPrintWriter err, final CommandRef c) throws IOException {
String usage = c.getUsage(); String usage = c.getUsage();
if (usage != null && usage.length() > 0) if (usage != null && usage.length() > 0)
System.err.print(CLIText.get().resourceBundle().getString(usage)); err.print(CLIText.get().resourceBundle().getString(usage));
} }
}, },
/** */ /** */
CLASSES { CLASSES {
void print(final CommandRef c) { void print(ThrowingPrintWriter err, final CommandRef c) throws IOException {
System.err.print(c.getImplementationClassName()); err.print(c.getImplementationClassName());
} }
}, },
/** */ /** */
URLS { URLS {
void print(final CommandRef c) { void print(ThrowingPrintWriter err, final CommandRef c) throws IOException {
final ClassLoader ldr = c.getImplementationClassLoader(); final ClassLoader ldr = c.getImplementationClassLoader();
String cn = c.getImplementationClassName(); String cn = c.getImplementationClassName();
@ -107,7 +109,7 @@ class ShowCommands extends TextBuiltin {
final URL url = ldr.getResource(cn); final URL url = ldr.getResource(cn);
if (url == null) { if (url == null) {
System.err.print(CLIText.get().notFound); err.print(CLIText.get().notFound);
return; return;
} }
@ -115,10 +117,10 @@ class ShowCommands extends TextBuiltin {
if (rn.endsWith(cn)) if (rn.endsWith(cn))
rn = rn.substring(0, rn.length() - cn.length()); rn = rn.substring(0, rn.length() - cn.length());
System.err.print(rn); err.print(rn);
} }
}; };
abstract void print(CommandRef c); abstract void print(ThrowingPrintWriter err, CommandRef c) throws IOException;
} }
} }

Loading…
Cancel
Save