embulk 0.8.6 → 0.8.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eaa5606c99e0324b6e5057569535386d5b9e3988
4
- data.tar.gz: a55d68015412d824e5c77e310da4564488898590
3
+ metadata.gz: d0a538ad48c7719c664804156957e242d4d26db1
4
+ data.tar.gz: 2fb8a410c1d8a09e05f74f84797f8b9e619e9d13
5
5
  SHA512:
6
- metadata.gz: 05ede9f4f6ec3578e198827ef7e26a1089c2271c3a00c5c506b9bf7b702ce1ee650c7bcf4a39f9c3c4ce877a84d8348426c728d6a34b50c5ca46a35660adb7ae
7
- data.tar.gz: 8b580c8b98a182465a70a3088de6c283a6b3c80c334176f40e3b08af7b915caf0918484140532f599393e2ff302cced24e79d438b8bb7defe9c8067bfe2a807a
6
+ metadata.gz: 179de8013257589f33ad8c6dcc26d06e4acea07c48b448e66d96616c785665ffb3d43980e66d24a595d00c14429d3ba7053c71739c2ddbff5b4f6bca2000705a
7
+ data.tar.gz: 1aa03816f66d0d60fac7464c56d3f967a84d020e552c7e07c528c3a450ae8039d01b77192fdfb2b3ed4a2e8aada696ef33dee08ba000d9028f3166697f5d285a
data/build.gradle CHANGED
@@ -16,7 +16,7 @@ def release_projects = [project(":embulk-core"), project(":embulk-standards")]
16
16
 
