org.eclipse.jgit.revwalk;version="[2.1.0,2.2.0)",
org.eclipse.jgit.storage.file;version="[2.1.0,2.2.0)",
org.eclipse.jgit.util;version="[2.1.0,2.2.0)",
+ org.eclipse.jgit.util.io;version="[2.1.0,2.2.0)",
org.hamcrest.core;bundle-version="[1.1.0,2.0.0)",
org.junit;version="[4.4.0,5.0.0)",
org.kohsuke.args4j;version="[2.0.12,2.1.0)",
*/
package org.eclipse.jgit.pgm;
-import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
clp.parseArgument(argv);
final TextBuiltin cmd = bean.getSubcommand();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ cmd.outs = baos;
if (cmd.requiresRepository())
cmd.init(db, null);
else
cmd.init(null, null);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- cmd.out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
- baos)));
try {
cmd.execute(bean.getArguments().toArray(
new String[bean.getArguments().size()]));
} catch (Die e) {
return IO.readLines(e.getMessage());
} finally {
- if (cmd.out != null)
- cmd.out.flush();
+ if (cmd.outw != null)
+ cmd.outw.flush();
}
return IO.readLines(baos.toString());
}
org.eclipse.jgit.treewalk;version="[2.1.0,2.2.0)",
org.eclipse.jgit.treewalk.filter;version="[2.1.0,2.2.0)",
org.eclipse.jgit.util;version="[2.1.0,2.2.0)",
+ org.eclipse.jgit.util.io;version="[2.1.0,2.2.0)",
org.kohsuke.args4j;version="[2.0.12,2.1.0)",
org.kohsuke.args4j.spi;version="[2.0.12,2.1.0)"
Bundle-ActivationPolicy: lazy
taggerInfo=Tagger: {0} <{1}>
timeInMilliSeconds={0} ms
tooManyRefsGiven=Too many refs given
+unknownIoErrorStdout=An unknown I/O error occurred on standard output
unknownMergeStrategy=unknown merge strategy {0} specified
unmergedPaths=Unmerged paths:
unsupportedOperation=Unsupported operation: {0}
@Option(name = "--verbose", aliases = { "-v" }, usage = "usage_beMoreVerbose")
private boolean verbose;
- protected void showFetchResult(final FetchResult r) {
+ protected void showFetchResult(final FetchResult r) throws IOException {
ObjectReader reader = db.newObjectReader();
try {
boolean shownURI = false;
final String dst = abbreviateRef(u.getLocalName(), true);
if (!shownURI) {
- out.println(MessageFormat.format(CLIText.get().fromURI,
+ outw.println(MessageFormat.format(CLIText.get().fromURI,
r.getURI()));
shownURI = true;
}
- out.format(" %c %-17s %-10s -> %s", type, longType, src, dst);
- out.println();
+ outw.format(" %c %-17s %-10s -> %s", type, longType, src, dst);
+ outw.println();
}
} finally {
reader.release();
int len = c.getContentLength();
final InputStream in = c.getInputStream();
try {
+ outw.flush();
final byte[] tmp = new byte[2048];
while (len > 0) {
final int n = in.read(tmp);
if (n < 0)
throw new EOFException(MessageFormat.format(CLIText.get().expectedNumberOfbytes, len));
- System.out.write(tmp, 0, n);
+ outs.write(tmp, 0, n);
len -= n;
}
+ outs.flush();
} finally {
in.close();
}
} else if ("ls".equals(op) || "list".equals(op)) {
for (final String k : s3.list(bucket, key))
- System.out.println(k);
+ outw.println(k);
} else if ("rm".equals(op) || "delete".equals(op)) {
s3.delete(bucket, key);
authorWidth, dateWidth);
for (int line = begin; line < end; line++) {
- out.print(abbreviate(blame.getSourceCommit(line)));
+ outw.print(abbreviate(blame.getSourceCommit(line)));
if (showSourcePath)
- out.format(pathFmt, path(line));
+ outw.format(pathFmt, path(line));
if (showSourceLine)
- out.format(numFmt, blame.getSourceLine(line) + 1);
+ outw.format(numFmt, blame.getSourceLine(line) + 1);
if (!noAuthor)
- out.format(authorFmt, author(line), date(line));
- out.format(lineFmt, line + 1);
- out.flush();
- blame.getResultContents().writeLine(System.out, line);
- out.print('\n');
+ outw.format(authorFmt, author(line), date(line));
+ outw.format(lineFmt, line + 1);
+ outw.flush();
+ blame.getResultContents().writeLine(outs, line);
+ outs.flush();
+ outw.print('\n');
}
} finally {
generator.release();
private void printHead(final ObjectReader reader, final String ref,
final boolean isCurrent, final Ref refObj) throws Exception {
- out.print(isCurrent ? '*' : ' ');
- out.print(' ');
- out.print(ref);
+ outw.print(isCurrent ? '*' : ' ');
+ outw.print(' ');
+ outw.print(ref);
if (verbose) {
final int spaces = maxNameLength - ref.length() + 1;
- out.format("%" + spaces + "s", "");
+ outw.format("%" + spaces + "s", "");
final ObjectId objectId = refObj.getObjectId();
- out.print(reader.abbreviate(objectId).name());
- out.print(' ');
- out.print(rw.parseCommit(objectId).getShortMessage());
+ outw.print(reader.abbreviate(objectId).name());
+ outw.print(' ');
+ outw.print(rw.parseCommit(objectId).getShortMessage());
}
- out.println();
+ outw.println();
}
private void delete(boolean force) throws IOException {
} else if (result == Result.NEW)
throw die(MessageFormat.format(CLIText.get().branchNotFound, branch));
if (remote)
- out.println(MessageFormat.format(CLIText.get().deletedRemoteBranch, branch));
+ outw.println(MessageFormat.format(CLIText.get().deletedRemoteBranch, branch));
else if (verbose)
- out.println(MessageFormat.format(CLIText.get().deletedBranch, branch));
+ outw.println(MessageFormat.format(CLIText.get().deletedBranch, branch));
}
}
}
/***/ public String taggerInfo;
/***/ public String timeInMilliSeconds;
/***/ public String tooManyRefsGiven;
+ /***/ public char[] unknownIoErrorStdout;
/***/ public String unknownMergeStrategy;
/***/ public String unmergedPaths;
/***/ public String unsupportedOperation;
String oldBranch = db.getBranch();
Ref ref = command.call();
if (Repository.shortenRefName(ref.getName()).equals(oldBranch)) {
- out.println(MessageFormat.format(CLIText.get().alreadyOnBranch,
+ outw.println(MessageFormat.format(
+ CLIText.get().alreadyOnBranch,
name));
return;
}
if (createBranch)
- out.println(MessageFormat.format(
+ outw.println(MessageFormat.format(
CLIText.get().switchedToNewBranch,
Repository.shortenRefName(ref.getName())));
else
- out.println(MessageFormat.format(
+ outw.println(MessageFormat.format(
CLIText.get().switchedToBranch,
Repository.shortenRefName(ref.getName())));
} catch (RefNotFoundException e) {
- out.println(MessageFormat.format(CLIText.get().pathspecDidNotMatch,
+ outw.println(MessageFormat.format(
+ CLIText.get().pathspecDidNotMatch,
name));
} catch (RefAlreadyExistsException e) {
throw die(MessageFormat.format(CLIText.get().branchAlreadyExists,
import org.eclipse.jgit.dircache.DirCacheCheckout;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException;
-import org.eclipse.jgit.errors.NotSupportedException;
-import org.eclipse.jgit.errors.TransportException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefComparator;
dstcfg.save();
db = dst;
- out.print(MessageFormat.format(
+ outw.print(MessageFormat.format(
CLIText.get().initializedEmptyGitRepositoryIn, gitdir));
- out.println();
- out.flush();
+ outw.println();
+ outw.flush();
saveRemote(uri);
final FetchResult r = runFetch();
dstcfg.save();
}
- private FetchResult runFetch() throws NotSupportedException,
- URISyntaxException, TransportException {
+ private FetchResult runFetch() throws URISyntaxException, IOException {
final Transport tn = Transport.open(db, remoteName);
final FetchResult r;
try {
if (branchName.startsWith(Constants.R_HEADS))
branchName = branchName.substring(Constants.R_HEADS.length());
}
- out.println("[" + branchName + " " + commit.name() + "] "
+ outw.println("[" + branchName + " " + commit.name() + "] "
+ commit.getShortMessage());
}
}
Set<String> names = config.getNames(section);
for (String name : names) {
for (String value : config.getStringList(section, null, name))
- out.println(section + "." + name + "=" + value);
+ outw.println(section + "." + name + "=" + value);
}
if (names.isEmpty()) {
for (String subsection : config.getSubsections(section)) {
for (String name : names) {
for (String value : config.getStringList(section,
subsection, name))
- out.println(section + "." + subsection + "."
+ outw.println(section + "." + subsection + "."
+ name + "=" + value);
}
}
final FileResolver<DaemonClient> resolver = new FileResolver<DaemonClient>();
for (final File f : directory) {
- out.println(MessageFormat.format(CLIText.get().exporting, f.getAbsolutePath()));
+ outw.println(MessageFormat.format(CLIText.get().exporting, f.getAbsolutePath()));
resolver.exportDirectory(f);
}
resolver.setExportAll(exportAll);
service(d, n).setOverridable(false);
d.start();
- out.println(MessageFormat.format(CLIText.get().listeningOn, d.getAddress()));
+ outw.println(MessageFormat.format(CLIText.get().listeningOn, d.getAddress()));
}
private DaemonService service(final org.eclipse.jgit.transport.Daemon d,
import static org.eclipse.jgit.lib.Constants.OBJECT_ID_STRING_LENGTH;
import java.io.BufferedOutputStream;
-import java.io.PrintWriter;
+import java.io.IOException;
import java.text.MessageFormat;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.eclipse.jgit.treewalk.CanonicalTreeParser;
import org.eclipse.jgit.treewalk.FileTreeIterator;
import org.eclipse.jgit.treewalk.filter.TreeFilter;
+import org.eclipse.jgit.util.io.ThrowingPrintWriter;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
@Command(common = true, usage = "usage_ShowDiffs")
class Diff extends TextBuiltin {
private final DiffFormatter diffFmt = new DiffFormatter( //
- new BufferedOutputStream(System.out));
+ new BufferedOutputStream(outs));
@Argument(index = 0, metaVar = "metaVar_treeish")
private AbstractTreeIterator oldTree;
}
if (showNameAndStatusOnly) {
- nameStatus(out, diffFmt.scan(oldTree, newTree));
- out.flush();
+ nameStatus(outw, diffFmt.scan(oldTree, newTree));
+ outw.flush();
} else {
diffFmt.format(oldTree, newTree);
}
}
- static void nameStatus(PrintWriter out, List<DiffEntry> files) {
+ static void nameStatus(ThrowingPrintWriter out, List<DiffEntry> files)
+ throws IOException {
for (DiffEntry ent : files) {
switch (ent.getChangeType()) {
case ADD:
final int nTree = walk.getTreeCount();
while (walk.next()) {
for (int i = 1; i < nTree; i++)
- out.print(':');
+ outw.print(':');
for (int i = 0; i < nTree; i++) {
final FileMode m = walk.getFileMode(i);
final String s = m.toString();
for (int pad = 6 - s.length(); pad > 0; pad--)
- out.print('0');
- out.print(s);
- out.print(' ');
+ outw.print('0');
+ outw.print(s);
+ outw.print(' ');
}
for (int i = 0; i < nTree; i++) {
- out.print(walk.getObjectId(i).name());
- out.print(' ');
+ outw.print(walk.getObjectId(i).name());
+ outw.print(' ');
}
char chg = 'M';
else if (m0 != m1 && walk.idEqual(0, 1))
chg = 'T';
}
- out.print(chg);
+ outw.print(chg);
- out.print('\t');
- out.print(walk.getPathString());
- out.println();
+ outw.print('\t');
+ outw.print(walk.getPathString());
+ outw.println();
}
}
}
if (gitdir != null)
command.setDirectory(new File(gitdir));
Repository repository = command.call().getRepository();
- out.println(MessageFormat.format(
+ outw.println(MessageFormat.format(
CLIText.get().initializedEmptyGitRepositoryIn, repository
.getDirectory().getAbsolutePath()));
}
Format.DEFAULT);
private final DiffFormatter diffFmt = new DiffFormatter( //
- new BufferedOutputStream(System.out));
+ new BufferedOutputStream(outs));
private Map<AnyObjectId, Set<Ref>> allRefsByPeeledObjectId;
@Override
protected void show(final RevCommit c) throws Exception {
- out.print(CLIText.get().commitLabel);
- out.print(" ");
- c.getId().copyTo(outbuffer, out);
+ outw.print(CLIText.get().commitLabel);
+ outw.print(" ");
+ c.getId().copyTo(outbuffer, outw);
if (decorate) {
Collection<Ref> list = allRefsByPeeledObjectId.get(c);
if (list != null) {
- out.print(" (");
+ outw.print(" (");
for (Iterator<Ref> i = list.iterator(); i.hasNext(); ) {
- out.print(i.next().getName());
+ outw.print(i.next().getName());
if (i.hasNext())
- out.print(" ");
+ outw.print(" ");
}
- out.print(")");
+ outw.print(")");
}
}
- out.println();
+ outw.println();
final PersonIdent author = c.getAuthorIdent();
- out.println(MessageFormat.format(CLIText.get().authorInfo, author.getName(), author.getEmailAddress()));
- out.println(MessageFormat.format(CLIText.get().dateInfo,
+ outw.println(MessageFormat.format(CLIText.get().authorInfo, author.getName(), author.getEmailAddress()));
+ outw.println(MessageFormat.format(CLIText.get().dateInfo,
dateFormatter.formatDate(author)));
- out.println();
+ outw.println();
final String[] lines = c.getFullMessage().split("\n");
for (final String s : lines) {
- out.print(" ");
- out.print(s);
- out.println();
+ outw.print(" ");
+ outw.print(s);
+ outw.println();
}
- out.println();
+ outw.println();
if (showNotes(c))
- out.println();
+ outw.println();
if (c.getParentCount() == 1 && (showNameAndStatusOnly || showPatch))
showDiff(c);
- out.flush();
+ outw.flush();
}
/**
if (blobId == null)
return false;
if (emptyLine)
- out.println();
- out.print("Notes");
+ outw.println();
+ outw.print("Notes");
if (label != null) {
- out.print(" (");
- out.print(label);
- out.print(")");
+ outw.print(" (");
+ outw.print(label);
+ outw.print(")");
}
- out.println(":");
+ outw.println(":");
try {
RawText rawText = new RawText(argWalk.getObjectReader()
.open(blobId).getCachedBytes(Integer.MAX_VALUE));
for (int i = 0; i < rawText.size(); i++) {
- out.print(" ");
- out.println(rawText.getString(i));
+ outw.print(" ");
+ outw.println(rawText.getString(i));
}
} catch (LargeObjectException e) {
- out.println(MessageFormat.format(
+ outw.println(MessageFormat.format(
CLIText.get().noteObjectTooLargeToPrint, blobId.name()));
}
return true;
final RevTree b = c.getTree();
if (showNameAndStatusOnly)
- Diff.nameStatus(out, diffFmt.scan(a, b));
+ Diff.nameStatus(outw, diffFmt.scan(a, b));
else {
- out.flush();
+ outw.flush();
diffFmt.format(a, b);
diffFmt.flush();
}
- out.println();
+ outw.println();
}
}
package org.eclipse.jgit.pgm;
+import java.io.IOException;
+
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
import org.eclipse.jgit.lib.AnyObjectId;
}
}
- private void show(final AnyObjectId id, final String name) {
- out.print(id.name());
- out.print('\t');
- out.print(name);
- out.println();
+ private void show(final AnyObjectId id, final String name)
+ throws IOException {
+ outw.print(id.name());
+ outw.print('\t');
+ outw.print(name);
+ outw.println();
}
}
while (walk.next()) {
final FileMode mode = walk.getFileMode(0);
if (mode == FileMode.TREE)
- out.print('0');
- out.print(mode);
- out.print(' ');
- out.print(Constants.typeString(mode.getObjectType()));
+ outw.print('0');
+ outw.print(mode);
+ outw.print(' ');
+ outw.print(Constants.typeString(mode.getObjectType()));
- out.print(' ');
- out.print(walk.getObjectId(0).name());
+ outw.print(' ');
+ outw.print(walk.getObjectId(0).name());
- out.print('\t');
- out.print(walk.getPathString());
- out.println();
+ outw.print('\t');
+ outw.print(walk.getPathString());
+ outw.println();
}
}
}
err.printStackTrace();
System.exit(1);
}
+ if (System.out.checkError()) {
+ System.err.println(CLIText.get().unknownIoErrorStdout);
+ System.exit(1);
+ }
+ if (System.err.checkError()) {
+ // No idea how to present an error here, most likely disk full or
+ // broken pipe
+ System.exit(1);
+ }
}
private void execute(final String[] argv) throws Exception {
try {
cmd.execute(arguments.toArray(new String[arguments.size()]));
} finally {
- if (cmd.out != null)
- cmd.out.flush();
+ if (cmd.outw != null)
+ cmd.outw.flush();
}
}
switch (result.getMergeStatus()) {
case ALREADY_UP_TO_DATE:
case FAST_FORWARD:
- out.println(result.getMergeStatus().toString());
+ outw.println(result.getMergeStatus().toString());
break;
case CONFLICTING:
for (String collidingPath : result.getConflicts().keySet())
- out.println(MessageFormat.format(CLIText.get().mergeConflict,
+ outw.println(MessageFormat.format(CLIText.get().mergeConflict,
collidingPath));
- out.println(CLIText.get().mergeFailed);
+ outw.println(CLIText.get().mergeFailed);
break;
case FAILED:
for (Map.Entry<String, MergeFailureReason> entry : result
switch (entry.getValue()) {
case DIRTY_WORKTREE:
case DIRTY_INDEX:
- out.println(CLIText.get().dontOverwriteLocalChanges);
- out.println(" " + entry.getKey());
+ outw.println(CLIText.get().dontOverwriteLocalChanges);
+ outw.println(" " + entry.getKey());
break;
case COULD_NOT_DELETE:
- out.println(CLIText.get().cannotDeleteFile);
- out.println(" " + entry.getKey());
+ outw.println(CLIText.get().cannotDeleteFile);
+ outw.println(" " + entry.getKey());
break;
}
break;
case MERGED:
- out.println(MessageFormat.format(CLIText.get().mergeMadeBy,
+ outw.println(MessageFormat.format(CLIText.get().mergeMadeBy,
mergeStrategy.getName()));
break;
case NOT_SUPPORTED:
- out.println(MessageFormat.format(
+ outw.println(MessageFormat.format(
CLIText.get().unsupportedOperation, result.toString()));
}
}
final RevCommit b = argWalk.next();
if (b == null)
break;
- out.println(b.getId().name());
+ outw.println(b.getId().name());
}
}
}
}
private void printPushResult(final ObjectReader reader, final URIish uri,
- final PushResult result) {
+ final PushResult result) throws IOException {
shownURI = false;
boolean everythingUpToDate = true;
AbstractFetchCommand.showRemoteMessages(result.getMessages());
if (everythingUpToDate)
- out.println(CLIText.get().everythingUpToDate);
+ outw.println(CLIText.get().everythingUpToDate);
}
private void printRefUpdateResult(final ObjectReader reader,
- final URIish uri, final PushResult result, final RemoteRefUpdate rru) {
+ final URIish uri, final PushResult result, final RemoteRefUpdate rru)
+ throws IOException {
if (!shownURI) {
shownURI = true;
- out.println(MessageFormat.format(CLIText.get().pushTo, uri));
+ outw.println(MessageFormat.format(CLIText.get().pushTo, uri));
}
final String remoteName = rru.getRemoteName();
}
private void printUpdateLine(final char flag, final String summary,
- final String srcRef, final String destRef, final String message) {
- out.format(" %c %-17s", flag, summary);
+ final String srcRef, final String destRef, final String message)
+ throws IOException {
+ outw.format(" %c %-17s", flag, summary);
if (srcRef != null)
- out.format(" %s ->", abbreviateRef(srcRef, true));
- out.format(" %s", abbreviateRef(destRef, true));
+ outw.format(" %s ->", abbreviateRef(srcRef, true));
+ outw.format(" %s", abbreviateRef(destRef, true));
if (message != null)
- out.format(" (%s)", message);
+ outw.format(" (%s)", message);
- out.println();
+ outw.println();
}
}
}
rp = new org.eclipse.jgit.transport.ReceivePack(db);
- rp.receive(System.in, System.out, System.err);
+ rp.receive(System.in, outs, System.err);
}
}
@Override
protected void show(final RevCommit c) throws Exception {
if (c.has(RevFlag.UNINTERESTING))
- out.print('-');
- c.getId().copyTo(outbuffer, out);
+ outw.print('-');
+ c.getId().copyTo(outbuffer, outw);
if (parents)
for (int i = 0; i < c.getParentCount(); i++) {
- out.print(' ');
- c.getParent(i).getId().copyTo(outbuffer, out);
+ outw.print(' ');
+ c.getParent(i).getId().copyTo(outbuffer, outw);
}
- out.println();
+ outw.println();
}
@Override
protected void show(final ObjectWalk ow, final RevObject obj)
throws Exception {
if (obj.has(RevFlag.UNINTERESTING))
- out.print('-');
- obj.getId().copyTo(outbuffer, out);
+ outw.print('-');
+ obj.getId().copyTo(outbuffer, outw);
final String path = ow.getPathString();
if (path != null) {
- out.print(' ');
- out.print(path);
+ outw.print(' ');
+ outw.print(path);
} else if (obj instanceof RevTree)
- out.print(' ');
- out.println();
+ outw.print(' ');
+ outw.println();
}
}
if (all) {
Map<String, Ref> allRefs = db.getAllRefs();
for (final Ref r : allRefs.values())
- out.println(r.getObjectId().name());
+ outw.println(r.getObjectId().name());
} else {
for (final ObjectId o : commits)
- out.println(o.name());
+ outw.println(o.name());
}
}
}
break;
case Constants.OBJ_TREE:
- out.print("tree ");
- out.print(objectName);
- out.println();
- out.println();
+ outw.print("tree ");
+ outw.print(objectName);
+ outw.println();
+ outw.println();
show((RevTree) obj);
break;
case Constants.OBJ_BLOB:
db.open(obj, obj.getType()).copyTo(System.out);
- System.out.flush();
+ outw.flush();
break;
default:
}
}
- private void show(RevTag tag) {
- out.print(CLIText.get().tagLabel);
- out.print(" ");
- out.print(tag.getTagName());
- out.println();
+ private void show(RevTag tag) throws IOException {
+ outw.print(CLIText.get().tagLabel);
+ outw.print(" ");
+ outw.print(tag.getTagName());
+ outw.println();
final PersonIdent tagger = tag.getTaggerIdent();
if (tagger != null) {
- out.println(MessageFormat.format(CLIText.get().taggerInfo,
+ outw.println(MessageFormat.format(CLIText.get().taggerInfo,
tagger.getName(), tagger.getEmailAddress()));
final TimeZone taggerTZ = tagger.getTimeZone();
fmt.setTimeZone(taggerTZ != null ? taggerTZ : myTZ);
- out.println(MessageFormat.format(CLIText.get().dateInfo,
+ outw.println(MessageFormat.format(CLIText.get().dateInfo,
fmt.format(tagger.getWhen())));
}
- out.println();
+ outw.println();
final String[] lines = tag.getFullMessage().split("\n");
for (final String s : lines) {
- out.print(" ");
- out.print(s);
- out.println();
+ outw.print(" ");
+ outw.print(s);
+ outw.println();
}
- out.println();
+ outw.println();
}
private void show(RevTree obj) throws MissingObjectException,
walk.addTree(obj);
while (walk.next()) {
- out.print(walk.getPathString());
+ outw.print(walk.getPathString());
final FileMode mode = walk.getFileMode(0);
if (mode == FileMode.TREE)
- out.print('/');
- out.println();
+ outw.print("/");
+ outw.println();
}
}
private void show(RevWalk rw, final RevCommit c) throws Exception {
char[] outbuffer = new char[Constants.OBJECT_ID_LENGTH * 2];
- out.print(CLIText.get().commitLabel);
- out.print(" ");
- c.getId().copyTo(outbuffer, out);
- out.println();
+ outw.print(CLIText.get().commitLabel);
+ outw.print(" ");
+ c.getId().copyTo(outbuffer, outw);
+ outw.println();
final PersonIdent author = c.getAuthorIdent();
- out.println(MessageFormat.format(CLIText.get().authorInfo,
+ outw.println(MessageFormat.format(CLIText.get().authorInfo,
author.getName(), author.getEmailAddress()));
final TimeZone authorTZ = author.getTimeZone();
fmt.setTimeZone(authorTZ != null ? authorTZ : myTZ);
- out.println(MessageFormat.format(CLIText.get().dateInfo,
+ outw.println(MessageFormat.format(CLIText.get().dateInfo,
fmt.format(author.getWhen())));
- out.println();
+ outw.println();
final String[] lines = c.getFullMessage().split("\n");
for (final String s : lines) {
- out.print(" ");
- out.print(s);
- out.println();
+ outw.print(" ");
+ outw.print(s);
+ outw.println();
}
- out.println();
+ outw.println();
if (c.getParentCount() == 1) {
rw.parseHeaders(c.getParent(0));
showDiff(c);
}
- out.flush();
+ outw.flush();
}
private void showDiff(RevCommit c) throws IOException {
final RevTree b = c.getTree();
if (showNameAndStatusOnly)
- Diff.nameStatus(out, diffFmt.scan(a, b));
+ Diff.nameStatus(outw, diffFmt.scan(a, b));
else {
- out.flush();
+ outw.flush();
diffFmt.format(a, b);
diffFmt.flush();
}
- out.println();
+ outw.println();
}
}
package org.eclipse.jgit.pgm;
+import java.io.IOException;
import java.util.Map;
import java.util.SortedMap;
return RefComparator.sort(all.values());
}
- private void show(final AnyObjectId id, final String name) {
- out.print(id.name());
- out.print('\t');
- out.print(name);
- out.println();
+ private void show(final AnyObjectId id, final String name)
+ throws IOException {
+ outw.print(id.name());
+ outw.print('\t');
+ outw.print(name);
+ outw.println();
}
}
ListTagCommand command = git.tagList();
List<Ref> list = command.call();
for (Ref ref : list) {
- out.println(Repository.shortenRefName(ref.getName()));
+ outw.println(Repository.shortenRefName(ref.getName()));
}
}
}
import static org.eclipse.jgit.lib.Constants.R_TAGS;
import java.io.BufferedWriter;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.text.MessageFormat;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.pgm.opt.CmdLineParser;
import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.util.io.ThrowingPrintWriter;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.Option;
@Option(name = "--help", usage = "usage_displayThisHelpText", aliases = { "-h" })
private boolean help;
+ /** Writer to output to, typically this is standard output. */
+ protected ThrowingPrintWriter outw;
+
/** Stream to output to, typically this is standard output. */
+ protected OutputStream outs;
+
+ /**
+ * Stream to output to, typically this is standard output.
+ *
+ * @deprecated Use outw instead
+ */
protected PrintWriter out;
/** Git repository the command was invoked within. */
final String outputEncoding = repository != null ? repository
.getConfig()
.getString("i18n", null, "logOutputEncoding") : null;
+ if (outs == null)
+ outs = new FileOutputStream(FileDescriptor.out);
+ BufferedWriter bufw;
if (outputEncoding != null)
- out = new PrintWriter(new BufferedWriter(
- new OutputStreamWriter(System.out, outputEncoding)));
+ bufw = new BufferedWriter(new OutputStreamWriter(outs,
+ outputEncoding));
else
- out = new PrintWriter(new BufferedWriter(
- new OutputStreamWriter(System.out)));
+ bufw = new BufferedWriter(new OutputStreamWriter(outs));
+ out = new PrintWriter(bufw);
+ outw = new ThrowingPrintWriter(bufw);
} catch (IOException e) {
throw die(CLIText.get().cannotCreateOutputStream);
}
up = new org.eclipse.jgit.transport.UploadPack(db);
if (0 <= timeout)
up.setTimeout(timeout);
- up.upload(System.in, System.out, System.err);
+ up.upload(System.in, outs, System.err);
}
}
if (pkg == null || pkg.getImplementationVersion() == null)
throw die(CLIText.get().cannotReadPackageInformation);
- out.println(MessageFormat.format(CLIText.get().jgitVersion, pkg.getImplementationVersion()));
+ outw.println(MessageFormat.format(CLIText.get().jgitVersion, pkg.getImplementationVersion()));
}
@Override
File parent = db.getDirectory().getParentFile();
if (name.equals(Constants.DOT_GIT) && parent != null)
name = parent.getName();
- out.println(name + ": start at " + startId.name());
+ outw.println(name + ": start at " + startId.name());
}
- out.format(" %12d files, %8d commits\n", files, commits);
- out.format(" N=%10d min lines, %8d max lines\n", minN, maxN);
+ outw.format(" %12d files, %8d commits\n", files, commits);
+ outw.format(" N=%10d min lines, %8d max lines\n", minN, maxN);
- out.format("%-25s %12s ( %12s %12s )\n", //
+ outw.format("%-25s %12s ( %12s %12s )\n", //
"Algorithm", "Time(ns)", "Time(ns) on", "Time(ns) on");
- out.format("%-25s %12s ( %12s %12s )\n", //
+ outw.format("%-25s %12s ( %12s %12s )\n", //
"", "", "N=" + minN, "N=" + maxN);
- out.println("-----------------------------------------------------"
+ outw.println("-----------------------------------------------------"
+ "----------------");
for (Test test : all) {
- out.format("%-25s %12d ( %12d %12d )", //
+ outw.format("%-25s %12d ( %12d %12d )", //
test.algorithm.name, //
test.runningTimeNanos, //
test.minN.runningTimeNanos, //
test.maxN.runningTimeNanos);
- out.println();
+ outw.println();
}
- out.println();
- out.flush();
+ outw.println();
+ outw.flush();
}
private static boolean isFile(TreeWalk tw, int ithTree) {
package org.eclipse.jgit.pgm.debug;
+import java.io.IOException;
import java.text.MessageFormat;
import org.eclipse.jgit.dircache.DirCache;
show(tree);
}
- private void show(final DirCacheTree tree) {
- out.println(MessageFormat.format(CLIText.get().cacheTreePathInfo
+ private void show(final DirCacheTree tree) throws IOException {
+ outw.println(MessageFormat.format(CLIText.get().cacheTreePathInfo
, tree.getPathString(), tree.getEntrySpan(), tree.getChildCount()));
for (int i = 0; i < tree.getChildCount(); i++)
for (int i = 0; i < cnt; i++)
db.readDirCache();
final long end = System.currentTimeMillis();
- out.print(" ");
- out.println(MessageFormat.format(CLIText.get().averageMSPerRead, (end - start) / cnt));
+ outw.print(" ");
+ outw.println(MessageFormat.format(CLIText.get().averageMSPerRead, (end - start) / cnt));
}
}
package org.eclipse.jgit.pgm.debug;
+import java.io.IOException;
import java.text.MessageFormat;
import org.eclipse.jgit.dircache.DirCache;
show(tree);
}
- private void show(final DirCacheTree tree) {
- out.println(MessageFormat.format(CLIText.get().cacheTreePathInfo
+ private void show(final DirCacheTree tree) throws IOException {
+ outw.println(MessageFormat.format(CLIText.get().cacheTreePathInfo
, tree.getPathString(), tree.getEntrySpan(), tree.getChildCount()));
for (int i = 0; i < tree.getChildCount(); i++)
final Date mtime = new Date(ent.getLastModified());
final int stage = ent.getStage();
- out.print(mode);
- out.format(" %6d", len);
- out.print(' ');
- out.print(fmt.format(mtime));
- out.print(' ');
- out.print(ent.getObjectId().name());
- out.print(' ');
- out.print(stage);
- out.print('\t');
- out.print(ent.getPathString());
- out.println();
+ outw.print(mode);
+ outw.format(" %6d", len);
+ outw.print(' ');
+ outw.print(fmt.format(mtime));
+ outw.print(' ');
+ outw.print(ent.getObjectId().name());
+ outw.print(' ');
+ outw.print(stage);
+ outw.print('\t');
+ outw.print(ent.getPathString());
+ outw.println();
}
}
}
throw die("Object " + obj.name() + " is not a delta");
}
- out.println(BinaryDelta.format(delta));
+ outw.println(BinaryDelta.format(delta));
}
private byte[] getDelta(ObjectReader reader, RevObject obj)
File parent = db.getDirectory().getParentFile();
if (name.equals(Constants.DOT_GIT) && parent != null)
name = parent.getName();
- out.println(name + ":");
+ outw.println(name + ":");
}
- out.format(" %6d files; %5d avg. unique lines/file\n", //
+ outw.format(" %6d files; %5d avg. unique lines/file\n", //
fileCnt, //
lineCnt / fileCnt);
- out.format("%-20s %-15s %9s\n", "Hash", "Fold", "Max Len");
- out.println("-----------------------------------------------");
+ outw.format("%-20s %-15s %9s\n", "Hash", "Fold", "Max Len");
+ outw.println("-----------------------------------------------");
String lastHashName = null;
for (Function fun : all) {
String hashName = fun.hash.name;
if (hashName.equals(lastHashName))
hashName = "";
- out.format("%-20s %-15s %9d\n", //
+ outw.format("%-20s %-15s %9d\n", //
hashName, //
fun.fold.name, //
fun.maxChainLength);
lastHashName = fun.hash.name;
}
- out.println();
- out.flush();
+ outw.println();
+ outw.flush();
}
private void testOne(Function fun, RawText txt, int[] elements, int cnt) {
lf.unlock();
}
} else {
- log.writeTo(System.out);
- System.out.flush();
+ log.writeTo(outs);
+ outs.flush();
}
}
}
--- /dev/null
+/*
+ * Copyright (C) 2012, Robin Rosenberg <robin.rosenberg@dewire.com>
+ * and other copyright owners as documented in the project's IP log.
+ *
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Distribution License v1.0 which
+ * accompanies this distribution, is reproduced below, and is
+ * available at http://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Eclipse Foundation, Inc. nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.eclipse.jgit.util.io;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+import org.eclipse.jgit.util.SystemReader;
+
+/**
+ * An alternative PrintWriter that doesn't catch exceptions.
+ */
+public class ThrowingPrintWriter extends Writer {
+
+ private final Writer out;
+
+ private final String LF;
+
+ /**
+ * Construct a JGitPrintWriter
+ *
+ * @param out
+ * the underlying {@link Writer}
+ */
+ public ThrowingPrintWriter(Writer out) {
+ this.out = out;
+ LF = AccessController.doPrivileged(new PrivilegedAction<String>() {
+ public String run() {
+ return SystemReader.getInstance().getProperty("line.separator");
+ }
+ });
+ }
+
+ @Override
+ public void write(char[] cbuf, int off, int len) throws IOException {
+ out.write(cbuf, off, len);
+ }
+
+ @Override
+ public void flush() throws IOException {
+ out.flush();
+ }
+
+ @Override
+ public void close() throws IOException {
+ out.close();
+ }
+
+ /**
+ * Print a string and terminate with a line feed.
+ *
+ * @param s
+ * @throws IOException
+ */
+ public void println(String s) throws IOException {
+ print(s + LF);
+ }
+
+ /**
+ * Print a platform dependent new line
+ *
+ * @throws IOException
+ */
+ public void println() throws IOException {
+ print(LF);
+ }
+
+ /**
+ * Print a char
+ *
+ * @param value
+ * @throws IOException
+ */
+ public void print(char value) throws IOException {
+ print(String.valueOf(value));
+ }
+
+ /**
+ * Print an int as string
+ *
+ * @param value
+ * @throws IOException
+ */
+ public void print(int value) throws IOException {
+ print(String.valueOf(value));
+ }
+
+ /**
+ * Print a long as string
+ *
+ * @param value
+ * @throws IOException
+ */
+ public void print(long value) throws IOException {
+ print(String.valueOf(value));
+ }
+
+ /**
+ * Print a short as string
+ *
+ * @param value
+ * @throws IOException
+ */
+ public void print(short value) throws IOException {
+ print(String.valueOf(value));
+ }
+
+ /**
+ * Print a formatted message according to
+ * {@link String#format(String, Object...)}.
+ *
+ * @param fmt
+ * @param args
+ * @throws IOException
+ */
+ public void format(String fmt, Object... args) throws IOException {
+ print(String.format(fmt, args));
+ }
+
+ /**
+ * Print an object's toString representations
+ *
+ * @param any
+ * @throws IOException
+ */
+ public void print(Object any) throws IOException {
+ out.write(String.valueOf(any));
+ }
+}