]> source.dussan.org Git - jgit.git/commitdiff
diff, log -p: do not use outs before it is initialized 96/8696/1
authorJonathan Nieder <jrn@google.com>
Wed, 14 Nov 2012 20:14:20 +0000 (12:14 -0800)
committerJonathan Nieder <jrn@google.com>
Wed, 14 Nov 2012 20:14:20 +0000 (12:14 -0800)
Since commit caa362f20df1 (Check for write errors in standard out and
exit with error, 2012-09-14), running "jgit diff" results in a
NullPointerException:

| $ jgit diff
| java.lang.NullPointerException
| at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
| at java.io.BufferedOutputStream.write(BufferedOutputStream.java:126)
| at org.eclipse.jgit.diff.DiffFormatter.format(DiffFormatter.java:688)
| at org.eclipse.jgit.diff.DiffFormatter.format(DiffFormatter.java:630)
| at org.eclipse.jgit.diff.DiffFormatter.format(DiffFormatter.java:616)
| at org.eclipse.jgit.diff.DiffFormatter.format(DiffFormatter.java:600)
| at org.eclipse.jgit.pgm.Diff.run(Diff.java:211)
| at org.eclipse.jgit.pgm.TextBuiltin.execute(TextBuiltin.java:166)
| at org.eclipse.jgit.pgm.Main.execute(Main.java:200)
| at org.eclipse.jgit.pgm.Main.run(Main.java:120)
| at org.eclipse.jgit.pgm.Main.main(Main.java:94)

That patch replaced most uses of System.out with a wrapper, with
changes like the following:

 class Diff extends TextBuiltin {
private final DiffFormatter diffFmt = new DiffFormatter( //
- new BufferedOutputStream(System.out));
+ new BufferedOutputStream(outs));

outs is not set for TextBuiltin objects until init() has been run.
Moving the initialization to after the super.init() call gets
"jgit diff" and "jgit log -p" working well again.

Change-Id: I80fcf259c4fb733990bd16e52bcf94e66d820826

org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java

index 0085888231934d090f068d6029ad419b3e066ba8..465df38407d31d209bd05fd19cc416dd3611cd88 100644 (file)
@@ -64,6 +64,7 @@ import org.eclipse.jgit.diff.RenameDetector;
 import org.eclipse.jgit.dircache.DirCacheIterator;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.lib.TextProgressMonitor;
 import org.eclipse.jgit.pgm.opt.PathTreeFilterHandler;
 import org.eclipse.jgit.treewalk.AbstractTreeIterator;
@@ -76,8 +77,7 @@ import org.kohsuke.args4j.Option;
 
 @Command(common = true, usage = "usage_ShowDiffs")
 class Diff extends TextBuiltin {
-       private final DiffFormatter diffFmt = new DiffFormatter( //
-                       new BufferedOutputStream(outs));
+       private DiffFormatter diffFmt;
 
        @Argument(index = 0, metaVar = "metaVar_treeish")
        private AbstractTreeIterator oldTree;
@@ -167,6 +167,12 @@ class Diff extends TextBuiltin {
 
        // END -- Options shared with Log
 
+       @Override
+       protected void init(final Repository repository, final String gitDir) {
+               super.init(repository, gitDir);
+               diffFmt = new DiffFormatter(new BufferedOutputStream(outs));
+       }
+
        @Override
        protected void run() throws Exception {
                diffFmt.setRepository(db);
index 987021e4f9694091386d9943e5c29b4d3d68e4f7..6ad27ae41afdb432a0a20adb6e4806b06578ec67 100644 (file)
@@ -66,6 +66,7 @@ import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.notes.NoteMap;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevTree;
@@ -79,8 +80,7 @@ class Log extends RevWalkTextBuiltin {
        private GitDateFormatter dateFormatter = new GitDateFormatter(
                        Format.DEFAULT);
 
-       private final DiffFormatter diffFmt = new DiffFormatter( //
-                       new BufferedOutputStream(outs));
+       private DiffFormatter diffFmt;
 
        private Map<AnyObjectId, Set<Ref>> allRefsByPeeledObjectId;
 
@@ -182,6 +182,12 @@ class Log extends RevWalkTextBuiltin {
                dateFormatter = new GitDateFormatter(Format.DEFAULT);
        }
 
+       @Override
+       protected void init(final Repository repository, final String gitDir) {
+               super.init(repository, gitDir);
+               diffFmt = new DiffFormatter(new BufferedOutputStream(outs));
+       }
+
        @Override
        protected void run() throws Exception {
                diffFmt.setRepository(db);