diff options
author | Jan Christopher Vogt <oss.nsp@cvogt.org> | 2016-06-23 22:20:09 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-23 22:20:09 -0400 |
commit | 7291a83f1e5fbcf8ee9c824b9b309130253e6673 (patch) | |
tree | c2dd99ebc5e61a22d4d05743b772dab3d7fb74fb /stage2 | |
parent | 2cbc42fd0809b60b1ee2116657d18b3f44f8aef1 (diff) | |
download | cbt-7291a83f1e5fbcf8ee9c824b9b309130253e6673.tar.gz cbt-7291a83f1e5fbcf8ee9c824b9b309130253e6673.tar.bz2 cbt-7291a83f1e5fbcf8ee9c824b9b309130253e6673.zip |
close jar file in case of exception (#175)
Diffstat (limited to 'stage2')
-rw-r--r-- | stage2/Lib.scala | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/stage2/Lib.scala b/stage2/Lib.scala index c08657f..8dd6e72 100644 --- a/stage2/Lib.scala +++ b/stage2/Lib.scala @@ -223,29 +223,31 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{ val manifest = new Manifest manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0") val jar = new JarOutputStream(new FileOutputStream(jarFile.toString), manifest) + try{ + val names = for { + base <- files.filter(_.exists).map(realpath) + file <- listFilesRecursive(base) if file.isFile + } yield { + val name = if(base.isDirectory){ + file.toString stripPrefix (base.toString ++ File.separator) + } else file.toString + val entry = new JarEntry( name ) + entry.setTime(file.lastModified) + jar.putNextEntry(entry) + jar.write( readAllBytes( file.toPath ) ) + jar.closeEntry + name + } - val names = for { - base <- files.filter(_.exists).map(realpath) - file <- listFilesRecursive(base) if file.isFile - } yield { - val name = if(base.isDirectory){ - file.toString stripPrefix (base.toString ++ File.separator) - } else file.toString - val entry = new JarEntry( name ) - entry.setTime(file.lastModified) - jar.putNextEntry(entry) - jar.write( readAllBytes( file.toPath ) ) - jar.closeEntry - name + val duplicateFiles = (names diff names.distinct).distinct + assert( + duplicateFiles.isEmpty, + s"Conflicting file names when trying to create $jarFile: "++duplicateFiles.mkString(", ") + ) + } finally { + jar.close } - val duplicateFiles = (names diff names.distinct).distinct - assert( - duplicateFiles.isEmpty, - s"Conflicting file names when trying to create $jarFile: "++duplicateFiles.mkString(", ") - ) - - jar.close logger.lib("Done packaging " ++ jarFile.toString) Some(jarFile) |