embulk 0.8.27-java → 0.8.28-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +11 -1
  3. data/appveyor.yml +4 -4
  4. data/bin/embulk +33 -9
  5. data/build.gradle +17 -4
  6. data/embulk-cli/build.gradle +1 -0
  7. data/embulk-cli/src/main/bat/{selfrun.bat → selfrun.bat.template} +1 -2
  8. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkArguments.java +54 -0
  9. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkBundle.java +44 -0
  10. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLine.java +256 -0
  11. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLineException.java +25 -0
  12. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkGlobalJRubyScriptingContainer.java +195 -0
  13. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkMigrate.java +9 -5
  14. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkRun.java +769 -0
  15. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkSelfUpdate.java +1 -14
  16. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkSubcommand.java +47 -0
  17. data/embulk-cli/src/main/java/org/embulk/cli/Main.java +12 -21
  18. data/embulk-cli/src/main/java/org/embulk/cli/parse/AbstractHelpLineDefinition.java +15 -0
  19. data/embulk-cli/src/main/java/org/embulk/cli/parse/CliHelpFormatterWithHelpMessages.java +141 -0
  20. data/embulk-cli/src/main/java/org/embulk/cli/parse/CliOptionsWithHelpMessages.java +45 -0
  21. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineHelpRequired.java +10 -0
  22. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineParseException.java +25 -0
  23. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineParser.java +183 -0
  24. data/embulk-cli/src/main/java/org/embulk/cli/parse/HelpMessageAsCliOption.java +36 -0
  25. data/embulk-cli/src/main/java/org/embulk/cli/parse/HelpMessageLineDefinition.java +20 -0
  26. data/embulk-cli/src/main/java/org/embulk/cli/parse/OptionBehavior.java +39 -0
  27. data/embulk-cli/src/main/java/org/embulk/cli/parse/OptionDefinition.java +120 -0
  28. data/embulk-cli/src/main/sh/{selfrun.sh → selfrun.sh.template} +1 -1
  29. data/embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java +7 -3
  30. data/embulk-core/src/main/java/org/embulk/EmbulkRunner.java +526 -0
  31. data/embulk-core/src/main/java/org/embulk/EmbulkSetup.java +70 -0
  32. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java +3 -3
  33. data/embulk-docs/src/release.rst +1 -0
  34. data/embulk-docs/src/release/release-0.8.28.rst +14 -0
  35. data/lib/embulk.rb +21 -17
  36. data/lib/embulk/runner.rb +35 -166
  37. data/lib/embulk/version.rb +1 -1
  38. metadata +29 -11
  39. data/lib/embulk/command/embulk_bundle.rb +0 -47
  40. data/lib/embulk/command/embulk_main.rb +0 -2
  41. data/lib/embulk/command/embulk_run.rb +0 -418
