# HG changeset patch # User eugene.petrenko@jetbrains.com # Date 1401439917 -7200 # Node ID 44bf3a609d67c0f9d63c5b22d93738edff5e7c87 # Parent 1dadfa94884433541e8e11d8a7c47c2b65e60956 use BufferedInputStream, added TODO diff -r 1dadfa948844 -r 44bf3a609d67 mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java --- 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); } }