{"thread":{"id":"20537","subject":"[JGIT PATCH] Improve error handling for writing FETCH_HEAD","startedAt":"2009-08-11T05:48:06Z","lastAt":"2009-08-11T05:48:06Z","messageCount":1,"participants":["Robin Rosenberg"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"120269","messageId":"1249969686-11232-1-git-send-email-robin.rosenberg@dewire.com","threadId":"20537","inReplyTo":null,"subject":"[JGIT PATCH] Improve error handling for writing FETCH_HEAD","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg@gmail.com","sentAt":"2009-08-11T05:48:06Z","receivedAt":"2009-08-11T05:48:06Z","isPatch":true,"sender":{"key":"robin.rosenberg@gmail.com","avatar":null},"body":"PrintWriter hides error handling from us and we want it. We\nalso want \\n as line terminator so Writer is just as simple. Try-\nfinally blocks added for cleanup on failure.\n\nSigned-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n .../spearce/jgit/transport/FetchHeadRecord.java    |   25 +++++++++---------\n .../org/spearce/jgit/transport/FetchProcess.java   |   27 ++++++++++---------\n 2 files changed, 27 insertions(+), 25 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/FetchHeadRecord.java b/org.spearce.jgit/src/org/spearce/jgit/transport/FetchHeadRecord.java\nindex d957028..62ec38a 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/transport/FetchHeadRecord.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/FetchHeadRecord.java\n@@ -41,7 +41,8 @@\n import static org.spearce.jgit.lib.Constants.R_REMOTES;\n import static org.spearce.jgit.lib.Constants.R_TAGS;\n \n-import java.io.PrintWriter;\n+import java.io.IOException;\n+import java.io.Writer;\n \n import org.spearce.jgit.lib.ObjectId;\n \n@@ -54,7 +55,7 @@\n \n \tURIish sourceURI;\n \n-\tvoid write(final PrintWriter pw) {\n+\tvoid write(final Writer pw) throws IOException {\n \t\tfinal String type;\n \t\tfinal String name;\n \t\tif (sourceName.startsWith(R_HEADS)) {\n@@ -71,16 +72,16 @@ void write(final PrintWriter pw) {\n \t\t\tname = sourceName;\n \t\t}\n \n-\t\tpw.print(newValue.name());\n-\t\tpw.print('\\t');\n+\t\tpw.write(newValue.name());\n+\t\tpw.write('\\t');\n \t\tif (notForMerge)\n-\t\t\tpw.print(\"not-for-merge\");\n-\t\tpw.print('\\t');\n-\t\tpw.print(type);\n-\t\tpw.print(\" '\");\n-\t\tpw.print(name);\n-\t\tpw.print(\"' of \");\n-\t\tpw.print(sourceURI);\n-\t\tpw.println();\n+\t\t\tpw.write(\"not-for-merge\");\n+\t\tpw.write('\\t');\n+\t\tpw.write(type);\n+\t\tpw.write(\" '\");\n+\t\tpw.write(name);\n+\t\tpw.write(\"' of \");\n+\t\tpw.write(sourceURI.toString());\n+\t\tpw.write(\"\\n\");\n \t}\n }\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/FetchProcess.java b/org.spearce.jgit/src/org/spearce/jgit/transport/FetchProcess.java\nindex 08d7d65..c899c8c 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/transport/FetchProcess.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/FetchProcess.java\n@@ -41,7 +41,7 @@\n import java.io.File;\n import java.io.IOException;\n import java.io.OutputStreamWriter;\n-import java.io.PrintWriter;\n+import java.io.Writer;\n import java.util.ArrayList;\n import java.util.Collection;\n import java.util.Collections;\n@@ -264,20 +264,21 @@ private void removeFetchHeadRecord(final ObjectId want) {\n \tprivate void updateFETCH_HEAD(final FetchResult result) throws IOException {\n \t\tfinal LockFile lock = new LockFile(new File(transport.local\n \t\t\t\t.getDirectory(), \"FETCH_HEAD\"));\n-\t\tif (lock.lock()) {\n-\t\t\tfinal PrintWriter pw = new PrintWriter(new OutputStreamWriter(lock\n-\t\t\t\t\t.getOutputStream())) {\n-\t\t\t\t@Override\n-\t\t\t\tpublic void println() {\n-\t\t\t\t\tprint('\\n');\n+\t\ttry {\n+\t\t\tif (lock.lock()) {\n+\t\t\t\tfinal Writer w = new OutputStreamWriter(lock.getOutputStream());\n+\t\t\t\ttry {\n+\t\t\t\t\tfor (final FetchHeadRecord h : fetchHeadUpdates) {\n+\t\t\t\t\t\th.write(w);\n+\t\t\t\t\t\tresult.add(h);\n+\t\t\t\t\t}\n+\t\t\t\t} finally {\n+\t\t\t\t\tw.close();\n \t\t\t\t}\n-\t\t\t};\n-\t\t\tfor (final FetchHeadRecord h : fetchHeadUpdates) {\n-\t\t\t\th.write(pw);\n-\t\t\t\tresult.add(h);\n+\t\t\t\tlock.commit();\n \t\t\t}\n-\t\t\tpw.close();\n-\t\t\tlock.commit();\n+\t\t} finally {\n+\t\t\tlock.unlock();\n \t\t}\n \t}\n \n-- \n1.6.3.2.199.g7340d\n"}]}