@@ -0,0 +1,70 @@
1
+ package org.embulk;
2
+
3
+ import com.fasterxml.jackson.core.JsonProcessingException;
4
+ import com.fasterxml.jackson.databind.ObjectMapper;
5
+ import java.util.HashMap;
6
+ import java.util.Map;
7
+ import org.embulk.config.ConfigSource;
8
+ import org.jruby.embed.LocalContextScope;
9
+ import org.jruby.embed.LocalVariableBehavior;
10
+ import org.jruby.embed.ScriptingContainer;
11
+
12
+ /**
13
+ * EmbulkSetup initiates an EmbulkRunner instance. It was originally implemented with Ruby in lib/embulk.rb.
14
+ *
15
+ * NOTE: Developers should not depend on this EmbulkSetup class. This class is created tentatively, and may be
16
+ * re-implemented again in a different style.
17
+ */
18
+ public class EmbulkSetup
19
+ {
20
+ @Deprecated
21
+ public static EmbulkRunner setupWithNewScriptingContainer(final Map<String, Object> systemConfigGiven)
22
+ {
23
+ // The JRuby instance is a global singleton so that the settings here affects later execution.
24
+ // The local variable should be persistent so that local variables are set through ScriptingContainer.put.
25
+ final ScriptingContainer globalJRubyContainer =
26
+ new ScriptingContainer(LocalContextScope.SINGLETON, LocalVariableBehavior.PERSISTENT);
27
+ return setup(systemConfigGiven, globalJRubyContainer);
28
+ }
29
+
30
+ public static EmbulkRunner setup(
31
+ final Map<String, Object> systemConfigGiven,
32
+ final ScriptingContainer globalJRubyContainer)
33
+ {
34
+ // NOTE: When it was in Ruby "require 'json'" was required to format the system config into a JSON string.
35
+
36
+ // NOTE: require_classpath is called only when Embulk is loaded as a Ruby gem. (lib/embulk.rb)
37
+
38
+ final HashMap<String, Object> systemConfigModified = new HashMap<String, Object>(systemConfigGiven);
39
+
40
+ // use the global ruby runtime for all ScriptingContainer
41
+ // injected by org.embulk.jruby.JRubyScriptingModule
42
+ systemConfigModified.put("use_global_ruby_runtime", true);
43
+
44
+ // Calling ObjectMapper simply just as a formatter here so that it does not depend much on Jackson.
45
+ // Do not leak the Jackson object outside.
46
+ final ObjectMapper jacksonObjectMapper = new ObjectMapper();
47
+ final String systemConfigJson;
48
+ try {
49
+ systemConfigJson = jacksonObjectMapper.writeValueAsString(systemConfigModified);
50
+ }
51
+ catch (JsonProcessingException ex) {
52
+ throw new RuntimeException(ex);
53
+ }
54
+
55
+ final EmbulkEmbed.Bootstrap bootstrap = new org.embulk.EmbulkEmbed.Bootstrap();
56
+ final ConfigSource systemConfig = bootstrap.getSystemConfigLoader().fromJsonString(systemConfigJson);
57
+ bootstrap.setSystemConfig(systemConfig);
58
+ final EmbulkEmbed embed = bootstrap.initialize(); // see embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.
59
+
60
+ // see also embulk/java/bootstrap.rb loaded by JRubyScriptingModule
61
+ globalJRubyContainer.runScriptlet("module Embulk; end");
62
+ globalJRubyContainer.put("__internal_embulk_setup_embed__", embed);
63
+ globalJRubyContainer.put("__internal_embulk_setup_global_jruby_container__", globalJRubyContainer);
64
+ globalJRubyContainer.runScriptlet("Embulk.const_set :Runner, Embulk::EmbulkRunner.new(__internal_embulk_setup_embed__)");
65
+ globalJRubyContainer.remove("__internal_embulk_setup_global_jruby_container__");
66
+ globalJRubyContainer.remove("__internal_embulk_setup_embed__");
67
+
68
+ return new EmbulkRunner(embed, globalJRubyContainer);
69
+ }
70
+ }
@@ -49,7 +49,7 @@ public class PluginClassLoader
49
49
  *
50
50
  * Some plugins (embulk-input-jdbc, for example) are calling this method to load external JAR files.
51
51
  *
52
- * @see https://github.com/embulk/embulk-input-jdbc/blob/ebfff0b249d507fc730c87e08b56e6aa492060ca/embulk-input-jdbc/src/main/java/org/embulk/input/jdbc/AbstractJdbcInputPlugin.java#L586-L595
52
+ * @see <a href="https://github.com/embulk/embulk-input-jdbc/blob/ebfff0b249d507fc730c87e08b56e6aa492060ca/embulk-input-jdbc/src/main/java/org/embulk/input/jdbc/AbstractJdbcInputPlugin.java#L586-L595">embulk-input-jdbc</a>
53
53
  */
54
54
  public void addPath(Path path)