17
17
  allprojects {
18
18
  group = 'org.embulk'
19
- version = '0.8.6'
19
+ version = '0.8.7'
20
20
 
21
21
  ext {
22
22
  jrubyVersion = '9.0.5.0'
@@ -232,10 +232,10 @@ project(':embulk-cli') {
232
232
  append("${rootProject.projectDir}/COPYING")
233
233
  }
234
234
 
235
- task classpath(type: Copy) {
235
+ task classpath(type: Copy, dependsOn: ['jar']) {
236
236
  File dest = file("${rootProject.projectDir}/classpath")
237
237
  doFirst { dest.deleteDir() }
238
- from configurations.runtime
238
+ from configurations.runtime + files("${project.libsDir}/${project.name}-${project.version}.jar")
239
239
  into dest
240
240
  }
241
241
  }
@@ -300,7 +300,7 @@ task releaseCheck << {
300
300
  println "Ready. Run 'release' task."
301
301
  }
302
302
 
303
- task release(dependsOn: ["releaseCheck", "bintrayUpload", "rubyGemsUpload"]) << {
303
+ task release(dependsOn: ["cli", "releaseCheck", "bintrayUpload", "rubyGemsUpload"]) << {
304
304
  println """
305
305
  Manual operations:
306
306
 
@@ -142,14 +142,18 @@ class TaskSerDe
142
142
  Map<String, Object> objects = new ConcurrentHashMap<String, Object>();
143
143
  HashMap<String, FieldEntry> unusedMappings = new HashMap<>(mappings);
144
144
 
145
- JsonToken current;
146
- current = jp.getCurrentToken();
145
+ String key;
146
+ JsonToken current = jp.getCurrentToken();
147
147
  if (current == JsonToken.START_OBJECT) {
148
148
  current = jp.nextToken();
149
+ key = jp.getCurrentName();
149
150
  }
150
- for (; current != JsonToken.END_OBJECT; current = jp.nextToken()) {
151
- String key = jp.getCurrentName();
152
- current = jp.nextToken();
151
+ else {
152
+ key = jp.nextFieldName();
153
+ }
154
+
155
+ for (; key != null; key = jp.nextFieldName()) {
156
+ JsonToken t = jp.nextToken(); // to get to value
153
157
  FieldEntry field = mappings.get(key);
154
158
  if (field == null) {
155
159
  jp.skipChildren();
@@ -13,6 +13,7 @@ import org.embulk.config.Task;
13
13
  import org.embulk.config.Config;
14
14
  import org.embulk.config.ConfigDefault;
15
15
  import org.embulk.spi.FileInput;
16
+ import static java.nio.charset.StandardCharsets.UTF_8;
16
17
 
17
18
  public class LineDecoder
18
19
  implements AutoCloseable, Iterable<String>
@@ -33,10 +34,12 @@ public class LineDecoder
33
34
 
34
35
  private final FileInputInputStream inputStream;
35
36
  private final BufferedReader reader;
37
+ private final Charset charset;
36
38
 
37
39
  public LineDecoder(FileInput in, DecoderTask task)
38
40
  {
39
- CharsetDecoder decoder = task.getCharset()
41
+ this.charset = task.getCharset();
42
+ CharsetDecoder decoder = charset
40
43
  .newDecoder()
41
44
  .onMalformedInput(CodingErrorAction.REPLACE) // TODO configurable?
42
45
  .onUnmappableCharacter(CodingErrorAction.REPLACE); // TODO configurable?
@@ -46,7 +49,43 @@ public class LineDecoder
46
49
 
47
50
  public boolean nextFile()
48
51
  {
49
- return inputStream.nextFile();
52
+ boolean has = inputStream.nextFile();
53
+ if (has && charset.equals(UTF_8)) {
54
+ skipBom();
55
+ }
56
+ return has;
57
+ }
58
+
59
+ private void skipBom()
60
+ {
61
+ boolean skip = false;
62
+ try {
63
+ if (charset.equals(UTF_8)) {
64
+ reader.mark(3);
65
+ int firstChar = reader.read();
66
+ if (firstChar == 0xFEFF) {
67
+ // skip BOM bytes
68
+ skip = true;
69
+ }
70
+ }
71
+ }
72
+ catch (IOException ex) {
73
+ }
74
+ finally {
75
+ if (skip) {
76
+ // firstChar is skipped
77
+ }
78
+ else {
79
+ // rollback to the marked position
80
+ try {
81
+ reader.reset();
82
+ }
83
+ catch (IOException ex) {
84
+ // unexpected
85
+ throw new RuntimeException(ex);
86
+ }
87
+ }
88
+ }
50
89
  }
51
90
 
52
91
  public String poll()
@@ -4,6 +4,7 @@ Release Notes
4
4
  .. toctree::
5
5
  :maxdepth: 1
6
6
 
7
+ release/release-0.8.7
7
8
  release/release-0.8.6
8
9
  release/release-0.8.5
9
10
  release/release-0.8.4
@@ -0,0 +1,18 @@
1
+ Release 0.8.7
2
+ ==================================
3
+
4
+ General Changes
5
+ ------------------
6
+
7
+ * LineDecoder skips UTF-8 BOM appropriately.
8
+
9
+ * Timestamp guess uses ``%z`` instead of ``%Z``. Parsing behavior doesn't change but formatting behavior changes if output plugins use guessed configuration to format timestamp (this is unlikely because guessed configuration is most likely used by input plugins to parse timestamp).
10
+
11
+ * Fix uninitialized constant MessagePack (@sonots++)
12
+
13
+ * Fixed a possible busy loop at TaskDeserializer.
14
+
15
+
16
+ Release Date
17
+ ------------------
18
+ 2016-03-04
@@ -107,11 +107,15 @@ module Embulk::Guess
107
107
  format << '%N'
108
108
  end
109
109
 
110
- when :zone_off
111
- format << '%z'
112
-
113
- when :zone_abb
114
- format << '%Z'
110
+ when :zone
111
+ case option
112
+ when :extended
113
+ format << '%:z'
114
+ else
115
+ # :simple, :abb
116
+ # don't use %Z even with :abb: https://github.com/jruby/jruby/issues/3702
117
+ format << '%z'
118
+ end
115
119
 
116
120
  else
117
121
  raise "Unknown part: #{@parts[i]}"
@@ -275,12 +279,16 @@ module Embulk::Guess
275
279
 
276
280
  if zm = /^#{ZONE}$/.match(rest)
277
281
  delimiters << (zm["zone_space"] || '')
282
+ parts << :zone
278
283
  if zm["zone_off"]
279
- parts << :zone_off
284
+ if zm["zone_off"].include?(':')
285
+ part_options << :extended
286
+ else
287
+ part_options << :simple
288
+ end
280
289
  else
281
- parts << :zone_abb
290
+ part_options << :abb
282
291
  end
283
- part_options << nil
284
292
 
285
293
  return GuessMatch.new(delimiters, parts, part_options)
286
294
 
@@ -334,8 +342,16 @@ module Embulk::Guess
334
342
  format << "%d %b %Y"
335
343
  format << " %H:%M" if m['time']
336
344
  format << ":%S" if m['second']
337
- format << " %z" if m['zone_off']
338
- format << " %Z" if m['zone_abb']
345
+ if m['zone_off']
346
+ if m['zone_off'].include?(':')
347
+ format << " %:z"
348
+ else
349
+ format << " %z"
350
+ end
351
+ elsif m['zone_abb']
352
+ # don't use %Z: https://github.com/jruby/jruby/issues/3702
353
+ format << " %z" if m['zone_abb']
354
+ end
339
355
  SimpleMatch.new(format)
340
356
  else
341
357
  nil
data/lib/embulk/schema.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module Embulk
2
2
 
3
3
  require 'embulk/column'
4
+ require 'msgpack'
4
5
 
5
6
  class Schema < Array
6
7
  def initialize(columns)
@@ -1,3 +1,3 @@
1
1
  module Embulk
2
- VERSION = '0.8.6'
2
+ VERSION = '0.8.7'
3
3
  end
@@ -66,24 +66,25 @@ class TimeFormatGuessTest < ::Test::Unit::TestCase
66
66
  assert_guess "%Y-%m-%dT%H:%M:%S", "2007-04-06T13:47:30"
67
67
  assert_guess "%Y-%m-%dT%H:%M:%S%z", "2007-04-06T13:47:30Z"
68
68
  assert_guess "%Y-%m-%dT%H:%M:%S%z", "2007-04-06T13:47:30+00"
69
- assert_guess "%Y-%m-%dT%H:%M:%S%z", "2007-04-06T13:47:30+00:00"
69
+ assert_guess "%Y-%m-%dT%H:%M:%S%:z", "2007-04-06T13:47:30+00:00"
70
70
  assert_guess "%Y-%m-%dT%H:%M:%S%z", "2007-04-06T13:47:30+0000"
71
71
  assert_guess "%Y-%m-%dT%H:%M:%S%z", "2007-04-06T13:47:30-01"
72
- assert_guess "%Y-%m-%dT%H:%M:%S%z", "2007-04-06T13:47:30-01:30"
72
+ assert_guess "%Y-%m-%dT%H:%M:%S%:z", "2007-04-06T13:47:30-01:30"
73
73
  assert_guess "%Y-%m-%dT%H:%M:%S%z", "2007-04-06T13:47:30-0130"
74
74
  end
75
75
 
76
76
  def test_format_rfc_822_2822
77
- assert_guess '%a, %d %b %Y %H:%M:%S %Z', "Fri, 20 Feb 2015 14:02:34 PST"
78
- assert_guess '%a, %d %b %Y %H:%M:%S %Z', "Fri, 20 Feb 2015 22:02:34 UT"
79
- assert_guess '%a, %d %b %Y %H:%M:%S %Z', "Fri, 20 Feb 2015 22:02:34 GMT"
80
- assert_guess '%d %b %Y %H:%M:%S %Z', "20 Feb 2015 22:02:34 GMT"
81
- assert_guess '%d %b %Y %H:%M %Z', "20 Feb 2015 22:02 GMT"
82
- assert_guess '%a, %d %b %Y %H:%M %Z', "Fri, 20 Feb 2015 22:02 GMT"
77
+ # This test is disabled because of https://github.com/jruby/jruby/issues/3702
78
+ #assert_guess '%a, %d %b %Y %H:%M:%S %Z', "Fri, 20 Feb 2015 14:02:34 PST"
79
+ assert_guess '%a, %d %b %Y %H:%M:%S %z', "Fri, 20 Feb 2015 22:02:34 UT"
80
+ assert_guess '%a, %d %b %Y %H:%M:%S %z', "Fri, 20 Feb 2015 22:02:34 GMT"
81
+ assert_guess '%d %b %Y %H:%M:%S %z', "20 Feb 2015 22:02:34 GMT"
82
+ assert_guess '%d %b %Y %H:%M %z', "20 Feb 2015 22:02 GMT"
83
+ assert_guess '%a, %d %b %Y %H:%M %z', "Fri, 20 Feb 2015 22:02 GMT"
83
84
  assert_guess '%d %b %Y', "20 Feb 2015"
84
85
  assert_guess '%a, %d %b %Y', "Fri, 20 Feb 2015"
85
86
  assert_guess '%a, %d %b %Y %H:%M %z', "Fri, 20 Feb 2015 22:02 +0000"
86
- assert_guess '%a, %d %b %Y %H:%M %z', "Fri, 20 Feb 2015 22:02 +00:00"
87
+ assert_guess '%a, %d %b %Y %H:%M %:z', "Fri, 20 Feb 2015 22:02 +00:00"
87
88
  assert_guess '%a, %d %b %Y %H:%M %z', "Fri, 20 Feb 2015 22:02 +00"
88
89
  end
89
90
 
@@ -97,6 +98,7 @@ class TimeFormatGuessTest < ::Test::Unit::TestCase
97
98
 
98
99
  def test_format_merge_frequency
99
100
  assert_guess_partial 2, "%Y-%m-%d %H:%M:%S", ["2014-01-01", "2014-01-01 00:00:00", "2014-01-01 00:00:00"]
101
+ assert_guess_partial 3, "%Y-%m-%d %H:%M:%S %z", ["2014-01-01 00:00:00 +0000", "2014-01-01 00:00:00 +0000", "2014-01-01 00:00:00 +00:00"]
100
102
  end
101
103
 
102
104
  def test_format_merge_dmy
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.6
4
+ version: 0.8.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-24 00:00:00.000000000 Z
11
+ date: 2016-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jruby-jars
@@ -108,8 +108,9 @@ files:
108
108
  - classpath/commons-beanutils-core-1.8.3.jar
109
109
  - classpath/commons-compress-1.10.jar
110
110
  - classpath/commons-lang3-3.1.jar
111
- - classpath/embulk-core-0.8.6.jar
112
- - classpath/embulk-standards-0.8.6.jar
111
+ - classpath/embulk-cli-0.8.7.jar
112
+ - classpath/embulk-core-0.8.7.jar
113
+ - classpath/embulk-standards-0.8.7.jar
113
114
  - classpath/guava-18.0.jar
114
115
  - classpath/guice-4.0.jar
115
116
  - classpath/guice-bootstrap-0.1.1.jar
@@ -426,6 +427,7 @@ files:
426
427
  - embulk-docs/src/release/release-0.8.4.rst
427
428
  - embulk-docs/src/release/release-0.8.5.rst
428
429
  - embulk-docs/src/release/release-0.8.6.rst
430
+ - embulk-docs/src/release/release-0.8.7.rst
429
431
  - embulk-standards/build.gradle
430
432
  - embulk-standards/src/main/java/org/embulk/standards/Bzip2FileDecoderPlugin.java
431
433
  - embulk-standards/src/main/java/org/embulk/standards/Bzip2FileEncoderPlugin.java