From b34ea11720eca6d6523e7948a929693146640daf Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Mon, 24 Nov 2014 20:51:07 -0800 Subject: Detect buffering failures while writing rebase todo file 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 --- .../src/org/eclipse/jgit/lib/RebaseTodoFile.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RebaseTodoFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RebaseTodoFile.java index ef61e22032..4ebe5fedf3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RebaseTodoFile.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RebaseTodoFile.java @@ -43,17 +43,17 @@ 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 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(); -- cgit v1.2.3 From 98c75a7ca2218208dc7951ec2bf3cf352fb3d6df Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Mon, 24 Nov 2014 21:06:30 -0800 Subject: Fix two nits about DirCacheEntry constructors Explicitly pass STAGE_0 when creating a DirCacheEntry from String. This matches the immediate next constructor that accepts the int stage argument better, making the code easier to read. Fix a weird line break where the comma was orphaned by itself. Change-Id: Icf0970dd02a63877f9e41b51b982b0265e8b8887 --- org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java index 65188c8f43..458cd98e4b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java @@ -203,7 +203,6 @@ public class DirCacheEntry { if (mightBeRacilyClean(smudge_s, smudge_ns)) smudgeRacilyClean(); - } /** @@ -217,7 +216,7 @@ public class DirCacheEntry { * or DirCache file. */ public DirCacheEntry(final String newPath) { - this(Constants.encode(newPath)); + this(Constants.encode(newPath), STAGE_0); } /** @@ -269,8 +268,9 @@ public class DirCacheEntry { if (!isValidPath(newPath)) throw new InvalidPathException(toString(newPath)); if (stage < 0 || 3 < stage) - throw new IllegalArgumentException(MessageFormat.format(JGitText.get().invalidStageForPath - , stage, toString(newPath))); + throw new IllegalArgumentException(MessageFormat.format( + JGitText.get().invalidStageForPath, + stage, toString(newPath))); info = new byte[INFO_LEN]; infoOffset = 0; -- cgit v1.2.3