changeset 814:44bf3a609d67

use BufferedInputStream, added TODO
author eugene.petrenko@jetbrains.com
date Fri, 30 May 2014 10:51:57 +0200
parents 1dadfa948844
children f77739de2133
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java
diffstat 1 files changed, 15 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Fri May 30 10:48:43 2014 +0200
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Fri May 30 10:51:57 2014 +0200
@@ -450,25 +450,29 @@
                                      @NotNull final File archive,
                                      @NotNull final CheckoutRules checkoutRules,
                                      @NotNull final FileFilter filter) throws IOException {
-    FileInputStream fis = new FileInputStream(archive);
+    InputStream fis = null;
     ArchiveInputStream is = null;
     try {
+      fis = new BufferedInputStream(new FileInputStream(archive));
       is = new TarArchiveInputStream(fis);
-      ArchiveEntry entry = null;
+
+      ArchiveEntry entry;
       while ((entry = is.getNextEntry()) != null) {
+        if (entry.isDirectory()) continue;
+
         String fileName = entry.getName();
-        if (fileName.startsWith("arch/"))
-          fileName = fileName.substring(5);
-        if (!filter.accept(new File(fileName)))
-          continue;
-        String mappedFile = checkoutRules.map(fileName);
-        if (!StringUtil.isEmpty(mappedFile))
+        //TODO: does it work if I have arch/ in my repo?
+        if (fileName.startsWith("arch/")) fileName = fileName.substring(5);
+
+        if (!filter.accept(new File(fileName))) continue;
+
+        final String mappedFile = checkoutRules.map(fileName);
+        if (!StringUtil.isEmpty(mappedFile)) {
           builder.createBinaryFile(new File(mappedFile), null, is, entry.getSize());
+        }
       }
     } finally {
-      fis.close();
-      if (is != null)
-        is.close();
+      FileUtil.closeAll(is, fis);
     }
   }