diff --git a/src/main/scala/com/chrisomeara/pillar/Registry.scala b/src/main/scala/com/chrisomeara/pillar/Registry.scala index b01e996..4ad9b77 100644 --- a/src/main/scala/com/chrisomeara/pillar/Registry.scala +++ b/src/main/scala/com/chrisomeara/pillar/Registry.scala @@ -31,6 +31,7 @@ object Registry { files .filterNot(file => file.isDirectory) .filter(file => file.exists()) + .filterNot(file => file.isHidden) } private def parseMigrationsInFiles(files: Seq[File]): Seq[Migration] = { @@ -41,6 +42,9 @@ object Registry { val stream = new FileInputStream(file) try { parser.parse(stream) + } catch { + case e: Exception => + throw new RuntimeException(s"Error parsing migration file ${file}: ${e.getMessage}", e) } finally { stream.close() } @@ -51,7 +55,7 @@ object Registry { if (!directory.isDirectory) return List.empty - parseMigrationsInFiles(directory.listFiles()) + parseMigrationsInFiles(filterExisting(directory.listFiles())) } } diff --git a/src/test/resources/pillar/migrations/faker/.a-dotfile b/src/test/resources/pillar/migrations/faker/.a-dotfile new file mode 100644 index 0000000..9ce7649 --- /dev/null +++ b/src/test/resources/pillar/migrations/faker/.a-dotfile @@ -0,0 +1 @@ +garbage diff --git a/src/test/resources/pillar/migrations/garbage.cql b/src/test/resources/pillar/migrations/garbage.cql new file mode 100644 index 0000000..fb19061 --- /dev/null +++ b/src/test/resources/pillar/migrations/garbage.cql @@ -0,0 +1 @@ +ðò?{u*Å? \ No newline at end of file diff --git a/src/test/scala/com/chrisomeara/pillar/RegistrySpec.scala b/src/test/scala/com/chrisomeara/pillar/RegistrySpec.scala index f31f8a0..de668d8 100644 --- a/src/test/scala/com/chrisomeara/pillar/RegistrySpec.scala +++ b/src/test/scala/com/chrisomeara/pillar/RegistrySpec.scala @@ -64,6 +64,15 @@ class RegistrySpec extends FunSpec with BeforeAndAfter with ShouldMatchers with registry.all.size should equal(0) } } + + describe("with a file that contains garbage"){ + it("throws an exception with a meaningful message") { + val exception = intercept[RuntimeException] { + Registry.fromFiles(Seq(new File("src/test/resources/pillar/migrations/garbage.cql"))) + } + exception.getMessage should equal("Error parsing migration file src/test/resources/pillar/migrations/garbage.cql: Input length = 1") + } + } } describe("with a reporter parameter") {