From 0c8714abe5c3333407960b89aedaa2c4273eb29b Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Tue, 2 Dec 2008 22:41:28 +0100 Subject: [PATCH] Improve closing of files in error situations. Signed-off-by: Robin Rosenberg Signed-off-by: Shawn O. Pearce --- .../exttst/org/spearce/jgit/lib/SpeedTestBase.java | 12 ++++++--- .../dircache/DirCacheCGitCompatabilityTest.java | 24 +++++++++++------ .../org/spearce/jgit/lib/RepositoryTestCase.java | 27 ++++++++++++------- .../src/org/spearce/jgit/lib/GitIndex.java | 2 +- .../src/org/spearce/jgit/lib/Repository.java | 31 ++++++++++++++-------- 5 files changed, 63 insertions(+), 33 deletions(-) diff --git a/org.spearce.jgit.test/exttst/org/spearce/jgit/lib/SpeedTestBase.java b/org.spearce.jgit.test/exttst/org/spearce/jgit/lib/SpeedTestBase.java index 11f74396..36a5e0e6 100644 --- a/org.spearce.jgit.test/exttst/org/spearce/jgit/lib/SpeedTestBase.java +++ b/org.spearce.jgit.test/exttst/org/spearce/jgit/lib/SpeedTestBase.java @@ -72,10 +72,14 @@ public abstract class SpeedTestBase extends TestCase { protected void prepare(String[] refcmd) throws Exception { try { BufferedReader bufferedReader = new BufferedReader(new FileReader("kernel.ref")); - kernelrepo = bufferedReader.readLine(); - bufferedReader.close(); - timeNativeGit(kernelrepo, refcmd); - nativeTime = timeNativeGit(kernelrepo, refcmd); + try { + kernelrepo = bufferedReader.readLine(); + bufferedReader.close(); + timeNativeGit(kernelrepo, refcmd); + nativeTime = timeNativeGit(kernelrepo, refcmd); + } finally { + bufferedReader.close(); + } } catch (Exception e) { System.out.println("Create a file named kernel.ref and put the path to the Linux kernels repository there"); throw e; diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/dircache/DirCacheCGitCompatabilityTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/dircache/DirCacheCGitCompatabilityTest.java index b0526862..42832fed 100644 --- a/org.spearce.jgit.test/tst/org/spearce/jgit/dircache/DirCacheCGitCompatabilityTest.java +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/dircache/DirCacheCGitCompatabilityTest.java @@ -146,10 +146,14 @@ public class DirCacheCGitCompatabilityTest extends RepositoryTestCase { final LinkedHashMap r = new LinkedHashMap(); final BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(pathOf("gitgit.lsfiles")), "UTF-8")); - String line; - while ((line = br.readLine()) != null) { - final CGitIndexRecord cr = new CGitIndexRecord(line); - r.put(cr.path, cr); + try { + String line; + while ((line = br.readLine()) != null) { + final CGitIndexRecord cr = new CGitIndexRecord(line); + r.put(cr.path, cr); + } + } finally { + br.close(); } return r; } @@ -158,10 +162,14 @@ public class DirCacheCGitCompatabilityTest extends RepositoryTestCase { final LinkedHashMap r = new LinkedHashMap(); final BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(pathOf("gitgit.lstree")), "UTF-8")); - String line; - while ((line = br.readLine()) != null) { - final CGitLsTreeRecord cr = new CGitLsTreeRecord(line); - r.put(cr.path, cr); + try { + String line; + while ((line = br.readLine()) != null) { + final CGitLsTreeRecord cr = new CGitLsTreeRecord(line); + r.put(cr.path, cr); + } + } finally { + br.close(); } return r; } diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java index 22bf3955..8937145b 100644 --- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java @@ -152,14 +152,20 @@ public abstract class RepositoryTestCase extends TestCase { protected static void copyFile(final File src, final File dst) throws IOException { final FileInputStream fis = new FileInputStream(src); - final FileOutputStream fos = new FileOutputStream(dst); - final byte[] buf = new byte[4096]; - int r; - while ((r = fis.read(buf)) > 0) { - fos.write(buf, 0, r); + try { + final FileOutputStream fos = new FileOutputStream(dst); + try { + final byte[] buf = new byte[4096]; + int r; + while ((r = fis.read(buf)) > 0) { + fos.write(buf, 0, r); + } + } finally { + fos.close(); + } + } finally { + fis.close(); } - fis.close(); - fos.close(); } protected File writeTrashFile(final String name, final String data) @@ -170,8 +176,11 @@ public abstract class RepositoryTestCase extends TestCase { throw new Error("Could not create directory " + tf.getParentFile()); final OutputStreamWriter fw = new OutputStreamWriter( new FileOutputStream(tf), "UTF-8"); - fw.write(data); - fw.close(); + try { + fw.write(data); + } finally { + fw.close(); + } return tf; } diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/GitIndex.java b/org.spearce.jgit/src/org/spearce/jgit/lib/GitIndex.java index bafddef3..7ff67540 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/GitIndex.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/GitIndex.java @@ -547,8 +547,8 @@ public class GitIndex { try { InputStream is = new FileInputStream(file); - ObjectWriter objectWriter = new ObjectWriter(db); try { + ObjectWriter objectWriter = new ObjectWriter(db); ObjectId newId = objectWriter.computeBlobSha1(file .length(), is); boolean ret = !newId.equals(sha1); diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java index b54afd58..da1494f8 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java @@ -144,10 +144,13 @@ public class Repository { final File altFile = FS.resolve(objectsDir, "info/alternates"); if (altFile.exists()) { BufferedReader ar = new BufferedReader(new FileReader(altFile)); - for (String alt=ar.readLine(); alt!=null; alt=ar.readLine()) { - readObjectsDirs(FS.resolve(objectsDir, alt), ret); + try { + for (String alt=ar.readLine(); alt!=null; alt=ar.readLine()) { + readObjectsDirs(FS.resolve(objectsDir, alt), ret); + } + } catch (Exception e) { + ar.close(); } - ar.close(); } return ret; } @@ -1027,15 +1030,21 @@ public class Repository { if (isStGitMode()) { File patchDir = new File(new File(getDirectory(),"patches"),getBranch()); BufferedReader apr = new BufferedReader(new FileReader(new File(patchDir,"applied"))); - for (String patchName=apr.readLine(); patchName!=null; patchName=apr.readLine()) { - File topFile = new File(new File(new File(patchDir,"patches"), patchName), "top"); - BufferedReader tfr = new BufferedReader(new FileReader(topFile)); - String objectId = tfr.readLine(); - ObjectId id = ObjectId.fromString(objectId); - ret.put(id, new StGitPatch(patchName, id)); - tfr.close(); + try { + for (String patchName=apr.readLine(); patchName!=null; patchName=apr.readLine()) { + File topFile = new File(new File(new File(patchDir,"patches"), patchName), "top"); + BufferedReader tfr = new BufferedReader(new FileReader(topFile)); + try { + String objectId = tfr.readLine(); + ObjectId id = ObjectId.fromString(objectId); + ret.put(id, new StGitPatch(patchName, id)); + } finally { + tfr.close(); + } + } + } finally { + apr.close(); } - apr.close(); } return ret; } -- 2.11.4.GIT