55
55
  {
@@ -84,8 +84,8 @@ public class PluginClassLoader
84
84
  *
85
85
  * If the specified class is "NOT parent-first", the 2nd and 3rd actions are swapped.
86
86
  *
87
- * @see https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#loadClass(java.lang.String,%20boolean)
88
- * @see http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/jdk7u141-b02/src/share/classes/java/lang/ClassLoader.java
87
+ * @see <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#loadClass(java.lang.String,%20boolean)">Oracle Java7's ClassLoader#loadClass</a>
88
+ * @see <a href="http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/jdk7u141-b02/src/share/classes/java/lang/ClassLoader.java">OpenJDK7's ClassLoader</a>
89
89
  */
90
90
  @Override
91
91
  protected Class<?> loadClass(String name, boolean resolve)
@@ -4,6 +4,7 @@ Release Notes
4
4
  .. toctree::
5
5
  :maxdepth: 1
6
6
 
7
+ release/release-0.8.28
7
8
  release/release-0.8.27
8
9
  release/release-0.8.26
9
10
  release/release-0.8.25
@@ -0,0 +1,14 @@
1
+ Release 0.8.28
2
+ ==================================
3
+
4
+ General Changes
5
+ ------------------
6
+
7
+ * Make selfrun scripts not to run JRuby to get ruby_version. [#721]
8
+ * Un-JRuby the bootstrap. [#706] [#708] [#543] [#725] [#726] [#727] [#729] [#731] [#741] [#742]
9
+ * Fix the "migrate" subcommand. [#732]
10
+ * Improve building. [#716] [#724] [#728]
11
+
12
+ Release Date
13
+ ------------------
14
+ 2017-07-27
data/lib/embulk.rb CHANGED
@@ -17,7 +17,7 @@ module Embulk
17
17
  end
18
18
  end
19
19
 
20
- def self.require_classpath
20
+ def self.require_classpath(already_warned=false)
21
21
  if __FILE__.include?("!")
22
22
  # single jar. __FILE__ should point path/to/embulk.jar!/embulk.rb
23
23
  # which means that embulk.jar is already loaded in this JVM.
@@ -28,6 +28,16 @@ module Embulk
28
28
  else
29
29
  # gem package. __FILE__ should point path/to/embulk/lib/embulk.rb
30
30
  # that requires here to load ../classpath/*.jar to start EmbulkEmbed.
31
+
32
+ unless already_warned
33
+ STDERR.puts "################################################################################"
34
+ STDERR.puts "[WARN] Embulk's gem package is deprecated, and will be removed from v0.9."
35
+ STDERR.puts "[WARN] Use the jar version installed from http://dl.embulk.org/ instead."
36
+ STDERR.puts "[WARN] See the issue and comment at: https://github.com/embulk/embulk/issues/628"
37
+ STDERR.puts "################################################################################"
38
+ STDERR.puts ""
39
+ end
40
+
31
41
  gem_root = File.expand_path('..', File.dirname(__FILE__))
32
42
  classpath_dir = File.join(gem_root, "classpath")
33
43
  jars = Dir.entries(classpath_dir).select{|f| f =~ /\.jar$/ }.sort
@@ -38,27 +48,21 @@ module Embulk
38
48
  end
39
49
 
40
50
  def self.setup(system_config={})
51
+ STDERR.puts "################################################################################"
52
+ STDERR.puts "[WARN] Embulk's gem package is deprecated, and will be removed from v0.9."
53
+ STDERR.puts "[WARN] Use the jar version installed from http://dl.embulk.org/ instead."
54
+ STDERR.puts "[WARN] See the issue and comment at: https://github.com/embulk/embulk/issues/628"
55
+ STDERR.puts "################################################################################"
56
+ STDERR.puts ""
57
+
41
58
  unless RUBY_PLATFORM =~ /java/i
42
59
  raise "Embulk.setup works only with JRuby."
43
60
  end
44
61
 
45
- require 'json'
46
-
47
- require_classpath
48
-
49
- systemConfigJson = system_config.merge({
50
- # use the global ruby runtime for all ScriptingContainer
51
- # injected by org.embulk.jruby.JRubyScriptingModule
52
- use_global_ruby_runtime: true
53
- }).to_json
54
-
55
- bootstrap = org.embulk.EmbulkEmbed::Bootstrap.new
56
- systemConfig = bootstrap.getSystemConfigLoader.fromJsonString(systemConfigJson)
57
- bootstrap.setSystemConfig(systemConfig)
58
- embed = bootstrap.java_method(:initialize).call # see embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.
62
+ # require 'json' -- was required to format the system config into a JSON string.
59
63
 
60
- # see also embulk/java/bootstrap.rb loaded by JRubyScriptingModule
64
+ require_classpath(true)
61
65
 
62
- Embulk.const_set :Runner, EmbulkRunner.new(embed)
66
+ Java::org.embulk.EmbulkSetup::setupWithNewScriptingContainer(Java::java.util.HashMap.new(system_config))
63
67
  end
64
68
  end
data/lib/embulk/runner.rb CHANGED
@@ -4,195 +4,64 @@ module Embulk
4
4
  # Runner = EmbulkRunner.new
5
5
 
6
6
  class EmbulkRunner
7
- def initialize(embed)
7
+ def initialize(embed, jruby_container=nil)
8
8
  @embed = embed # org.embulk.EmbulkEmbed
9
+ if jruby_container
10
+ @jruby_container = jruby_container
11
+ else
12
+ # The ScriptingContainer instance below is the same JRuby instance with the one running this runner.rb itself
13
+ # as it's LocalContextScope.SINGLETON.
14
+ @jruby_container = Java::org.jruby.embed.ScriptingContainer.new(
15
+ Java::org.jruby.embed.LocalContextScope::SINGLETON, Java::org.jruby.embed.LocalVariableBehavior::PERSISTENT)
16
+ end
9
17
  end
10
18
 
11
19
  def guess(config, options={})
12
- configSource = read_config(config, options)
13
- output_path = options[:next_config_output_path]
14
-
15
- check_file_writable(output_path)
20
+ output_path =
21
+ (options[:next_config_output_path] ? Java::java.lang.String.new(options[:next_config_output_path]) : nil)
22
+ embulk_runner_java = Java::org.embulk.EmbulkRunner.new(@embed, @jruby_container)
16
23
 
17
- configDiff = @embed.guess(configSource)
18
-
19
- guessedConfigSource = configSource.merge(configDiff)
20
- yaml = write_config(output_path, guessedConfigSource)
21
- STDERR.puts yaml
22
- if output_path
23
- puts "Created '#{output_path}' file."
24
- else
25
- puts "Use -o PATH option to write the guessed config file to a file."
24
+ case config
25
+ when String
26
+ embulk_runner_java.guess(Java::java.lang.String.new(config), output_path)
27
+ when Hash, DataSource
28
+ embulk_runner_java.guess(DataSource.new(config).to_java, output_path)
26
29
  end
27
30
 
28
31
  nil
29
32
  end
30
33
 
31
34
  def preview(config, options={})
32
- configSource = read_config(config, options)
33
- format = options[:format]
34
-
35
- previewResult = @embed.preview(configSource)
35
+ format = (options[:format] ? Java::java.lang.String.new(options[:format]) : nil)
36
+ embulk_runner_java = Java::org.embulk.EmbulkRunner.new(@embed, @jruby_container)
36
37
 
37
- modelManager = @embed.getModelManager
38
- printer =
39
- case format || "table"
40
- when "table"
41
- org.embulk.command.TablePreviewPrinter.new(java.lang.System.out, modelManager, previewResult.getSchema)
42
- when "vertical"
43
- org.embulk.command.VerticalPreviewPrinter.new(java.lang.System.out, modelManager, previewResult.getSchema)
44
- else
45
- raise ArgumentError, "Unknown preview output format '#{format}'. Supported formats: table, vertical"
46
- end
47
-
48
- printer.printAllPages(previewResult.getPages)
49
- printer.finish
38
+ case config
39
+ when String
40
+ embulk_runner_java.preview(Java::java.lang.String.new(config), format)
41
+ when Hash, DataSource
42
+ embulk_runner_java.preview(DataSource.new(config).to_java, format)
43
+ end
50
44
 
51
45
  nil
52
46
  end
53
47
 
54
48
  def run(config, options={})
55
- configSource = read_config(config, options)
56
- config_diff_path = options[:next_config_diff_path]
57
- output_path = options[:next_config_output_path] # deprecated
58
- resume_state_path = options[:resume_state_path]
59
-
60
- check_file_writable(output_path) # deprecated
61
- check_file_writable(config_diff_path)
62
- check_file_writable(resume_state_path)
63
-
64
- if config_diff_path && File.size(config_diff_path) > 0
65
- lastConfigDiff = read_config(config_diff_path, options)
66
- configSource = configSource.merge(lastConfigDiff)
67
- end
68
-
69
- if resume_state_path
70
- begin
71
- resumeConfig = read_yaml_config_file(resume_state_path)
72
- resumeConfig = nil if resumeConfig.isEmpty
73
- rescue
74
- # TODO log?
75
- resumeConfig = nil
76
- end
77
- end
78
-
79
- if resumeConfig
80
- resumableResult = @embed.resumeState(configSource, resumeConfig).resume
81
- elsif resume_state_path
82
- resumableResult = @embed.runResumable(configSource)
83
- else
84
- executionResult = @embed.run(configSource)
85
- end
86
-
87
- unless executionResult
88
- unless resumableResult.isSuccessful
89
- if resumableResult.getTransactionStage.isBefore(org.embulk.exec.TransactionStage::RUN)
90
- # retry without resume state file if no tasks started yet
91
- # delete resume file
92
- File.delete(resume_state_path) rescue nil if resume_state_path
93
- else
94
- Embulk.logger.info "Writing resume state to '#{resume_state_path}'"
95
- write_config(resume_state_path, resumableResult.getResumeState)
96
- Embulk.logger.info "Resume state is written. Run the transaction again with -r option to resume or use \"cleanup\" subcommand to delete intermediate data."
97
- end
98
- raise resumableResult.getCause
99
- end
100
- executionResult = resumableResult.getSuccessfulResult
101
- end
49
+ config_diff_path =
50
+ (options[:next_config_diff_path] ? Java::java.lang.String.new(options[:next_config_diff_path]) : nil)
51
+ output_path = # deprecated
52
+ (options[:next_config_output_path] ? Java::java.lang.String.new(options[:next_config_output_path]) : nil)
53
+ resume_state_path =
54
+ (options[:resume_state_path] ? Java::java.lang.String.new(options[:resume_state_path]) : nil)
55
+ embulk_runner_java = Java::org.embulk.EmbulkRunner.new(@embed, @jruby_container)
102
56
 
103
- # delete resume file
104
- File.delete(resume_state_path) rescue nil if resume_state_path
105
-
106
- configDiff = executionResult.getConfigDiff
107
- Embulk.logger.info("Committed.")
108
- Embulk.logger.info("Next config diff: #{configDiff.toString}")
109
-
110
- write_config(config_diff_path, configDiff)
111
- write_config(output_path, configSource.merge(configDiff)) # deprecated
112
- end
113
-
114
- #def resume_state(config, options={})
115
- # configSource = read_config(config, options)
116
- # Resumed.new(self, DataSource.from_java(configSource), options)
117
- #end
118
-
119
- private
120
-
121
- def read_config(config, options={})
122
57
  case config
123
58
  when String
124
- case config
125
- when /\.ya?ml\.liquid$/
126
- require 'liquid'
127
- template_params = options[:template_params] || {}
128
- template_include_path = File.expand_path(options[:template_include_path] || File.dirname(config)) unless options[:template_include_path] == false
129
- @embed.newConfigLoader.fromYamlString run_liquid(File.read(config), template_params, template_include_path)
130
- when /\.ya?ml$/
131
- @embed.newConfigLoader.fromYamlString File.read(config)
132
- else
133
- raise ConfigError.new("Unsupported file extension. Supported file extensions are .yml and .yml.liquid: #{config}")
134
- end
135
-
59
+ embulk_runner_java.run(Java::java.lang.String.new(config), config_diff_path, output_path, resume_state_path)
136
60
  when Hash, DataSource
137
- DataSource.new(config).to_java
61
+ embulk_runner_java.run(DataSource.new(config).to_java, config_diff_path, output_path, resume_state_path)
138
62
  end
139
- end
140
-
141
- def read_yaml_config_file(path)
142
- @embed.newConfigLoader.fromYamlString File.read(config)
143
- end
144
-
145
- def run_liquid(source, params, template_include_path)
146
- require 'liquid'
147
- template = Liquid::Template.parse(source, :error_mode => :strict)
148
- template.registers[:file_system] = Liquid::LocalFileSystem.new(template_include_path, "_%s.yml.liquid") if template_include_path
149
-
150
- data = {
151
- "env" => ENV.to_h,
152
- }.merge(params)
153
63
 
154
- template.render(data)
155
- end
156
-
157
- def check_file_writable(path)
158
- if path
159
- # Open file with append mode and do nothing.
160
- # If file is not writable, it throws an exception.
161
- File.open(path, "ab")
162
- end
163
- end
164
-
165
- def write_config(path, modelObject)
166
- yaml = dump_yaml(modelObject)
167
- if path
168
- File.write(path, yaml)
169
- end
170
- yaml
171
- end
172
-
173
- def dump_yaml(modelObject)
174
- modelManager = @embed.getModelManager
175
- obj = modelManager.readObject(java.lang.Object.java_class, modelManager.writeObject(modelObject))
176
- return org.yaml.snakeyaml.Yaml.new.dump(obj)
64
+ nil
177
65
  end
178
-
179
- #class Runnable
180
- # def initialize(runner, config, options)
181
- # @runner = runner
182
- # @config = config
183
- # @options = options
184
- # end
185
- #
186
- # attr_reader :config
187
- #
188
- # def preview(options={})
189
- # @runner.preview(@config, @options.merge(options))
190
- # end
191
- #
192
- # def run(options={})
193
- # @runner.run(@config, @options.merge(options))
194
- # end
195
- #end
196
66
  end
197
-
198
67
  end
@@ -3,7 +3,7 @@
3
3
  module Embulk
4
4
  @@warned = false
5
5
 
6
- VERSION_INTERNAL = '0.8.27'
6
+ VERSION_INTERNAL = '0.8.28'
7
7
 
8
8
  DEPRECATED_MESSAGE = 'Embulk::VERSION in (J)Ruby is deprecated. Use org.embulk.EmbulkVersion::VERSION instead. If this message is from a plugin, please tell this to the author of the plugin!'
9
9
  def self.const_missing(name)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.27
4
+ version: 0.8.28
5
5
  platform: java
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-10 00:00:00.000000000 Z
11
+ date: 2017-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,14 +150,15 @@ files:
150
150
  - classpath/bval-core-0.5.jar
151
151
  - classpath/bval-jsr303-0.5.jar
152
152
  - classpath/commons-beanutils-core-1.8.3.jar
153
+ - classpath/commons-cli-1.3.1.jar
153
154
  - classpath/commons-collections-3.2.1.jar
154
155
  - classpath/commons-compress-1.10.jar
155
156
  - classpath/commons-lang-2.4.jar
156
157
  - classpath/commons-lang3-3.4.jar
157
- - classpath/embulk-cli-0.8.27.jar
158
- - classpath/embulk-core-0.8.27.jar
159
- - classpath/embulk-jruby-strptime-0.8.27.jar
160
- - classpath/embulk-standards-0.8.27.jar
158
+ - classpath/embulk-cli-0.8.28.jar
159
+ - classpath/embulk-core-0.8.28.jar
160
+ - classpath/embulk-jruby-strptime-0.8.28.jar
161
+ - classpath/embulk-standards-0.8.28.jar
161
162
  - classpath/guava-18.0.jar
162
163
  - classpath/guice-4.0.jar
163
164
  - classpath/guice-bootstrap-0.1.1.jar
@@ -191,18 +192,37 @@ files:
191
192
  - classpath/validation-api-1.1.0.Final.jar
192
193
  - classpath/velocity-1.7.jar
193
194
  - embulk-cli/build.gradle
194
- - embulk-cli/src/main/bat/selfrun.bat
195
+ - embulk-cli/src/main/bat/selfrun.bat.template
196
+ - embulk-cli/src/main/java/org/embulk/cli/EmbulkArguments.java
197
+ - embulk-cli/src/main/java/org/embulk/cli/EmbulkBundle.java
198
+ - embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLine.java
199
+ - embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLineException.java
195
200
  - embulk-cli/src/main/java/org/embulk/cli/EmbulkExample.java
201
+ - embulk-cli/src/main/java/org/embulk/cli/EmbulkGlobalJRubyScriptingContainer.java
196
202
  - embulk-cli/src/main/java/org/embulk/cli/EmbulkMigrate.java
197
203
  - embulk-cli/src/main/java/org/embulk/cli/EmbulkNew.java
204
+ - embulk-cli/src/main/java/org/embulk/cli/EmbulkRun.java
198
205
  - embulk-cli/src/main/java/org/embulk/cli/EmbulkSelfUpdate.java
206
+ - embulk-cli/src/main/java/org/embulk/cli/EmbulkSubcommand.java
199
207
  - embulk-cli/src/main/java/org/embulk/cli/Main.java
200
- - embulk-cli/src/main/sh/selfrun.sh
208
+ - embulk-cli/src/main/java/org/embulk/cli/parse/AbstractHelpLineDefinition.java
209
+ - embulk-cli/src/main/java/org/embulk/cli/parse/CliHelpFormatterWithHelpMessages.java
210
+ - embulk-cli/src/main/java/org/embulk/cli/parse/CliOptionsWithHelpMessages.java
211
+ - embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineHelpRequired.java
212
+ - embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineParseException.java
213
+ - embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineParser.java
214
+ - embulk-cli/src/main/java/org/embulk/cli/parse/HelpMessageAsCliOption.java
215
+ - embulk-cli/src/main/java/org/embulk/cli/parse/HelpMessageLineDefinition.java
216
+ - embulk-cli/src/main/java/org/embulk/cli/parse/OptionBehavior.java
217
+ - embulk-cli/src/main/java/org/embulk/cli/parse/OptionDefinition.java
218
+ - embulk-cli/src/main/sh/selfrun.sh.template
201
219
  - embulk-cli/src/test/java/org/embulk/cli/DummyMain.java
202
220
  - embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java
203
221
  - embulk-core/build.gradle
204
222
  - embulk-core/src/main/java/org/embulk/EmbulkEmbed.java
223
+ - embulk-core/src/main/java/org/embulk/EmbulkRunner.java
205
224
  - embulk-core/src/main/java/org/embulk/EmbulkService.java
225
+ - embulk-core/src/main/java/org/embulk/EmbulkSetup.java
206
226
  - embulk-core/src/main/java/org/embulk/EmbulkVersion.java
207
227
  - embulk-core/src/main/java/org/embulk/command/PreviewPrinter.java
208
228
  - embulk-core/src/main/java/org/embulk/command/TablePreviewPrinter.java
@@ -537,6 +557,7 @@ files:
537
557
  - embulk-docs/src/release/release-0.8.25.rst
538
558
  - embulk-docs/src/release/release-0.8.26.rst
539
559
  - embulk-docs/src/release/release-0.8.27.rst
560
+ - embulk-docs/src/release/release-0.8.28.rst
540
561
  - embulk-docs/src/release/release-0.8.3.rst
541
562
  - embulk-docs/src/release/release-0.8.4.rst
542
563
  - embulk-docs/src/release/release-0.8.5.rst
@@ -688,9 +709,6 @@ files:
688
709
  - lib/embulk.rb
689
710
  - lib/embulk/buffer.rb
690
711
  - lib/embulk/column.rb
691
- - lib/embulk/command/embulk_bundle.rb
692
- - lib/embulk/command/embulk_main.rb
693
- - lib/embulk/command/embulk_run.rb
694
712
  - lib/embulk/data/bundle/.bundle/config
695
713
  - lib/embulk/data/bundle/.ruby-version
696
714
  - lib/embulk/data/bundle/Gemfile