From 34a9e502fc674a0a32e6fdf2cbc888f9d5429f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rton=20Salomv=C3=A1ry?= Date: Thu, 1 Dec 2016 13:34:51 +0100 Subject: [PATCH 1/2] Add path to exceptions thrown when parsing migration files As error handling of the cli consists of printing the message of exceptions populated to the main method, it is important to have useful messages on these exceptions. An example of such an exception is `Source.fromInputStream(resource).getLines()` choking on files that can not be parsed with text encoding (eg. binary swap files saved by Vim) with the following message: "Input length = 1". There is no way to tell what went wrong with which file. This change will turn that useless error into something like this: "Error parsing migration file migrations/.some-migration-file.cql.swp: Input length = 1" Still not perfect but much better than before. --- src/main/scala/com/chrisomeara/pillar/Registry.scala | 3 +++ src/test/resources/pillar/migrations/garbage.cql | 1 + src/test/scala/com/chrisomeara/pillar/RegistrySpec.scala | 9 +++++++++ 3 files changed, 13 insertions(+) create mode 100644 src/test/resources/pillar/migrations/garbage.cql diff --git a/src/main/scala/com/chrisomeara/pillar/Registry.scala b/src/main/scala/com/chrisomeara/pillar/Registry.scala index b01e996..90f42f1 100644 --- a/src/main/scala/com/chrisomeara/pillar/Registry.scala +++ b/src/main/scala/com/chrisomeara/pillar/Registry.scala @@ -41,6 +41,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() } 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") { From 8ed427c1e398902a1a2812d6f632e275eb515f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rton=20Salomv=C3=A1ry?= Date: Thu, 1 Dec 2016 13:50:18 +0100 Subject: [PATCH 2/2] Ignore hidden files in migration folder --- src/main/scala/com/chrisomeara/pillar/Registry.scala | 3 ++- src/test/resources/pillar/migrations/faker/.a-dotfile | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/pillar/migrations/faker/.a-dotfile diff --git a/src/main/scala/com/chrisomeara/pillar/Registry.scala b/src/main/scala/com/chrisomeara/pillar/Registry.scala index 90f42f1..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] = { @@ -54,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