embulk 0.8.29-java → 0.8.30-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.
- checksums.yaml +4 -4
- data/bin/embulk +17 -15
- data/build.gradle +1 -1
- data/embulk-cli/src/main/java/org/embulk/cli/EmbulkRun.java +8 -8
- data/embulk-cli/src/main/java/org/embulk/cli/Main.java +6 -4
- data/{embulk-cli/src/main/java/org/embulk/cli → embulk-core/src/main/java/org/embulk}/EmbulkGlobalJRubyScriptingContainer.java +28 -8
- data/embulk-core/src/main/java/org/embulk/EmbulkRunner.java +72 -2
- data/embulk-core/src/main/java/org/embulk/EmbulkSetup.java +3 -62
- data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +2 -1
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +2 -1
- data/embulk-docs/src/release.rst +1 -0
- data/embulk-docs/src/release/release-0.8.30.rst +14 -0
- data/lib/embulk.rb +8 -1
- data/lib/embulk/runner.rb +8 -14
- data/lib/embulk/version.rb +1 -1
- metadata +8 -8
- data/embulk-cli/src/main/java/org/embulk/cli/EmbulkBundle.java +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8d768ff1cdca1f30819495c0e0f4543a796aa3c
|
4
|
+
data.tar.gz: 00b77520c45ddd0772147dfa694fad09a6ba6e62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d25f42dc63816c532f125df3b37556a265fcf06d6ef2b8cb97d26f1421907ca223adc27cf36307599e42c67eaecb2997c894389f8555ea3e295664a6dd1ec9c
|
7
|
+
data.tar.gz: 1873eb4116e45d7b7c28b55d54ac5b81a8fce36c65eaab573ee2ffa0ed78aea2393563cc0e158209d54a3e9b9e4855c01cb5676ddb9d54bf4ad109ca2e6a76d4
|
data/bin/embulk
CHANGED
@@ -16,16 +16,16 @@ if RUBY_PLATFORM =~ /java/i
|
|
16
16
|
# Bundler may be enabled in this path.
|
17
17
|
ENV.delete('EMBULK_BIN_ENABLE_BUNDLE')
|
18
18
|
|
19
|
-
# Handle environment variables before
|
19
|
+
# Handle environment variables before initializing the global JRuby instance in org.embulk.EmbulkRunner.
|
20
20
|
# See: https://github.com/embulk/embulk/pull/604
|
21
21
|
|
22
22
|
bundle_path = ENV['EMBULK_BUNDLE_PATH'].to_s
|
23
23
|
bundle_path = nil if bundle_path.empty?
|
24
24
|
|
25
|
-
#
|
25
|
+
# The -b or --bundle option are processed in org.embulk.EmbulkRunner. The option should be kept.
|
26
26
|
bundle_option_index = ARGV.find_index {|arg| arg == '-b' || arg == '--bundle' }
|
27
27
|
if bundle_option_index
|
28
|
-
ARGV
|
28
|
+
bundle_path = ARGV[bundle_option_index + 1]
|
29
29
|
end
|
30
30
|
|
31
31
|
if bundle_path
|
@@ -43,26 +43,28 @@ if RUBY_PLATFORM =~ /java/i
|
|
43
43
|
ENV['GEM_PATH'] = ''
|
44
44
|
ENV.delete('BUNDLE_GEMFILE')
|
45
45
|
end
|
46
|
-
|
47
|
-
require 'embulk/version'
|
48
|
-
Java::org.embulk.cli.EmbulkBundle::checkBundleWithEmbulkVersion(ARGV,
|
49
|
-
Java::JavaUtil::ArrayList.new,
|
50
|
-
Embulk::VERSION_INTERNAL)
|
51
46
|
else
|
52
47
|
# bin/embulk is started by JRuby (embulk gem for JRuby is installed).
|
53
48
|
# Bundler must be disabled in this path not to bother the JRuby's bundler.
|
49
|
+
|
50
|
+
# org.embulk.EmbulkRunner processes the -b or --bundle option. The option should be removed to disable Bundler.
|
51
|
+
# Search for -b or --bundle, and just remove it.
|
52
|
+
bundle_option_index = ARGV.find_index {|arg| arg == '-b' || arg == '--bundle' }
|
53
|
+
if bundle_option_index
|
54
|
+
STDERR.puts "-b or --bundle options do not work when Embulk is triggered from command line by JRuby."
|
55
|
+
ARGV.slice!(bundle_option_index, 2)[1]
|
56
|
+
end
|
57
|
+
|
54
58
|
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
55
59
|
Dir.glob("#{File.expand_path('../classpath', File.dirname(__FILE__))}/*").each do |f_jar|
|
56
60
|
$CLASSPATH << f_jar
|
57
61
|
end
|
58
|
-
require 'embulk/version'
|
59
|
-
# The ScriptingContainer instance below is the same JRuby instance with the one running this bin/embulk itself
|
60
|
-
# as it's LocalContextScope.SINGLETON. The instance then inherits $LOAD_PATH and $CLASSPATH configured above.
|
61
|
-
global_jruby_container = Java::org.jruby.embed.ScriptingContainer.new(
|
62
|
-
Java::org.jruby.embed.LocalContextScope::SINGLETON, Java::org.jruby.embed.LocalVariableBehavior::PERSISTENT)
|
63
|
-
embulk_run = Java::org.embulk.cli.EmbulkRun.new(Embulk::VERSION_INTERNAL, global_jruby_container)
|
64
|
-
embulk_run.run(Java::JavaUtil::ArrayList.new(ARGV), Java::JavaUtil::ArrayList.new)
|
65
62
|
end
|
63
|
+
|
64
|
+
require 'embulk/version'
|
65
|
+
embulk_run = Java::org.embulk.cli.EmbulkRun.new(Embulk::VERSION_INTERNAL)
|
66
|
+
embulk_run.run(Java::JavaUtil::ArrayList.new(ARGV), Java::JavaUtil::ArrayList.new)
|
67
|
+
|
66
68
|
exit 0
|
67
69
|
end
|
68
70
|
|
data/build.gradle
CHANGED
@@ -30,13 +30,12 @@ import org.jruby.embed.ScriptingContainer;
|
|
30
30
|
|
31
31
|
public class EmbulkRun
|
32
32
|
{
|
33
|
-
public EmbulkRun(final String embulkVersion
|
33
|
+
public EmbulkRun(final String embulkVersion)
|
34
34
|
{
|
35
35
|
this.embulkVersion = embulkVersion;
|
36
|
-
this.jrubyContainer = jrubyContainer;
|
37
36
|
}
|
38
37
|
|
39
|
-
public int run(final List<String> argsEmbulk, final List<String>
|
38
|
+
public int run(final List<String> argsEmbulk, final List<String> jrubyOptions)
|
40
39
|
{
|
41
40
|
final EmbulkArguments arguments;
|
42
41
|
try {
|
@@ -79,7 +78,7 @@ public class EmbulkRun
|
|
79
78
|
case EXEC:
|
80
79
|
case GEM:
|
81
80
|
case IRB:
|
82
|
-
return runSubcommand(subcommand, subcommandArguments, null);
|
81
|
+
return runSubcommand(subcommand, subcommandArguments, null, jrubyOptions);
|
83
82
|
default:
|
84
83
|
final EmbulkCommandLineParser parser = buildCommandLineParser(subcommand);
|
85
84
|
final EmbulkCommandLine commandLine;
|
@@ -97,7 +96,7 @@ public class EmbulkRun
|
|
97
96
|
parser.printHelp(System.err);
|
98
97
|
return 1;
|
99
98
|
}
|
100
|
-
return runSubcommand(subcommand, subcommandArguments, commandLine);
|
99
|
+
return runSubcommand(subcommand, subcommandArguments, commandLine, jrubyOptions);
|
101
100
|
}
|
102
101
|
}
|
103
102
|
|
@@ -344,7 +343,8 @@ public class EmbulkRun
|
|
344
343
|
|
345
344
|
private int runSubcommand(final EmbulkSubcommand subcommand,
|
346
345
|
final List<String> subcommandArguments,
|
347
|
-
final EmbulkCommandLine commandLine
|
346
|
+
final EmbulkCommandLine commandLine,
|
347
|
+
final List<String> jrubyOptions)
|
348
348
|
{
|
349
349
|
switch (subcommand) {
|
350
350
|
case EXAMPLE:
|
@@ -447,11 +447,12 @@ public class EmbulkRun
|
|
447
447
|
// NOTE: |EmbulkSetup.setup| returns |EmbulkEmbed| while it stores Ruby |Embulk::EmbulkRunner(EmbulkEmbed)|
|
448
448
|
// into Ruby |Embulk::Runner|.
|
449
449
|
final EmbulkRunner runner = EmbulkSetup.setup(
|
450
|
+
jrubyOptions,
|
450
451
|
commandLine.getSystemConfig(),
|
451
452
|
commandLine.getLoadPath(),
|
452
453
|
commandLine.getLoad(),
|
453
454
|
commandLine.getClasspath(),
|
454
|
-
|
455
|
+
commandLine.getBundle());
|
455
456
|
|
456
457
|
final Path configDiffPath =
|
457
458
|
(commandLine.getConfigDiff() == null ? null : Paths.get(commandLine.getConfigDiff()));
|
@@ -763,5 +764,4 @@ public class EmbulkRun
|
|
763
764
|
}
|
764
765
|
|
765
766
|
private final String embulkVersion;
|
766
|
-
private final ScriptingContainer jrubyContainer;
|
767
767
|
}
|
@@ -2,6 +2,7 @@ package org.embulk.cli;
|
|
2
2
|
|
3
3
|
import java.util.ArrayList;
|
4
4
|
import java.util.Collections;
|
5
|
+
import org.embulk.EmbulkVersion;
|
5
6
|
|
6
7
|
public class Main
|
7
8
|
{
|
@@ -18,11 +19,12 @@ public class Main
|
|
18
19
|
}
|
19
20
|
}
|
20
21
|
|
21
|
-
final String
|
22
|
-
for (
|
23
|
-
embulkArgs
|
22
|
+
final ArrayList<String> embulkArgs = new ArrayList<String>();
|
23
|
+
for (; i < args.length; ++i) {
|
24
|
+
embulkArgs.add(args[i]);
|
24
25
|
}
|
25
26
|
|
26
|
-
|
27
|
+
final EmbulkRun run = new EmbulkRun(EmbulkVersion.VERSION);
|
28
|
+
run.run(Collections.unmodifiableList(embulkArgs), Collections.unmodifiableList(jrubyOptions));
|
27
29
|
}
|
28
30
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
package org.embulk
|
1
|
+
package org.embulk;
|
2
2
|
|
3
3
|
import java.io.PrintStream;
|
4
4
|
import java.net.URISyntaxException;
|
@@ -33,7 +33,6 @@ public class EmbulkGlobalJRubyScriptingContainer
|
|
33
33
|
* Sets up a ScriptingContainer instance for global use in Embulk.
|
34
34
|
*/
|
35
35
|
public static ScriptingContainer setup(
|
36
|
-
final String[] embulkArgs,
|
37
36
|
final List<String> jrubyOptions,
|
38
37
|
final String bundlePath,
|
39
38
|
final PrintStream warning)
|
@@ -104,7 +103,16 @@ public class EmbulkGlobalJRubyScriptingContainer
|
|
104
103
|
//
|
105
104
|
// NOTE: It was written in Ruby as follows:
|
106
105
|
// $LOAD_PATH << File.expand_path('../../', File.dirname(__FILE__))
|
107
|
-
|
106
|
+
final String jrubyLoadPath;
|
107
|
+
try {
|
108
|
+
jrubyLoadPath = getEmbulkJRubyLoadPath();
|
109
|
+
}
|
110
|
+
catch (UnrecognizedJRubyLoadPathException ex) {
|
111
|
+
warning.println("[ERROR] Failed to retrieve Embulk's path.");
|
112
|
+
ex.printStackTrace(warning);
|
113
|
+
throw new RuntimeException(ex);
|
114
|
+
}
|
115
|
+
jrubyGlobalContainer.put("__internal_load_path__", jrubyLoadPath);
|
108
116
|
jrubyGlobalContainer.runScriptlet("$LOAD_PATH << File.expand_path(__internal_load_path__)");
|
109
117
|
jrubyGlobalContainer.remove("__internal_load_path__");
|
110
118
|
|
@@ -114,6 +122,17 @@ public class EmbulkGlobalJRubyScriptingContainer
|
|
114
122
|
|
115
123
|
private static final class UnrecognizedJRubyOptionException extends Exception {}
|
116
124
|
private static final class NotWorkingJRubyOptionException extends Exception {}
|
125
|
+
private static final class UnrecognizedJRubyLoadPathException extends Exception {
|
126
|
+
public UnrecognizedJRubyLoadPathException(final String message)
|
127
|
+
{
|
128
|
+
super(message);
|
129
|
+
}
|
130
|
+
|
131
|
+
public UnrecognizedJRubyLoadPathException(final String message, final Throwable cause)
|
132
|
+
{
|
133
|
+
super(message, cause);
|
134
|
+
}
|
135
|
+
}
|
117
136
|
|
118
137
|
private static void processJRubyOption(final String jrubyOption, final RubyInstanceConfig jrubyGlobalConfig)
|
119
138
|
throws UnrecognizedJRubyOptionException, NotWorkingJRubyOptionException
|
@@ -154,26 +173,27 @@ public class EmbulkGlobalJRubyScriptingContainer
|
|
154
173
|
* "/some/directory"
|
155
174
|
*/
|
156
175
|
private static String getEmbulkJRubyLoadPath()
|
176
|
+
throws UnrecognizedJRubyLoadPathException
|
157
177
|
{
|
158
178
|
final ProtectionDomain protectionDomain;
|
159
179
|
try {
|
160
180
|
protectionDomain = EmbulkGlobalJRubyScriptingContainer.class.getProtectionDomain();
|
161
181
|
}
|
162
182
|
catch (SecurityException ex) {
|
163
|
-
throw new
|
183
|
+
throw new UnrecognizedJRubyLoadPathException("Failed to achieve ProtectionDomain", ex);
|
164
184
|
}
|
165
185
|
|
166
186
|
final CodeSource codeSource = protectionDomain.getCodeSource();
|
167
187
|
if (codeSource == null) {
|
168
|
-
throw new
|
188
|
+
throw new UnrecognizedJRubyLoadPathException("Failed to achieve CodeSource");
|
169
189
|
}
|
170
190
|
|
171
191
|
final URL locationUrl = codeSource.getLocation();
|
172
192
|
if (locationUrl == null) {
|
173
|
-
throw new
|
193
|
+
throw new UnrecognizedJRubyLoadPathException("Failed to achieve location");
|
174
194
|
}
|
175
195
|
else if (!locationUrl.getProtocol().equals("file")) {
|
176
|
-
throw new
|
196
|
+
throw new UnrecognizedJRubyLoadPathException("Invalid location: " + locationUrl.toString());
|
177
197
|
}
|
178
198
|
|
179
199
|
final Path locationPath;
|
@@ -181,7 +201,7 @@ public class EmbulkGlobalJRubyScriptingContainer
|
|
181
201
|
locationPath = Paths.get(locationUrl.toURI());
|
182
202
|
}
|
183
203
|
catch (URISyntaxException ex) {
|
184
|
-
throw new
|
204
|
+
throw new UnrecognizedJRubyLoadPathException("Invalid location: " + locationUrl.toString(), ex);
|
185
205
|
}
|
186
206
|
|
187
207
|
if (Files.isDirectory(locationPath)) { // Out of a JAR file
|
@@ -8,6 +8,7 @@ import java.nio.file.Path;
|
|
8
8
|
import java.nio.file.Paths;
|
9
9
|
import java.nio.file.StandardOpenOption;
|
10
10
|
import java.util.Collections;
|
11
|
+
import java.util.List;
|
11
12
|
import java.util.Map;
|
12
13
|
import java.util.regex.Pattern;
|
13
14
|
import org.embulk.command.PreviewPrinter;
|
@@ -38,9 +39,19 @@ public class EmbulkRunner
|
|
38
39
|
{
|
39
40
|
// |EmbulkSetup.setup| initializes:
|
40
41
|
// new EmbulkRunner(embed)
|
41
|
-
public EmbulkRunner(final EmbulkEmbed embed
|
42
|
+
public EmbulkRunner(final EmbulkEmbed embed,
|
43
|
+
final List<String> jrubyOptions,
|
44
|
+
final List<String> loadPaths,
|
45
|
+
final List<String> pluginPaths,
|
46
|
+
final List<String> classpaths,
|
47
|
+
final String bundlePath)
|
42
48
|
{
|
43
49
|
this.embed = embed; // org.embulk.EmbulkEmbed
|
50
|
+
this.jrubyOptions = jrubyOptions;
|
51
|
+
this.loadPaths = loadPaths;
|
52
|
+
this.pluginPaths = pluginPaths;
|
53
|
+
this.classpaths = classpaths;
|
54
|
+
this.bundlePath = bundlePath;
|
44
55
|
}
|
45
56
|
|
46
57
|
/**
|
@@ -217,6 +228,9 @@ public class EmbulkRunner
|
|
217
228
|
private void guessInternal(final ConfigSource configSource, final Path outputPath)
|
218
229
|
throws IOException
|
219
230
|
{
|
231
|
+
initializeGlobalJRubyScriptingContainer(
|
232
|
+
this.jrubyOptions, this.loadPaths, this.pluginPaths, this.classpaths, this.bundlePath);
|
233
|
+
|
220
234
|
try {
|
221
235
|
checkFileWritable(outputPath);
|
222
236
|
}
|
@@ -239,6 +253,9 @@ public class EmbulkRunner
|
|
239
253
|
private void previewInternal(final ConfigSource configSource, final String format)
|
240
254
|
throws IOException
|
241
255
|
{
|
256
|
+
initializeGlobalJRubyScriptingContainer(
|
257
|
+
this.jrubyOptions, this.loadPaths, this.pluginPaths, this.classpaths, this.bundlePath);
|
258
|
+
|
242
259
|
final PreviewResult previewResult = this.embed.preview(configSource);
|
243
260
|
final ModelManager modelManager = this.embed.getModelManager();
|
244
261
|
|
@@ -266,6 +283,9 @@ public class EmbulkRunner
|
|
266
283
|
final Path resumeStatePath)
|
267
284
|
throws IOException
|
268
285
|
{
|
286
|
+
initializeGlobalJRubyScriptingContainer(
|
287
|
+
this.jrubyOptions, this.loadPaths, this.pluginPaths, this.classpaths, this.bundlePath);
|
288
|
+
|
269
289
|
try {
|
270
290
|
checkFileWritable(outputPath);
|
271
291
|
}
|
@@ -397,7 +417,9 @@ public class EmbulkRunner
|
|
397
417
|
return this.embed.newConfigLoader().fromYamlString(
|
398
418
|
runLiquid(new String(Files.readAllBytes(configFilePath), StandardCharsets.UTF_8),
|
399
419
|
templateParams,
|
400
|
-
templateIncludePath
|
420
|
+
(templateIncludePath == null
|
421
|
+
? configFilePath.toAbsolutePath().getParent().toString()
|
422
|
+
: templateIncludePath)));
|
401
423
|
}
|
402
424
|
else if (EXT_YAML.matcher(configFilePath.toString()).matches()) {
|
403
425
|
return this.embed.newConfigLoader().fromYamlString(
|
@@ -518,6 +540,49 @@ public class EmbulkRunner
|
|
518
540
|
// end
|
519
541
|
// end
|
520
542
|
|
543
|
+
// TODO: Check if it is required to process JRuby options.
|
544
|
+
private void initializeGlobalJRubyScriptingContainer(
|
545
|
+
final List<String> jrubyOptions,
|
546
|
+
final List<String> loadPaths,
|
547
|
+
final List<String> pluginPaths,
|
548
|
+
final List<String> classpaths,
|
549
|
+
final String bundlePath)
|
550
|
+
{
|
551
|
+
final ScriptingContainer globalJRubyContainer =
|
552
|
+
EmbulkGlobalJRubyScriptingContainer.setup(jrubyOptions, bundlePath, System.err);
|
553
|
+
|
554
|
+
// first $LOAD_PATH has highet priority. later load_paths should have highest priority.
|
555
|
+
for (final String loadPath : loadPaths) {
|
556
|
+
// ruby script directory (use unshift to make it highest priority)
|
557
|
+
globalJRubyContainer.put("__internal_load_path__", loadPath);
|
558
|
+
globalJRubyContainer.runScriptlet("$LOAD_PATH.unshift File.expand_path(__internal_load_path__)");
|
559
|
+
globalJRubyContainer.remove("__internal_load_path__");
|
560
|
+
}
|
561
|
+
|
562
|
+
// # Gem::StubSpecification is an internal API that seems chainging often.
|
563
|
+
// # Gem::Specification.add_spec is deprecated also. Therefore, here makes
|
564
|
+
// # -L <path> option alias of -I <path>/lib by assuming that *.gemspec file
|
565
|
+
// # always has require_paths = ["lib"].
|
566
|
+
for (final String pluginPath : pluginPaths) {
|
567
|
+
globalJRubyContainer.put("__internal_plugin_path__", pluginPath);
|
568
|
+
globalJRubyContainer.runScriptlet("$LOAD_PATH.unshift File.expand_path(File.join(__internal_plugin_path__, 'lib'))");
|
569
|
+
globalJRubyContainer.remove("__internal_plugin_path__");
|
570
|
+
}
|
571
|
+
|
572
|
+
for (final String classpath : classpaths) {
|
573
|
+
globalJRubyContainer.put("__internal_classpath__", classpath);
|
574
|
+
// $CLASSPATH object doesn't have concat method
|
575
|
+
globalJRubyContainer.runScriptlet("$CLASSPATH << __internal_classpath__");
|
576
|
+
globalJRubyContainer.remove("__internal_classpath__");
|
577
|
+
}
|
578
|
+
|
579
|
+
// see also embulk/java/bootstrap.rb loaded by JRubyScriptingModule
|
580
|
+
globalJRubyContainer.runScriptlet("module Embulk; end");
|
581
|
+
globalJRubyContainer.put("__internal_embulk_runner_java__", this);
|
582
|
+
globalJRubyContainer.runScriptlet("Embulk.const_set :Runner, Embulk::EmbulkRunner.new(__internal_embulk_runner_java__)");
|
583
|
+
globalJRubyContainer.remove("__internal_embulk_runner_java__");
|
584
|
+
}
|
585
|
+
|
521
586
|
// NOTE: The root logger directly from |LoggerFactory|, not from |Exec.getLogger| as it's outside of |Exec.doWith|.
|
522
587
|
private static final Logger rootLogger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
|
523
588
|
|
@@ -525,4 +590,9 @@ public class EmbulkRunner
|
|
525
590
|
private final Pattern EXT_YAML_LIQUID = Pattern.compile(".*\\.ya?ml\\.liquid$");
|
526
591
|
|
527
592
|
private final EmbulkEmbed embed;
|
593
|
+
private final List<String> jrubyOptions;
|
594
|
+
private final List<String> loadPaths;
|
595
|
+
private final List<String> pluginPaths;
|
596
|
+
private final List<String> classpaths;
|
597
|
+
private final String bundlePath;
|
528
598
|
}
|
@@ -7,9 +7,6 @@ import java.util.HashMap;
|
|
7
7
|
import java.util.List;
|
8
8
|
import java.util.Map;
|
9
9
|
import org.embulk.config.ConfigSource;
|
10
|
-
import org.jruby.embed.LocalContextScope;
|
11
|
-
import org.jruby.embed.LocalVariableBehavior;
|
12
|
-
import org.jruby.embed.ScriptingContainer;
|
13
10
|
|
14
11
|
/**
|
15
12
|
* EmbulkSetup initiates an EmbulkRunner instance. It was originally implemented with Ruby in lib/embulk.rb.
|
@@ -19,26 +16,13 @@ import org.jruby.embed.ScriptingContainer;
|
|
19
16
|
*/
|
20
17
|
public class EmbulkSetup
|
21
18
|
{
|
22
|
-
@Deprecated
|
23
|
-
public static EmbulkRunner setupWithNewScriptingContainer(final Map<String, Object> systemConfigGiven)
|
24
|
-
{
|
25
|
-
// The JRuby instance is a global singleton so that the settings here affects later execution.
|
26
|
-
// The local variable should be persistent so that local variables are set through ScriptingContainer.put.
|
27
|
-
final ScriptingContainer globalJRubyContainer =
|
28
|
-
new ScriptingContainer(LocalContextScope.SINGLETON, LocalVariableBehavior.PERSISTENT);
|
29
|
-
return setup(systemConfigGiven,
|
30
|
-
Collections.<String>emptyList(),
|
31
|
-
Collections.<String>emptyList(),
|
32
|
-
Collections.<String>emptyList(),
|
33
|
-
globalJRubyContainer);
|
34
|
-
}
|
35
|
-
|
36
19
|
public static EmbulkRunner setup(
|
20
|
+
final List<String> jrubyOptions,
|
37
21
|
final Map<String, Object> systemConfigGiven,
|
38
22
|
final List<String> loadPaths,
|
39
23
|
final List<String> pluginPaths,
|
40
24
|
final List<String> classpaths,
|
41
|
-
final
|
25
|
+
final String bundlePath)
|
42
26
|
{
|
43
27
|
// NOTE: When it was in Ruby "require 'json'" was required to format the system config into a JSON string.
|
44
28
|
|
@@ -66,49 +50,6 @@ public class EmbulkSetup
|
|
66
50
|
bootstrap.setSystemConfig(systemConfig);
|
67
51
|
final EmbulkEmbed embed = bootstrap.initialize(); // see embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.
|
68
52
|
|
69
|
-
|
70
|
-
setupClasspaths(classpaths, globalJRubyContainer);
|
71
|
-
|
72
|
-
// see also embulk/java/bootstrap.rb loaded by JRubyScriptingModule
|
73
|
-
globalJRubyContainer.runScriptlet("module Embulk; end");
|
74
|
-
globalJRubyContainer.put("__internal_embulk_setup_embed__", embed);
|
75
|
-
globalJRubyContainer.runScriptlet("Embulk.const_set :Runner, Embulk::EmbulkRunner.new(__internal_embulk_setup_embed__)");
|
76
|
-
globalJRubyContainer.remove("__internal_embulk_setup_embed__");
|
77
|
-
|
78
|
-
return new EmbulkRunner(embed);
|
79
|
-
}
|
80
|
-
|
81
|
-
private static void setupLoadPaths(
|
82
|
-
final List<String> loadPaths,
|
83
|
-
final List<String> pluginPaths,
|
84
|
-
final ScriptingContainer globalJRubyContainer)
|
85
|
-
{
|
86
|
-
// first $LOAD_PATH has highet priority. later load_paths should have highest priority.
|
87
|
-
for (final String loadPath : loadPaths) {
|
88
|
-
// ruby script directory (use unshift to make it highest priority)
|
89
|
-
globalJRubyContainer.put("__internal_load_path__", loadPath);
|
90
|
-
globalJRubyContainer.runScriptlet("$LOAD_PATH.unshift File.expand_path(__internal_load_path__)");
|
91
|
-
globalJRubyContainer.remove("__internal_load_path__");
|
92
|
-
}
|
93
|
-
|
94
|
-
// # Gem::StubSpecification is an internal API that seems chainging often.
|
95
|
-
// # Gem::Specification.add_spec is deprecated also. Therefore, here makes
|
96
|
-
// # -L <path> option alias of -I <path>/lib by assuming that *.gemspec file
|
97
|
-
// # always has require_paths = ["lib"].
|
98
|
-
for (final String pluginPath : pluginPaths) {
|
99
|
-
globalJRubyContainer.put("__internal_plugin_path__", pluginPath);
|
100
|
-
globalJRubyContainer.runScriptlet("$LOAD_PATH.unshift File.expand_path(File.join(__internal_plugin_path__, 'lib')");
|
101
|
-
globalJRubyContainer.remove("__internal_plugin_path__");
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
private static void setupClasspaths(final List<String> classpaths, final ScriptingContainer globalJRubyContainer)
|
106
|
-
{
|
107
|
-
for (final String classpath : classpaths) {
|
108
|
-
globalJRubyContainer.put("__internal_classpath__", classpath);
|
109
|
-
// $CLASSPATH object doesn't have concat method
|
110
|
-
globalJRubyContainer.runScriptlet("$CLASSPATH << __internal_classpath__");
|
111
|
-
globalJRubyContainer.remove("__internal_classpath__");
|
112
|
-
}
|
53
|
+
return new EmbulkRunner(embed, jrubyOptions, loadPaths, pluginPaths, classpaths, bundlePath);
|
113
54
|
}
|
114
55
|
}
|
@@ -203,8 +203,9 @@ public class ExecSession
|
|
203
203
|
{
|
204
204
|
ConfigSource config = Exec.newConfigSource();
|
205
205
|
config.set("timezone", timezone.getID());
|
206
|
+
// TODO: Stop creating the |FormatterTask| as |TimestampFormater.FormatterTask| is deprecated since v0.6.14.
|
206
207
|
FormatterTask formatterTask = config.loadConfig(FormatterTask.class);
|
207
|
-
return new TimestampFormatter(format, formatterTask);
|
208
|
+
return new TimestampFormatter(format, formatterTask.getTimeZone());
|
208
209
|
}
|
209
210
|
|
210
211
|
public TempFileSpace getTempFileSpace()
|
@@ -26,13 +26,13 @@ public class TimestampFormat
|
|
26
26
|
@Deprecated
|
27
27
|
public TimestampFormatter newFormatter(TimestampFormatter.FormatterTask task)
|
28
28
|
{
|
29
|
-
return new TimestampFormatter(format, task);
|
29
|
+
return new TimestampFormatter(format, task.getTimeZone());
|
30
30
|
}
|
31
31
|
|
32
32
|
@Deprecated
|
33
33
|
public TimestampParser newParser(TimestampParser.ParserTask task)
|
34
34
|
{
|
35
|
-
return new TimestampParser(format, task);
|
35
|
+
return new TimestampParser(format, task.getDefaultTimeZone());
|
36
36
|
}
|
37
37
|
|
38
38
|
private static Set<String> availableTimeZoneNames = ImmutableSet.copyOf(DateTimeZone.getAvailableIDs());
|
@@ -16,6 +16,7 @@ public class PagePrinter
|
|
16
16
|
private final TimestampFormatter[] timestampFormatters;
|
17
17
|
private final ArrayList<String> record;
|
18
18
|
|
19
|
+
// TODO: Update this constructor because |TimestampFormater.FormatterTask| is deprecated since v0.6.14.
|
19
20
|
public PagePrinter(Schema schema, TimestampFormatter.FormatterTask task)
|
20
21
|
{
|
21
22
|
this.schema = schema;
|
@@ -23,7 +24,7 @@ public class PagePrinter
|
|
23
24
|
for (int i=0; i < timestampFormatters.length; i++) {
|
24
25
|
if (schema.getColumnType(i) instanceof TimestampType) {
|
25
26
|
TimestampType type = (TimestampType) schema.getColumnType(i);
|
26
|
-
timestampFormatters[i] = new TimestampFormatter(type.getFormat(), task);
|
27
|
+
timestampFormatters[i] = new TimestampFormatter(type.getFormat(), task.getTimeZone());
|
27
28
|
}
|
28
29
|
}
|
29
30
|
|
data/embulk-docs/src/release.rst
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
Release 0.8.30
|
2
|
+
==================================
|
3
|
+
|
4
|
+
General Changes
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* Fix -L option syntax error [#759]
|
8
|
+
* Make Liquid's "include" work again [#757] [#761]
|
9
|
+
* Avoid calling deprecated constructors and using `TimestampFormatter.FormatterTask` [#760] [#762] [#763]
|
10
|
+
* Some refactoring [#755]
|
11
|
+
|
12
|
+
Release Date
|
13
|
+
------------------
|
14
|
+
2017-08-23
|
data/lib/embulk.rb
CHANGED
@@ -63,6 +63,13 @@ module Embulk
|
|
63
63
|
|
64
64
|
require_classpath(true)
|
65
65
|
|
66
|
-
Java::org.embulk.EmbulkSetup::
|
66
|
+
Java::org.embulk.EmbulkSetup::setup(
|
67
|
+
Java::java.util.ArrayList.new(),
|
68
|
+
Java::java.util.HashMap.new(system_config),
|
69
|
+
Java::java.util.ArrayList.new(),
|
70
|
+
Java::java.util.ArrayList.new(),
|
71
|
+
Java::java.util.ArrayList.new(),
|
72
|
+
nil
|
73
|
+
)
|
67
74
|
end
|
68
75
|
end
|
data/lib/embulk/runner.rb
CHANGED
@@ -1,23 +1,19 @@
|
|
1
1
|
module Embulk
|
2
2
|
|
3
|
-
# Embulk.setup initializes:
|
4
|
-
# Runner = EmbulkRunner.new
|
5
|
-
|
6
3
|
class EmbulkRunner
|
7
|
-
def initialize(
|
8
|
-
@
|
4
|
+
def initialize(runner_java)
|
5
|
+
@runner_java = runner_java # Java::org.embulk.EmbulkRunner
|
9
6
|
end
|
10
7
|
|
11
8
|
def guess(config, options={})
|
12
9
|
output_path =
|
13
10
|
(options[:next_config_output_path] ? Java::java.lang.String.new(options[:next_config_output_path]) : nil)
|
14
|
-
embulk_runner_java = Java::org.embulk.EmbulkRunner.new(@embed)
|
15
11
|
|
16
12
|
case config
|
17
13
|
when String
|
18
|
-
|
14
|
+
@runner_java.guess(Java::java.lang.String.new(config), output_path)
|
19
15
|
when Hash, DataSource
|
20
|
-
|
16
|
+
@runner_java.guess(DataSource.new(config).to_java, output_path)
|
21
17
|
end
|
22
18
|
|
23
19
|
nil
|
@@ -25,13 +21,12 @@ module Embulk
|
|
25
21
|
|
26
22
|
def preview(config, options={})
|
27
23
|
format = (options[:format] ? Java::java.lang.String.new(options[:format]) : nil)
|
28
|
-
embulk_runner_java = Java::org.embulk.EmbulkRunner.new(@embed)
|
29
24
|
|
30
25
|
case config
|
31
26
|
when String
|
32
|
-
|
27
|
+
@runner_java.preview(Java::java.lang.String.new(config), format)
|
33
28
|
when Hash, DataSource
|
34
|
-
|
29
|
+
@runner_java.preview(DataSource.new(config).to_java, format)
|
35
30
|
end
|
36
31
|
|
37
32
|
nil
|
@@ -44,13 +39,12 @@ module Embulk
|
|
44
39
|
(options[:next_config_output_path] ? Java::java.lang.String.new(options[:next_config_output_path]) : nil)
|
45
40
|
resume_state_path =
|
46
41
|
(options[:resume_state_path] ? Java::java.lang.String.new(options[:resume_state_path]) : nil)
|
47
|
-
embulk_runner_java = Java::org.embulk.EmbulkRunner.new(@embed)
|
48
42
|
|
49
43
|
case config
|
50
44
|
when String
|
51
|
-
|
45
|
+
@runner_java.run(Java::java.lang.String.new(config), config_diff_path, output_path, resume_state_path)
|
52
46
|
when Hash, DataSource
|
53
|
-
|
47
|
+
@runner_java.run(DataSource.new(config).to_java, config_diff_path, output_path, resume_state_path)
|
54
48
|
end
|
55
49
|
|
56
50
|
nil
|
data/lib/embulk/version.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Embulk
|
4
4
|
@@warned = false
|
5
5
|
|
6
|
-
VERSION_INTERNAL = '0.8.
|
6
|
+
VERSION_INTERNAL = '0.8.30'
|
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.
|
4
|
+
version: 0.8.30
|
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-08-
|
11
|
+
date: 2017-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -155,10 +155,10 @@ files:
|
|
155
155
|
- classpath/commons-compress-1.10.jar
|
156
156
|
- classpath/commons-lang-2.4.jar
|
157
157
|
- classpath/commons-lang3-3.4.jar
|
158
|
-
- classpath/embulk-cli-0.8.
|
159
|
-
- classpath/embulk-core-0.8.
|
160
|
-
- classpath/embulk-jruby-strptime-0.8.
|
161
|
-
- classpath/embulk-standards-0.8.
|
158
|
+
- classpath/embulk-cli-0.8.30.jar
|
159
|
+
- classpath/embulk-core-0.8.30.jar
|
160
|
+
- classpath/embulk-jruby-strptime-0.8.30.jar
|
161
|
+
- classpath/embulk-standards-0.8.30.jar
|
162
162
|
- classpath/guava-18.0.jar
|
163
163
|
- classpath/guice-4.0.jar
|
164
164
|
- classpath/guice-bootstrap-0.1.1.jar
|
@@ -194,11 +194,9 @@ files:
|
|
194
194
|
- embulk-cli/build.gradle
|
195
195
|
- embulk-cli/src/main/bat/selfrun.bat.template
|
196
196
|
- embulk-cli/src/main/java/org/embulk/cli/EmbulkArguments.java
|
197
|
-
- embulk-cli/src/main/java/org/embulk/cli/EmbulkBundle.java
|
198
197
|
- embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLine.java
|
199
198
|
- embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLineException.java
|
200
199
|
- embulk-cli/src/main/java/org/embulk/cli/EmbulkExample.java
|
201
|
-
- embulk-cli/src/main/java/org/embulk/cli/EmbulkGlobalJRubyScriptingContainer.java
|
202
200
|
- embulk-cli/src/main/java/org/embulk/cli/EmbulkMigrate.java
|
203
201
|
- embulk-cli/src/main/java/org/embulk/cli/EmbulkNew.java
|
204
202
|
- embulk-cli/src/main/java/org/embulk/cli/EmbulkRun.java
|
@@ -220,6 +218,7 @@ files:
|
|
220
218
|
- embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java
|
221
219
|
- embulk-core/build.gradle
|
222
220
|
- embulk-core/src/main/java/org/embulk/EmbulkEmbed.java
|
221
|
+
- embulk-core/src/main/java/org/embulk/EmbulkGlobalJRubyScriptingContainer.java
|
223
222
|
- embulk-core/src/main/java/org/embulk/EmbulkRunner.java
|
224
223
|
- embulk-core/src/main/java/org/embulk/EmbulkService.java
|
225
224
|
- embulk-core/src/main/java/org/embulk/EmbulkSetup.java
|
@@ -560,6 +559,7 @@ files:
|
|
560
559
|
- embulk-docs/src/release/release-0.8.28.rst
|
561
560
|
- embulk-docs/src/release/release-0.8.29.rst
|
562
561
|
- embulk-docs/src/release/release-0.8.3.rst
|
562
|
+
- embulk-docs/src/release/release-0.8.30.rst
|
563
563
|
- embulk-docs/src/release/release-0.8.4.rst
|
564
564
|
- embulk-docs/src/release/release-0.8.5.rst
|
565
565
|
- embulk-docs/src/release/release-0.8.6.rst
|
@@ -1,44 +0,0 @@
|
|
1
|
-
package org.embulk.cli;
|
2
|
-
|
3
|
-
import java.util.Arrays;
|
4
|
-
import java.util.Collections;
|
5
|
-
import java.util.List;
|
6
|
-
import org.embulk.EmbulkVersion;
|
7
|
-
import org.jruby.embed.ScriptingContainer;
|
8
|
-
|
9
|
-
public class EmbulkBundle
|
10
|
-
{
|
11
|
-
public static void checkBundle(
|
12
|
-
final String[] embulkArgs,
|
13
|
-
final List<String> jrubyOptions)
|
14
|
-
{
|
15
|
-
checkBundleWithEmbulkVersion(embulkArgs, jrubyOptions, EmbulkVersion.VERSION);
|
16
|
-
}
|
17
|
-
|
18
|
-
// It accepts |embulkVersion| so that it can receive Embulk's version from Ruby (bin/embulk).
|
19
|
-
public static void checkBundleWithEmbulkVersion(
|
20
|
-
final String[] embulkArgs,
|
21
|
-
final List<String> jrubyOptions,
|
22
|
-
final String embulkVersion)
|
23
|
-
{
|
24
|
-
final String bundlePath = System.getenv("EMBULK_BUNDLE_PATH");
|
25
|
-
|
26
|
-
final ScriptingContainer globalJRubyContainer =
|
27
|
-
EmbulkGlobalJRubyScriptingContainer.setup(embulkArgs, jrubyOptions, bundlePath, System.err);
|
28
|
-
|
29
|
-
// NOTE: It was written in Ruby as follows in case |bundlePath| != null:
|
30
|
-
// begin
|
31
|
-
// require 'embulk/command/embulk_main'
|
32
|
-
// rescue LoadError
|
33
|
-
// $LOAD_PATH << File.expand_path('../../', File.dirname(__FILE__))
|
34
|
-
// require 'embulk/command/embulk_main'
|
35
|
-
// end
|
36
|
-
//
|
37
|
-
// NOTE: It was written in Ruby as follows in case |bundlePath| == null::
|
38
|
-
// require 'embulk/command/embulk_main'
|
39
|
-
//
|
40
|
-
// TODO: Consider handling LoadError or similar errors.
|
41
|
-
final EmbulkRun runner = new EmbulkRun(embulkVersion, globalJRubyContainer);
|
42
|
-
runner.run(Collections.unmodifiableList(Arrays.asList(embulkArgs)), jrubyOptions);
|
43
|
-
}
|
44
|
-
}
|