Преглед изворни кода

Merge pull request #40 from overleaf/msw-delete-temp-files

Small code improvements around temporary files
Michael Walker пре 8 година
родитељ
комит
e81931ef35

+ 19 - 0
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/DeletingFileInputStream.java

@@ -38,4 +38,23 @@ public class DeletingFileInputStream extends FileInputStream {
             }
         }
     }
+
+    /**
+     * We shouldn't rely on this for correctness!
+     */
+    @Override
+    protected void finalize() throws IOException {
+        try {
+            super.finalize();
+        } finally {
+            if(file != null) {
+                Log.warn("File open at finalization time: {}", file.getCanonicalPath());
+                try {
+                    close();
+                } catch (IOException e) {
+                    Log.error("Failed to delete file", e);
+                }
+            }
+        }
+    }
 }

+ 7 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java

@@ -42,6 +42,9 @@ public class Tar {
             /* Closes target */
             try (OutputStream bzip2 = new BZip2CompressorOutputStream(target)) {
                 tarTo(fileOrDir, bzip2);
+            } catch (IOException e) {
+                tmp.delete();
+                throw e;
             }
             if (sizePtr != null) {
                 sizePtr[0] = tmp.length();
@@ -68,7 +71,10 @@ public class Tar {
         tmp.deleteOnExit();
         try (FileOutputStream target = new FileOutputStream(tmp)) {
             tarTo(fileOrDir, target);
-            return new FileInputStream(tmp);
+            return new DeletingFileInputStream(tmp);
+        } catch (IOException e) {
+            tmp.delete();
+            throw e;
         }
     }