embulk 0.7.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +18 -0
  5. data/COPYING +14 -0
  6. data/Gemfile +2 -0
  7. data/Gemfile.lock +31 -0
  8. data/README.md +206 -0
  9. data/Rakefile +26 -0
  10. data/appveyor.yml +20 -0
  11. data/bin/embulk +106 -0
  12. data/build.gradle +338 -0
  13. data/embulk-cli/build.gradle +6 -0
  14. data/embulk-cli/src/main/java/org/embulk/cli/Main.java +22 -0
  15. data/embulk-cli/src/main/sh/selfrun.sh +158 -0
  16. data/embulk-cli/src/test/java/org/embulk/cli/DummyMain.java +23 -0
  17. data/embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java +281 -0
  18. data/embulk-core/build.gradle +59 -0
  19. data/embulk-core/src/main/java/org/embulk/EmbulkEmbed.java +315 -0
  20. data/embulk-core/src/main/java/org/embulk/EmbulkService.java +76 -0
  21. data/embulk-core/src/main/java/org/embulk/command/PreviewPrinter.java +84 -0
  22. data/embulk-core/src/main/java/org/embulk/command/TablePreviewPrinter.java +107 -0
  23. data/embulk-core/src/main/java/org/embulk/command/VerticalPreviewPrinter.java +47 -0
  24. data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +33 -0
  25. data/embulk-core/src/main/java/org/embulk/config/Config.java +15 -0
  26. data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +15 -0
  27. data/embulk-core/src/main/java/org/embulk/config/ConfigDiff.java +29 -0
  28. data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
  29. data/embulk-core/src/main/java/org/embulk/config/ConfigInject.java +14 -0
  30. data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +141 -0
  31. data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +31 -0
  32. data/embulk-core/src/main/java/org/embulk/config/DataSource.java +39 -0
  33. data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +231 -0
  34. data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +84 -0
  35. data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +20 -0
  36. data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +123 -0
  37. data/embulk-core/src/main/java/org/embulk/config/Task.java +10 -0
  38. data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +180 -0
  39. data/embulk-core/src/main/java/org/embulk/config/TaskReport.java +29 -0
  40. data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +345 -0
  41. data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +31 -0
  42. data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +38 -0
  43. data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
  44. data/embulk-core/src/main/java/org/embulk/exec/BulkLoader.java +652 -0
  45. data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +52 -0
  46. data/embulk-core/src/main/java/org/embulk/exec/ExecutionInterruptedException.java +10 -0
  47. data/embulk-core/src/main/java/org/embulk/exec/ExecutionResult.java +26 -0
  48. data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
  49. data/embulk-core/src/main/java/org/embulk/exec/ForGuess.java +16 -0
  50. data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +16 -0
  51. data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +373 -0
  52. data/embulk-core/src/main/java/org/embulk/exec/LocalExecutorPlugin.java +129 -0
  53. data/embulk-core/src/main/java/org/embulk/exec/LocalThreadExecutor.java +34 -0
  54. data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +60 -0
  55. data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
  56. data/embulk-core/src/main/java/org/embulk/exec/PartialExecutionException.java +18 -0
  57. data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +77 -0
  58. data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +183 -0
  59. data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +27 -0
  60. data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +17 -0
  61. data/embulk-core/src/main/java/org/embulk/exec/ResumeState.java +100 -0
  62. data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +136 -0
  63. data/embulk-core/src/main/java/org/embulk/exec/SetCurrentThreadName.java +19 -0
  64. data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
  65. data/embulk-core/src/main/java/org/embulk/exec/TempFileAllocator.java +35 -0
  66. data/embulk-core/src/main/java/org/embulk/guice/Bootstrap.java +157 -0
  67. data/embulk-core/src/main/java/org/embulk/guice/CloseableInjector.java +22 -0
  68. data/embulk-core/src/main/java/org/embulk/guice/InjectorProxy.java +145 -0
  69. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjector.java +26 -0
  70. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjectorProxy.java +61 -0
  71. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleManager.java +187 -0
  72. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethods.java +89 -0
  73. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethodsMap.java +38 -0
  74. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleModule.java +97 -0
  75. data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +72 -0
  76. data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +119 -0
  77. data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +17 -0
  78. data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +96 -0
  79. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java +168 -0
  80. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderFactory.java +9 -0
  81. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderModule.java +71 -0
  82. data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +78 -0
  83. data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +6 -0
  84. data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +19 -0
  85. data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +47 -0
  86. data/embulk-core/src/main/java/org/embulk/plugin/compat/InputPluginWrapper.java +102 -0
  87. data/embulk-core/src/main/java/org/embulk/plugin/compat/PluginWrappers.java +30 -0
  88. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileInputWrapper.java +96 -0
  89. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileOutputWrapper.java +102 -0
  90. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalPageOutputWrapper.java +95 -0
  91. data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +148 -0
  92. data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +8 -0
  93. data/embulk-core/src/main/java/org/embulk/spi/Column.java +92 -0
  94. data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +112 -0
  95. data/embulk-core/src/main/java/org/embulk/spi/ColumnVisitor.java +14 -0
  96. data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +16 -0
  97. data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +16 -0
  98. data/embulk-core/src/main/java/org/embulk/spi/Exec.java +113 -0
  99. data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +6 -0
  100. data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +217 -0
  101. data/embulk-core/src/main/java/org/embulk/spi/ExecutorPlugin.java +19 -0
  102. data/embulk-core/src/main/java/org/embulk/spi/Extension.java +44 -0
  103. data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +11 -0
  104. data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +30 -0
  105. data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +162 -0
  106. data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +13 -0
  107. data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +28 -0
  108. data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +202 -0
  109. data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +18 -0
  110. data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +18 -0
  111. data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +9 -0
  112. data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +33 -0
  113. data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +29 -0
  114. data/embulk-core/src/main/java/org/embulk/spi/Page.java +51 -0
  115. data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +338 -0
  116. data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +47 -0
  117. data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +11 -0
  118. data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +226 -0
  119. data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
  120. data/embulk-core/src/main/java/org/embulk/spi/ProcessState.java +10 -0
  121. data/embulk-core/src/main/java/org/embulk/spi/ProcessTask.java +117 -0
  122. data/embulk-core/src/main/java/org/embulk/spi/Schema.java +134 -0
  123. data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +93 -0
  124. data/embulk-core/src/main/java/org/embulk/spi/SchemaConfigException.java +22 -0
  125. data/embulk-core/src/main/java/org/embulk/spi/TaskState.java +81 -0
  126. data/embulk-core/src/main/java/org/embulk/spi/TempFileException.java +19 -0
  127. data/embulk-core/src/main/java/org/embulk/spi/TempFileSpace.java +87 -0
  128. data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +10 -0
  129. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +17 -0
  130. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +19 -0
  131. data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +17 -0
  132. data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +55 -0
  133. data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelper.java +8 -0
  134. data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelperFactory.java +6 -0
  135. data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +159 -0
  136. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +100 -0
  137. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +97 -0
  138. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +10 -0
  139. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +104 -0
  140. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +49 -0
  141. data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +58 -0
  142. data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +12 -0
  143. data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +12 -0
  144. data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +12 -0
  145. data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +12 -0
  146. data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +41 -0
  147. data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +15 -0
  148. data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +44 -0
  149. data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
  150. data/embulk-core/src/main/java/org/embulk/spi/unit/ByteSize.java +156 -0
  151. data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFile.java +106 -0
  152. data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFileSerDe.java +113 -0
  153. data/embulk-core/src/main/java/org/embulk/spi/unit/ToString.java +54 -0
  154. data/embulk-core/src/main/java/org/embulk/spi/unit/ToStringMap.java +34 -0
  155. data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +55 -0
  156. data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +81 -0
  157. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnNotFoundException.java +10 -0
  158. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetter.java +18 -0
  159. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetterFactory.java +94 -0
  160. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicPageBuilder.java +161 -0
  161. data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +81 -0
  162. data/embulk-core/src/main/java/org/embulk/spi/util/Executors.java +95 -0
  163. data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +111 -0
  164. data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +119 -0
  165. data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +100 -0
  166. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +190 -0
  167. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +25 -0
  168. data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +65 -0
  169. data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +118 -0
  170. data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +123 -0
  171. data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +52 -0
  172. data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +38 -0
  173. data/embulk-core/src/main/java/org/embulk/spi/util/OutputStreamFileOutput.java +88 -0
  174. data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +102 -0
  175. data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +139 -0
  176. data/embulk-core/src/main/java/org/embulk/spi/util/ResumableInputStream.java +128 -0
  177. data/embulk-core/src/main/java/org/embulk/spi/util/RetryExecutor.java +130 -0
  178. data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +53 -0
  179. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/AbstractDynamicColumnSetter.java +79 -0
  180. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/BooleanColumnSetter.java +64 -0
  181. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DefaultValueSetter.java +18 -0
  182. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DoubleColumnSetter.java +61 -0
  183. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/LongColumnSetter.java +69 -0
  184. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/NullDefaultValueSetter.java +34 -0
  185. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/SkipColumnSetter.java +52 -0
  186. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/StringColumnSetter.java +56 -0
  187. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/TimestampColumnSetter.java +64 -0
  188. data/embulk-core/src/main/resources/embulk/logback-color.xml +72 -0
  189. data/embulk-core/src/main/resources/embulk/logback-console.xml +14 -0
  190. data/embulk-core/src/main/resources/embulk/logback-file.xml +25 -0
  191. data/embulk-core/src/main/resources/embulk/parent_first_packages.properties +70 -0
  192. data/embulk-core/src/main/resources/embulk/parent_first_resources.properties +28 -0
  193. data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +114 -0
  194. data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +72 -0
  195. data/embulk-core/src/test/java/org/embulk/RandomManager.java +53 -0
  196. data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +23 -0
  197. data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +17 -0
  198. data/embulk-core/src/test/java/org/embulk/config/TestConfigLoader.java +66 -0
  199. data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +114 -0
  200. data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +70 -0
  201. data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +58 -0
  202. data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +18 -0
  203. data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +63 -0
  204. data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +101 -0
  205. data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +73 -0
  206. data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +57 -0
  207. data/embulk-core/src/test/java/org/embulk/spi/TestBuffer.java +24 -0
  208. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +89 -0
  209. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +196 -0
  210. data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +207 -0
  211. data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +188 -0
  212. data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +319 -0
  213. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +116 -0
  214. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +63 -0
  215. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParserDeprecated.java +67 -0
  216. data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
  217. data/embulk-core/src/test/java/org/embulk/spi/unit/TestByteSize.java +79 -0
  218. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +132 -0
  219. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +123 -0
  220. data/embulk-docs/Makefile +178 -0
  221. data/embulk-docs/build.gradle +32 -0
  222. data/embulk-docs/make.bat +243 -0
  223. data/embulk-docs/push-gh-pages.sh +49 -0
  224. data/embulk-docs/src/_static/embulk-architecture.png +0 -0
  225. data/embulk-docs/src/_static/embulk-logo.png +0 -0
  226. data/embulk-docs/src/_static/embulk-logo.svg +133 -0
  227. data/embulk-docs/src/built-in.rst +440 -0
  228. data/embulk-docs/src/conf.py +260 -0
  229. data/embulk-docs/src/customization.rst +184 -0
  230. data/embulk-docs/src/index.rst +84 -0
  231. data/embulk-docs/src/recipe.rst +8 -0
  232. data/embulk-docs/src/recipe/scheduled-csv-load-to-elasticsearch-kibana4.rst +153 -0
  233. data/embulk-docs/src/release.rst +57 -0
  234. data/embulk-docs/src/release/release-0.1.0.rst +8 -0
  235. data/embulk-docs/src/release/release-0.2.0.rst +16 -0
  236. data/embulk-docs/src/release/release-0.2.1.rst +19 -0
  237. data/embulk-docs/src/release/release-0.3.0.rst +34 -0
  238. data/embulk-docs/src/release/release-0.3.1.rst +11 -0
  239. data/embulk-docs/src/release/release-0.3.2.rst +15 -0
  240. data/embulk-docs/src/release/release-0.4.0.rst +74 -0
  241. data/embulk-docs/src/release/release-0.4.1.rst +18 -0
  242. data/embulk-docs/src/release/release-0.4.10.rst +17 -0
  243. data/embulk-docs/src/release/release-0.4.2.rst +18 -0
  244. data/embulk-docs/src/release/release-0.4.3.rst +34 -0
  245. data/embulk-docs/src/release/release-0.4.4.rst +39 -0
  246. data/embulk-docs/src/release/release-0.4.5.rst +24 -0
  247. data/embulk-docs/src/release/release-0.4.6.rst +30 -0
  248. data/embulk-docs/src/release/release-0.4.7.rst +16 -0
  249. data/embulk-docs/src/release/release-0.4.8.rst +15 -0
  250. data/embulk-docs/src/release/release-0.4.9.rst +23 -0
  251. data/embulk-docs/src/release/release-0.5.0.rst +89 -0
  252. data/embulk-docs/src/release/release-0.5.1.rst +13 -0
  253. data/embulk-docs/src/release/release-0.5.2.rst +30 -0
  254. data/embulk-docs/src/release/release-0.5.3.rst +22 -0
  255. data/embulk-docs/src/release/release-0.5.4.rst +24 -0
  256. data/embulk-docs/src/release/release-0.5.5.rst +18 -0
  257. data/embulk-docs/src/release/release-0.6.0.rst +34 -0
  258. data/embulk-docs/src/release/release-0.6.1.rst +11 -0
  259. data/embulk-docs/src/release/release-0.6.10.rst +15 -0
  260. data/embulk-docs/src/release/release-0.6.11.rst +19 -0
  261. data/embulk-docs/src/release/release-0.6.12.rst +31 -0
  262. data/embulk-docs/src/release/release-0.6.13.rst +23 -0
  263. data/embulk-docs/src/release/release-0.6.14.rst +47 -0
  264. data/embulk-docs/src/release/release-0.6.15.rst +26 -0
  265. data/embulk-docs/src/release/release-0.6.16.rst +26 -0
  266. data/embulk-docs/src/release/release-0.6.17.rst +39 -0
  267. data/embulk-docs/src/release/release-0.6.18.rst +14 -0
  268. data/embulk-docs/src/release/release-0.6.19.rst +18 -0
  269. data/embulk-docs/src/release/release-0.6.2.rst +17 -0
  270. data/embulk-docs/src/release/release-0.6.20.rst +19 -0
  271. data/embulk-docs/src/release/release-0.6.21.rst +20 -0
  272. data/embulk-docs/src/release/release-0.6.22.rst +26 -0
  273. data/embulk-docs/src/release/release-0.6.23.rst +17 -0
  274. data/embulk-docs/src/release/release-0.6.24.rst +13 -0
  275. data/embulk-docs/src/release/release-0.6.25.rst +12 -0
  276. data/embulk-docs/src/release/release-0.6.3.rst +23 -0
  277. data/embulk-docs/src/release/release-0.6.4.rst +13 -0
  278. data/embulk-docs/src/release/release-0.6.5.rst +17 -0
  279. data/embulk-docs/src/release/release-0.6.6.rst +17 -0
  280. data/embulk-docs/src/release/release-0.6.7.rst +17 -0
  281. data/embulk-docs/src/release/release-0.6.8.rst +24 -0
  282. data/embulk-docs/src/release/release-0.6.9.rst +24 -0
  283. data/embulk-docs/src/release/release-0.7.0.rst +96 -0
  284. data/embulk-standards/build.gradle +5 -0
  285. data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +284 -0
  286. data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +379 -0
  287. data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +411 -0
  288. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +55 -0
  289. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +71 -0
  290. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +203 -0
  291. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +148 -0
  292. data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +59 -0
  293. data/embulk-standards/src/main/java/org/embulk/standards/RenameFilterPlugin.java +56 -0
  294. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +16 -0
  295. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +53 -0
  296. data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +85 -0
  297. data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +1 -0
  298. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvFormatterPlugin.java +312 -0
  299. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +75 -0
  300. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +360 -0
  301. data/embulk-standards/src/test/java/org/embulk/standards/TestRenameFilterPlugin.java +88 -0
  302. data/embulk.gemspec +39 -0
  303. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  304. data/gradle/wrapper/gradle-wrapper.properties +6 -0
  305. data/gradlew +164 -0
  306. data/gradlew.bat +90 -0
  307. data/lib/embulk.rb +72 -0
  308. data/lib/embulk/buffer.rb +22 -0
  309. data/lib/embulk/column.rb +70 -0
  310. data/lib/embulk/command/embulk_bundle.rb +56 -0
  311. data/lib/embulk/command/embulk_example.rb +32 -0
  312. data/lib/embulk/command/embulk_generate_bin.rb +62 -0
  313. data/lib/embulk/command/embulk_main.rb +2 -0
  314. data/lib/embulk/command/embulk_migrate_plugin.rb +170 -0
  315. data/lib/embulk/command/embulk_new_plugin.rb +124 -0
  316. data/lib/embulk/command/embulk_run.rb +470 -0
  317. data/lib/embulk/command/embulk_selfupdate.rb +84 -0
  318. data/lib/embulk/data/bundle/.bundle/config +3 -0
  319. data/lib/embulk/data/bundle/.ruby-version +1 -0
  320. data/lib/embulk/data/bundle/Gemfile +26 -0
  321. data/lib/embulk/data/bundle/embulk/filter/example.rb +42 -0
  322. data/lib/embulk/data/bundle/embulk/input/example.rb +54 -0
  323. data/lib/embulk/data/bundle/embulk/output/example.rb +58 -0
  324. data/lib/embulk/data/new/LICENSE.txt +21 -0
  325. data/lib/embulk/data/new/README.md.erb +111 -0
  326. data/lib/embulk/data/new/gitignore.erb +13 -0
  327. data/lib/embulk/data/new/java/build.gradle.erb +73 -0
  328. data/lib/embulk/data/new/java/decoder.java.erb +84 -0
  329. data/lib/embulk/data/new/java/encoder.java.erb +86 -0
  330. data/lib/embulk/data/new/java/file_input.java.erb +143 -0
  331. data/lib/embulk/data/new/java/file_output.java.erb +93 -0
  332. data/lib/embulk/data/new/java/filter.java.erb +56 -0
  333. data/lib/embulk/data/new/java/formatter.java.erb +54 -0
  334. data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
  335. data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +6 -0
  336. data/lib/embulk/data/new/java/gradlew +164 -0
  337. data/lib/embulk/data/new/java/gradlew.bat +90 -0
  338. data/lib/embulk/data/new/java/input.java.erb +87 -0
  339. data/lib/embulk/data/new/java/output.java.erb +77 -0
  340. data/lib/embulk/data/new/java/parser.java.erb +60 -0
  341. data/lib/embulk/data/new/java/plugin_loader.rb.erb +3 -0
  342. data/lib/embulk/data/new/java/test.java.erb +5 -0
  343. data/lib/embulk/data/new/ruby/.ruby-version +1 -0
  344. data/lib/embulk/data/new/ruby/Gemfile +2 -0
  345. data/lib/embulk/data/new/ruby/Rakefile +3 -0
  346. data/lib/embulk/data/new/ruby/decoder_guess.rb.erb +25 -0
  347. data/lib/embulk/data/new/ruby/filter.rb.erb +41 -0
  348. data/lib/embulk/data/new/ruby/formatter.rb.erb +49 -0
  349. data/lib/embulk/data/new/ruby/gemspec.erb +20 -0
  350. data/lib/embulk/data/new/ruby/input.rb.erb +59 -0
  351. data/lib/embulk/data/new/ruby/output.rb.erb +61 -0
  352. data/lib/embulk/data/new/ruby/parser.rb.erb +44 -0
  353. data/lib/embulk/data/new/ruby/parser_guess.rb.erb +65 -0
  354. data/lib/embulk/data/package_data.rb +50 -0
  355. data/lib/embulk/data_source.rb +220 -0
  356. data/lib/embulk/decoder_plugin.rb +27 -0
  357. data/lib/embulk/encoder_plugin.rb +27 -0
  358. data/lib/embulk/error.rb +8 -0
  359. data/lib/embulk/executor_plugin.rb +23 -0
  360. data/lib/embulk/file_input.rb +87 -0
  361. data/lib/embulk/file_input_plugin.rb +27 -0
  362. data/lib/embulk/file_output.rb +56 -0
  363. data/lib/embulk/file_output_plugin.rb +27 -0
  364. data/lib/embulk/filter_plugin.rb +105 -0
  365. data/lib/embulk/formatter_plugin.rb +105 -0
  366. data/lib/embulk/guess/charset.rb +44 -0
  367. data/lib/embulk/guess/csv.rb +327 -0
  368. data/lib/embulk/guess/gzip.rb +18 -0
  369. data/lib/embulk/guess/newline.rb +22 -0
  370. data/lib/embulk/guess/schema_guess.rb +118 -0
  371. data/lib/embulk/guess/time_format_guess.rb +394 -0
  372. data/lib/embulk/guess_plugin.rb +129 -0
  373. data/lib/embulk/input_plugin.rb +121 -0
  374. data/lib/embulk/java/bootstrap.rb +24 -0
  375. data/lib/embulk/java/imports.rb +69 -0
  376. data/lib/embulk/java/time_helper.rb +79 -0
  377. data/lib/embulk/java_plugin.rb +90 -0
  378. data/lib/embulk/logger.rb +154 -0
  379. data/lib/embulk/output_plugin.rb +150 -0
  380. data/lib/embulk/page.rb +30 -0
  381. data/lib/embulk/page_builder.rb +76 -0
  382. data/lib/embulk/parser_plugin.rb +78 -0
  383. data/lib/embulk/plugin.rb +239 -0
  384. data/lib/embulk/plugin_registry.rb +96 -0
  385. data/lib/embulk/runner.rb +184 -0
  386. data/lib/embulk/schema.rb +103 -0
  387. data/lib/embulk/version.rb +3 -0
  388. data/settings.gradle +6 -0
  389. data/test/guess/test_schema_guess.rb +11 -0
  390. data/test/guess/test_time_format_guess.rb +133 -0
  391. data/test/helper.rb +21 -0
  392. data/test/run-test.rb +14 -0
  393. metadata +566 -0
