]> source.dussan.org Git - jgit.git/commitdiff
Detect buffering failures while writing rebase todo file 68/36968/3
authorShawn Pearce <spearce@spearce.org>
Tue, 25 Nov 2014 04:51:07 +0000 (20:51 -0800)
committerShawn Pearce <sop@google.com>
Tue, 25 Nov 2014 19:21:27 +0000 (11:21 -0800)
By routing writes through SafeBufferedOutputStream the caller can be
alerted to any flush at close failures while writing or appending to
the rebase todo script.

Switch the character encoding to be done at the line granularity, as
this is sufficiently long enough that encoding overheads will not be a
bottleneck, but short enough that the amount of temporary data will
not cause memory problems for the JVM.

Change-Id: Ice5ec10a7cbadc58486d481b92940056f9ffc43a

org.eclipse.jgit/src/org/eclipse/jgit/lib/RebaseTodoFile.java

index ef61e220323ff83baeab72b7fdb3416504f1bcbb..4ebe5fedf3ff3d2712a9e98aea8a48da8fa59c41 100644 (file)
 
 package org.eclipse.jgit.lib;
 
-import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
+import java.io.OutputStream;
 import java.util.LinkedList;
 import java.util.List;
 
 import org.eclipse.jgit.lib.RebaseTodoLine.Action;
 import org.eclipse.jgit.util.IO;
 import org.eclipse.jgit.util.RawParseUtils;
+import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
 
 /**
  * Offers methods to read and write files formatted like the git-rebase-todo
@@ -216,9 +216,8 @@ public class RebaseTodoFile {
         */
        public void writeRebaseTodoFile(String path, List<RebaseTodoLine> steps,
                        boolean append) throws IOException {
-               BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(
-                               new FileOutputStream(new File(repo.getDirectory(), path),
-                                               append), Constants.CHARACTER_ENCODING));
+               OutputStream fw = new SafeBufferedOutputStream(new FileOutputStream(
+                               new File(repo.getDirectory(), path), append));
                try {
                        StringBuilder sb = new StringBuilder();
                        for (RebaseTodoLine step : steps) {
@@ -232,8 +231,8 @@ public class RebaseTodoFile {
                                        sb.append(" "); //$NON-NLS-1$
                                        sb.append(step.getShortMessage().trim());
                                }
-                               fw.write(sb.toString());
-                               fw.newLine();
+                               sb.append('\n');
+                               fw.write(Constants.encode(sb.toString()));
                        }
                } finally {
                        fw.close();