@@ -0,0 +1,470 @@
1
+ require 'embulk'
2
+
3
+ module Embulk
4
+ def self.run(argv)
5
+ # reset context class loader set by org.jruby.Main.main to nil. embulk manages
6
+ # multiple classloaders. default classloader should be Plugin.class.getClassloader().
7
+ java.lang.Thread.current_thread.set_context_class_loader(nil)
8
+
9
+ # Gem.path is called when GemRunner installs a gem with native extension.
10
+ # Running extconf.rb fails without this hack.
11
+ fix_gem_ruby_path
12
+
13
+ require 'embulk/version'
14
+
15
+ i = argv.find_index {|arg| arg !~ /^\-/ }
16
+ unless i
17
+ if argv.include?('--version')
18
+ puts "embulk #{Embulk::VERSION}"
19
+ system_exit_success
20
+ end
21
+ usage nil
22
+ end
23
+ subcmd = argv.slice!(i).to_sym
24
+
25
+ require 'java'
26
+ require 'optparse'
27
+ op = OptionParser.new
28
+ op.version = Embulk::VERSION
29
+
30
+ puts "#{Time.now.strftime("%Y-%m-%d %H:%M:%S.%3N %z")}: Embulk v#{Embulk::VERSION}"
31
+
32
+ plugin_paths = []
33
+ load_paths = []
34
+ classpaths = []
35
+ classpath_separator = java.io.File.pathSeparator
36
+
37
+ options = {
38
+ system_config: {}
39
+ }
40
+
41
+ java_embed_ops = lambda do
42
+ op.separator ""
43
+ op.separator " Other options:"
44
+ op.on('-l', '--log-level LEVEL', 'Log level (error, warn, info, debug or trace)') do |level|
45
+ options[:system_config][:log_level] = level
46
+ end
47
+ op.on('-X KEY=VALUE', 'Add a performance system config') do |kv|
48
+ k, v = kv.split('=', 2)
49
+ v ||= "true"
50
+ options[:system_config][k] = v
51
+ end
52
+ end
53
+
54
+ plugin_load_ops = lambda do
55
+ op.separator ""
56
+ op.separator " Plugin load options:"
57
+ op.on('-L', '--load PATH', 'Add a local plugin path') do |plugin_path|
58
+ plugin_paths << plugin_path
59
+ end
60
+ op.on('-I', '--load-path PATH', 'Add ruby script directory path ($LOAD_PATH)') do |load_path|
61
+ load_paths << load_path
62
+ end
63
+ op.on('-C', '--classpath PATH', "Add java classpath separated by #{classpath_separator} (CLASSPATH)") do |classpath|
64
+ classpaths.concat classpath.split(classpath_separator)
65
+ end
66
+ op.on('-b', '--bundle BUNDLE_DIR', 'Path to a Gemfile directory (create one using "embulk bundle new" command)') do |path|
67
+ # only for help message. implemented at lib/embulk/command/embulk_bundle.rb
68
+ end
69
+ end
70
+
71
+ case subcmd
72
+ when :run
73
+ op.banner = "Usage: run <config.yml>"
74
+ op.separator " Options:"
75
+ op.on('-r', '--resume-state PATH', 'Path to a file to write or read resume state') do |path|
76
+ options[:resume_state_path] = path
77
+ end
78
+ op.on('-o', '--output PATH', 'Path to a file to write the next configuration') do |path|
79
+ options[:next_config_output_path] = path
80
+ end
81
+ plugin_load_ops.call
82
+ java_embed_ops.call
83
+ args = 1..1
84
+
85
+ when :cleanup
86
+ op.banner = "Usage: cleanup <config.yml>"
87
+ op.separator " Options:"
88
+ op.on('-r', '--resume-state PATH', 'Path to a file to write or read resume state') do |path|
89
+ options[:resume_state_path] = path
90
+ end
91
+ plugin_load_ops.call
92
+ java_embed_ops.call
93
+ args = 1..1
94
+
95
+ when :preview
96
+ op.banner = "Usage: preview <config.yml>"
97
+ op.separator " Options:"
98
+ op.on('-G', '--vertical', "Use vertical output format", TrueClass) do |b|
99
+ options[:format] = "vertical"
100
+ end
101
+ plugin_load_ops.call
102
+ java_embed_ops.call
103
+ args = 1..1
104
+
105
+ when :guess
106
+ op.banner = "Usage: guess <partial-config.yml>"
107
+ op.separator " Options:"
108
+ op.on('-o', '--output PATH', 'Path to a file to write the guessed configuration') do |path|
109
+ options[:next_config_output_path] = path
110
+ end
111
+ op.on('-g', '--guess NAMES', "Comma-separated list of guess plugin names") do |names|
112
+ (options[:system_config][:guess_plugins] ||= []).concat names.split(",") # TODO
113
+ end
114
+ plugin_load_ops.call
115
+ java_embed_ops.call
116
+ args = 1..1
117
+
118
+ when :bundle
119
+ if argv[0] == 'new'
120
+ usage nil if argv.length != 2
121
+ new_bundle(argv[1])
122
+ else
123
+ gemfile_path = ENV['BUNDLE_GEMFILE'].to_s
124
+
125
+ if !gemfile_path.empty?
126
+ bundle_path = File.dirname(gemfile_path)
127
+ elsif File.exists?('Gemfile')
128
+ bundle_path = '.'
129
+ else
130
+ system_exit "'#{path}' already exists. You already ran 'embulk bundle new'. Please remove it, or run \"cd #{path}\" and \"embulk bundle\" instead"
131
+ end
132
+
133
+ run_bundler(argv)
134
+ end
135
+ system_exit_success
136
+
137
+ when :gem
138
+ require 'rubygems/gem_runner'
139
+ Gem::GemRunner.new.run argv
140
+ system_exit_success
141
+
142
+ when :new
143
+ op.banner = "Usage: new <category> <name>" + %[
144
+ categories:
145
+ ruby-input Ruby record input plugin (like "mysql")
146
+ ruby-output Ruby record output plugin (like "mysql")
147
+ ruby-filter Ruby record filter plugin (like "add-hostname")
148
+ #ruby-file-input Ruby file input plugin (like "ftp") # not implemented yet [#21]
149
+ #ruby-file-output Ruby file output plugin (like "ftp") # not implemented yet [#22]
150
+ ruby-parser Ruby file parser plugin (like "csv")
151
+ ruby-formatter Ruby file formatter plugin (like "csv")
152
+ #ruby-decoder Ruby file decoder plugin (like "gzip") # not implemented yet [#31]
153
+ #ruby-encoder Ruby file encoder plugin (like "gzip") # not implemented yet [#32]
154
+ java-input Java record input plugin (like "mysql")
155
+ java-output Java record output plugin (like "mysql")
156
+ java-filter Java record filter plugin (like "add-hostname")
157
+ java-file-input Java file input plugin (like "ftp")
158
+ java-file-output Java file output plugin (like "ftp")
159
+ java-parser Java file parser plugin (like "csv")
160
+ java-formatter Java file formatter plugin (like "csv")
161
+ java-decoder Java file decoder plugin (like "gzip")
162
+ java-encoder Java file encoder plugin (like "gzip")
163
+
164
+ examples:
165
+ new ruby-output hbase
166
+ new ruby-filter int-to-string
167
+ ]
168
+ args = 2..2
169
+
170
+ when :migrate
171
+ op.banner = "Usage: migrate <directory>"
172
+ args = 1..1
173
+
174
+ when :selfupdate
175
+ op.on('-f', "Skip corruption check", TrueClass) do |b|
176
+ system[:force] = true
177
+ end
178
+ args = 0..0
179
+
180
+ when :example
181
+ args = 0..1
182
+
183
+ when :exec
184
+ exec(*argv)
185
+ exit 127
186
+
187
+ when :irb
188
+ require 'irb'
189
+ IRB.start
190
+ system_exit_success
191
+
192
+ else
193
+ usage "Unknown subcommand #{subcmd.to_s.dump}."
194
+ end
195
+
196
+ begin
197
+ op.parse!(argv)
198
+ unless args.include?(argv.length)
199
+ usage_op op, nil
200
+ end
201
+ rescue => e
202
+ usage_op op, e.to_s
203
+ end
204
+
205
+ case subcmd
206
+ when :example
207
+ require 'embulk/command/embulk_example'
208
+ path = ARGV[0] || "embulk-example"
209
+ puts "Creating #{path} directory..."
210
+ Embulk.create_example(path)
211
+ puts ""
212
+ puts "Run following subcommands to try embulk:"
213
+ puts ""
214
+ puts " 1. embulk guess #{File.join(path, 'example.yml')} -o config.yml"
215
+ puts " 2. embulk preview config.yml"
216
+ puts " 3. embulk run config.yml"
217
+ puts ""
218
+
219
+ when :new
220
+ lang_cate = ARGV[0]
221
+ name = ARGV[1]
222
+
223
+ language, category = case lang_cate
224
+ when "java-input" then [:java, :input]
225
+ when "java-output" then [:java, :output]
226
+ when "java-filter" then [:java, :filter]
227
+ when "java-file-input" then [:java, :file_input]
228
+ when "java-file-output" then [:java, :file_output]
229
+ when "java-parser" then [:java, :parser]
230
+ when "java-formatter" then [:java, :formatter]
231
+ when "java-decoder" then [:java, :decoder]
232
+ when "java-encoder" then [:java, :encoder]
233
+ when "ruby-input" then [:ruby, :input]
234
+ when "ruby-output" then [:ruby, :output]
235
+ when "ruby-filter" then [:ruby, :filter]
236
+ when "ruby-file-input" then raise "ruby-file-input is not implemented yet. See #21 on github." #[:ruby, :file_input]
237
+ when "ruby-file-output" then raise "ruby-file-output is not implemented yet. See #22 on github." #[:ruby, :file_output]
238
+ when "ruby-parser" then [:ruby, :parser]
239
+ when "ruby-formatter" then [:ruby, :formatter]
240
+ when "ruby-decoder" then raise "ruby-decoder is not implemented yet. See #31 on github." #[:ruby, :decoder]
241
+ when "ruby-encoder" then raise "ruby-decoder is not implemented yet. See #32 on github." #[:ruby, :encoder]
242
+ else
243
+ usage_op op, "Unknown category '#{lang_cate}'"
244
+ end
245
+
246
+ require 'embulk/command/embulk_new_plugin'
247
+ Embulk.new_plugin(name, language, category)
248
+
249
+ when :migrate
250
+ path = ARGV[0]
251
+ require 'embulk/command/embulk_migrate_plugin'
252
+ Embulk.migrate_plugin(path)
253
+
254
+ when :selfupdate
255
+ require 'embulk/command/embulk_selfupdate'
256
+ Embulk.selfupdate(system)
257
+
258
+ else
259
+ require 'json'
260
+
261
+ Embulk.setup(options.delete(:system_config))
262
+
263
+ setup_plugin_paths(plugin_paths)
264
+ setup_load_paths(load_paths)
265
+ setup_classpaths(classpaths)
266
+
267
+ begin
268
+ case subcmd
269
+ when :guess
270
+ Embulk::Runner.guess(argv[0], options)
271
+ when :preview
272
+ Embulk::Runner.preview(argv[0], options)
273
+ when :run
274
+ Embulk::Runner.run(argv[0], options)
275
+ end
276
+ rescue => ex
277
+ print_exception(ex)
278
+ puts ""
279
+ puts "Error: #{ex}"
280
+ raise SystemExit.new(1, ex.to_s)
281
+ end
282
+ end
283
+ end
284
+
285
+ def self.default_gem_home
286
+ if RUBY_PLATFORM =~ /java/i
287
+ user_home = java.lang.System.properties["user.home"]
288
+ end
289
+ user_home ||= ENV['HOME']
290
+ unless user_home
291
+ raise "HOME environment variable is not set."
292
+ end
293
+ File.expand_path File.join(user_home, '.embulk', Gem.ruby_engine, RbConfig::CONFIG['ruby_version'])
294
+ end
295
+
296
+ private
297
+
298
+ def self.fix_gem_ruby_path
299
+ ruby_path = File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
300
+ jar, resource = ruby_path.split("!")
301
+
302
+ if resource && jar =~ /^file:/
303
+ # java
304
+ manifest = File.read("#{jar}!/META-INF/MANIFEST.MF") rescue ""
305
+ m = /Main-Class: ([^\r\n]+)/.match(manifest)
306
+ if m && m[1] != "org.jruby.Main"
307
+ # Main-Class is not jruby
308
+ Gem.define_singleton_method(:ruby) do
309
+ "java -cp #{jar_path(jar)} org.jruby.Main"
310
+ end
311
+ end
312
+ end
313
+ end
314
+
315
+ def self.setup_plugin_paths(plugin_paths)
316
+ plugin_paths.each do |path|
317
+ unless File.directory?(path)
318
+ raise "Path '#{path}' is not a directory"
319
+ end
320
+ specs = Dir[File.join(File.expand_path(path), "*.gemspec")]
321
+ if specs.empty?
322
+ raise "Path '#{path}' does not include *.gemspec file. Hint: Did you run './gradlew package' command?"
323
+ end
324
+ specs.each do |spec|
325
+ gem_path = File.dirname(spec)
326
+ Dir.chdir(path) do
327
+ # cd to path because spec could include `git ...`
328
+ stub = Gem::StubSpecification.new(spec)
329
+ stub.define_singleton_method(:full_gem_path) { gem_path }
330
+ Gem::Specification.add_spec(stub)
331
+ end
332
+ end
333
+ end
334
+ end
335
+
336
+ def self.setup_load_paths(load_paths)
337
+ # first $LOAD_PATH has highet priority. later load_paths should have highest priority.
338
+ load_paths.each do |load_path|
339
+ # ruby script directory (use unshift to make it highest priority)
340
+ $LOAD_PATH.unshift File.expand_path(load_path)
341
+ end
342
+ end
343
+
344
+ def self.setup_classpaths(classpaths)
345
+ classpaths.each do |classpath|
346
+ $CLASSPATH << classpath # $CLASSPATH object doesn't have concat method
347
+ end
348
+ end
349
+
350
+ def self.new_bundle(path)
351
+ require 'fileutils'
352
+ require 'rubygems/gem_runner'
353
+
354
+ if File.exists?(path)
355
+ error = "'#{path}' already exists. You already ran 'embulk bundle new'. Please remove it, or run \"cd #{path}\" and \"embulk bundle\" instead"
356
+ STDERR.puts error
357
+ raise SystemExit.new(1, error)
358
+ end
359
+
360
+ puts "Initializing #{path}..."
361
+ FileUtils.mkdir_p path
362
+ begin
363
+ success = false
364
+
365
+ # copy embulk/data/bundle/ contents
366
+ require 'embulk/data/package_data'
367
+ pkg = PackageData.new("bundle", path)
368
+ %w[Gemfile .ruby-version .bundle/config embulk/input/example.rb embulk/output/example.rb embulk/filter/example.rb].each do |file|
369
+ pkg.cp(file, file)
370
+ end
371
+
372
+ # run the first bundle-install
373
+ Dir.chdir(path) do
374
+ run_bundler(['install', '--path', '.'])
375
+ end
376
+
377
+ success = true
378
+ rescue Gem::SystemExitException => e
379
+ raise e if e.exit_code != 0
380
+ success = true
381
+ ensure
382
+ FileUtils.rm_rf path unless success
383
+ end
384
+ end
385
+
386
+ def self.run_bundler(argv)
387
+ # try to load bundler from LOAD_PATH and ./jruby
388
+ begin
389
+ require 'bundler'
390
+ bundler_provided = true
391
+ rescue LoadError
392
+ ENV['GEM_HOME'] = File.expand_path File.join(".", Gem.ruby_engine, RbConfig::CONFIG['ruby_version'])
393
+ ENV['GEM_PATH'] = ''
394
+ ENV.delete('BUNDLE_GEMFILE')
395
+ Gem.clear_paths # force rubygems to reload GEM_HOME
396
+ begin
397
+ require 'bundler'
398
+ bundler_provided = true
399
+ rescue LoadError
400
+ end
401
+ end
402
+
403
+ unless bundler_provided
404
+ # install bundler to the path (bundler is not included in embulk-core.jar)
405
+ require 'rubygems/gem_runner'
406
+ begin
407
+ puts "Installing bundler..."
408
+ Gem::GemRunner.new.run %w[install bundler]
409
+ rescue Gem::SystemExitException => e
410
+ raise e if e.exit_code != 0
411
+ end
412
+ Gem.clear_paths
413
+ require 'bundler'
414
+ end
415
+
416
+ require 'bundler/friendly_errors'
417
+ require 'bundler/cli'
418
+ Bundler.with_friendly_errors do
419
+ Bundler::CLI.start(argv, debug: true)
420
+ end
421
+ end
422
+
423
+ def self.usage(message)
424
+ STDERR.puts "Embulk v#{Embulk::VERSION}"
425
+ STDERR.puts "usage: <command> [--options]"
426
+ STDERR.puts "commands:"
427
+ STDERR.puts " bundle [directory] # create or update plugin environment."
428
+ STDERR.puts " run <config.yml> # run a bulk load transaction."
429
+ STDERR.puts " preview <config.yml> # dry-run the bulk load without output and show preview."
430
+ STDERR.puts " guess <partial-config.yml> -o <output.yml> # guess missing parameters to create a complete configuration file."
431
+ STDERR.puts " gem <install | list | help> # install a plugin or show installed plugins."
432
+ STDERR.puts " # plugin path is #{ENV['GEM_HOME']}"
433
+ STDERR.puts " new <category> <name> # generates new plugin template"
434
+ STDERR.puts " migrate <path> # modify plugin code to use the latest Embulk plugin API"
435
+ STDERR.puts " example [path] # creates an example config file and csv file to try embulk."
436
+ STDERR.puts " selfupdate # upgrades embulk to the latest released version."
437
+ STDERR.puts ""
438
+ if message
439
+ system_exit "error: #{message}"
440
+ else
441
+ system_exit "Use \`<command> --help\` to see description of the commands."
442
+ end
443
+ end
444
+
445
+ def self.usage_op(op, message)
446
+ STDERR.puts op.help
447
+ STDERR.puts
448
+ system_exit message
449
+ end
450
+
451
+ def self.print_exception(ex)
452
+ if ex.respond_to?(:to_java) && ex.is_a?(java.lang.Throwable)
453
+ ex.to_java.printStackTrace(java.lang.System.out)
454
+ else
455
+ puts "#{ex.to_s}"
456
+ ex.backtrace.each do |bt|
457
+ puts " #{bt}"
458
+ end
459
+ end
460
+ end
461
+
462
+ def self.system_exit(message=nil)
463
+ STDERR.puts message if message
464
+ raise SystemExit.new(1, message)
465
+ end
466
+
467
+ def self.system_exit_success
468
+ raise SystemExit.new(0)
469
+ end
470
+ end