td 0.10.99 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +3 -0
- data/ChangeLog +30 -1
- data/Rakefile +1 -1
- data/bin/td +21 -4
- data/contrib/completion/{td-comletion.bash → td-completion.bash} +0 -0
- data/dist/resources/exe/td +1 -1
- data/dist/resources/pkg/td +2 -2
- data/java/logging.properties +1 -0
- data/lib/td/command/common.rb +47 -18
- data/lib/td/command/export.rb +2 -2
- data/lib/td/command/import.rb +20 -71
- data/lib/td/command/job.rb +109 -16
- data/lib/td/command/list.rb +9 -7
- data/lib/td/command/query.rb +35 -27
- data/lib/td/command/result.rb +18 -2
- data/lib/td/command/runner.rb +18 -10
- data/lib/td/command/sched.rb +15 -3
- data/lib/td/command/schema.rb +5 -1
- data/lib/td/command/status.rb +1 -1
- data/lib/td/command/table.rb +26 -11
- data/lib/td/command/update.rb +9 -10
- data/lib/td/updater.rb +231 -29
- data/lib/td/version.rb +1 -3
- data/spec/td/updater_spec.rb +29 -0
- data/spec/td/version_spec.rb +1 -1
- data/td.gemspec +2 -2
- metadata +10 -40
- data/build/update-td-import-java.sh +0 -44
- data/java/VERSION +0 -1
- data/java/td-import-java.version +0 -1
- data/java/td-import.jar +0 -0
data/lib/td/updater.rb
CHANGED
@@ -4,8 +4,11 @@ require "shellwords"
|
|
4
4
|
require "zip/zip"
|
5
5
|
|
6
6
|
module TreasureData
|
7
|
-
# This architecture is based on Heroku command
|
8
7
|
module Updater
|
8
|
+
#
|
9
|
+
# Toolbelt upgrade
|
10
|
+
#
|
11
|
+
|
9
12
|
def self.raise_error(message)
|
10
13
|
# TODO: Replace better Exception class
|
11
14
|
raise RuntimeError.new(message)
|
@@ -53,13 +56,12 @@ module TreasureData
|
|
53
56
|
return File.join(td_gem, "/lib/td/version.rb")
|
54
57
|
end
|
55
58
|
}
|
56
|
-
|
57
59
|
nil
|
58
60
|
end
|
59
61
|
|
60
62
|
def self.client_version_from_path(path)
|
61
63
|
if version_file = get_client_version_file(path)
|
62
|
-
File.read(version_file).match(/
|
64
|
+
File.read(version_file).match(/TOOLBELT_VERSION = '([^']+)'/)[1]
|
63
65
|
else
|
64
66
|
'0.0.0'
|
65
67
|
end
|
@@ -95,7 +97,7 @@ module TreasureData
|
|
95
97
|
end
|
96
98
|
|
97
99
|
def self.package_category
|
98
|
-
case
|
100
|
+
case
|
99
101
|
when on_windows?
|
100
102
|
'exe'
|
101
103
|
when on_mac?
|
@@ -113,29 +115,35 @@ module TreasureData
|
|
113
115
|
# Net::HTTP.get_response can't get response from HTTPS endpoint.
|
114
116
|
# So we use following code to avoid above issues.
|
115
117
|
u = URI(uri)
|
116
|
-
response =
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
118
|
+
response =
|
119
|
+
if u.scheme == 'https'
|
120
|
+
http = Net::HTTP.new(u.host, u.port)
|
121
|
+
http.use_ssl = true
|
122
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
123
|
+
http.request(Net::HTTP::Get.new(u.path))
|
124
|
+
else
|
125
|
+
Net::HTTP.get_response(u)
|
126
|
+
end
|
124
127
|
|
125
128
|
case response
|
126
129
|
when Net::HTTPSuccess then response.body
|
127
130
|
when Net::HTTPRedirection then fetch(response['Location'])
|
128
131
|
else
|
132
|
+
raise "An error occurred when fetching from '#{uri}'."
|
129
133
|
response.error!
|
130
134
|
end
|
131
135
|
end
|
132
136
|
|
137
|
+
def self.endpoint_root
|
138
|
+
ENV['TD_TOOLBELT_UPDATE_ROOT'] || "http://toolbelt.treasuredata.com"
|
139
|
+
end
|
140
|
+
|
133
141
|
def self.version_endpoint
|
134
|
-
"
|
142
|
+
"#{endpoint_root}/version.#{package_category}"
|
135
143
|
end
|
136
144
|
|
137
145
|
def self.update_package_endpoint
|
138
|
-
"
|
146
|
+
"#{endpoint_root}/td-update-#{package_category}.zip"
|
139
147
|
end
|
140
148
|
|
141
149
|
def self.update(autoupdate = false)
|
@@ -149,10 +157,33 @@ module TreasureData
|
|
149
157
|
|
150
158
|
if compare_versions(latest_version, latest_local_version) > 0
|
151
159
|
Dir.mktmpdir do |download_dir|
|
160
|
+
|
161
|
+
# initialize the progress indicator
|
162
|
+
base_msg = "Downloading updated toolbelt package"
|
163
|
+
print base_msg + " " * 10
|
164
|
+
start_time = last_time = Time.new.to_i
|
165
|
+
|
166
|
+
# downloading the update compressed file
|
152
167
|
File.open("#{download_dir}/td-update.zip", "wb") do |file|
|
153
|
-
|
168
|
+
endpoint = update_package_endpoint
|
169
|
+
puts "\npackage '#{endpoint}'... " unless ENV['TD_TOOLBELT_DEBUG'].nil?
|
170
|
+
stream_fetch(endpoint, file) {
|
171
|
+
|
172
|
+
# progress indicator
|
173
|
+
if (time = Time.now.to_i) - last_time > 2
|
174
|
+
msg = "\r" + base_msg + ": #{time - start_time}s elapsed"
|
175
|
+
# TODO parse 'time - start_time' with humanize_time from common.rb
|
176
|
+
# once this method is not static
|
177
|
+
print msg + " " * 10
|
178
|
+
last_time = time
|
179
|
+
end
|
180
|
+
}
|
154
181
|
end
|
155
182
|
|
183
|
+
# clear progress indicator with this final message
|
184
|
+
puts "\r" + base_msg + "...done" + " " * 20
|
185
|
+
|
186
|
+
print "Unpacking updated toolbelt package..."
|
156
187
|
Zip::ZipFile.open("#{download_dir}/td-update.zip") do |zip|
|
157
188
|
zip.each do |entry|
|
158
189
|
target = File.join(download_dir, entry.to_s)
|
@@ -160,6 +191,7 @@ module TreasureData
|
|
160
191
|
zip.extract(entry, target) { true }
|
161
192
|
end
|
162
193
|
end
|
194
|
+
print "done\n"
|
163
195
|
|
164
196
|
FileUtils.rm "#{download_dir}/td-update.zip"
|
165
197
|
|
@@ -200,16 +232,10 @@ module TreasureData
|
|
200
232
|
load('td/updater.rb') # reload updated updater
|
201
233
|
end
|
202
234
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
File.join(home_directory, ".td", "autoupdate.last")
|
208
|
-
end
|
209
|
-
|
210
|
-
def self.background_update!
|
211
|
-
if File.exists?(last_autoupdate_path)
|
212
|
-
return if (Time.now.to_i - File.mtime(last_autoupdate_path).to_i) < 60 * 60 * 1 # every 1 hours
|
235
|
+
# check every hour if the toolbelt can be updated.
|
236
|
+
# => If so, update in the background
|
237
|
+
if File.exists?(last_toolbelt_autoupdate_timestamp)
|
238
|
+
return if (Time.now.to_i - File.mtime(last_toolbelt_autoupdate_timestamp).to_i) < 60 * 60 * 1 # every 1 hours
|
213
239
|
end
|
214
240
|
log_path = File.join(home_directory, '.td', 'autoupdate.log')
|
215
241
|
FileUtils.mkdir_p File.dirname(log_path)
|
@@ -223,8 +249,184 @@ module TreasureData
|
|
223
249
|
spawn(td_binary, 'update', :err => log_file, :out => log_file)
|
224
250
|
end
|
225
251
|
Process.detach(pid)
|
226
|
-
FileUtils.mkdir_p File.dirname(
|
227
|
-
FileUtils.touch
|
252
|
+
FileUtils.mkdir_p File.dirname(last_toolbelt_autoupdate_timestamp)
|
253
|
+
FileUtils.touch last_toolbelt_autoupdate_timestamp
|
254
|
+
end
|
255
|
+
|
256
|
+
def self.last_toolbelt_autoupdate_timestamp
|
257
|
+
File.join(home_directory, ".td", "autoupdate.last")
|
258
|
+
end
|
259
|
+
|
260
|
+
#
|
261
|
+
# td-import.jar upgrade
|
262
|
+
#
|
263
|
+
|
264
|
+
# locate the root of the td package which is 3 folders up from the location of this file
|
265
|
+
def jarfile_dest_path
|
266
|
+
File.join(Updater.home_directory, ".td", "java")
|
267
|
+
end
|
268
|
+
|
269
|
+
private
|
270
|
+
def self.stream_fetch(url, binfile, &progress)
|
271
|
+
require 'net/http'
|
272
|
+
|
273
|
+
uri = URI(url)
|
274
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
275
|
+
if uri.scheme == 'https'
|
276
|
+
http.use_ssl = true
|
277
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
278
|
+
end
|
279
|
+
http.start
|
280
|
+
request = Net::HTTP::Get.new(uri.to_s)
|
281
|
+
http.request request do |response|
|
282
|
+
if response.class == Net::HTTPOK
|
283
|
+
# print a . every tick_period seconds
|
284
|
+
response.read_body do |chunk|
|
285
|
+
binfile.write chunk
|
286
|
+
progress.call #unless progress.nil?
|
287
|
+
end
|
288
|
+
return true
|
289
|
+
elsif response.class == Net::HTTPFound || \
|
290
|
+
response.class == Net::HTTPRedirection
|
291
|
+
puts "redirect '#{url}' to '#{response['Location']}'... " unless ENV['TD_TOOLBELT_DEBUG'].nil?
|
292
|
+
return stream_fetch(response['Location'], binfile, &progress)
|
293
|
+
else
|
294
|
+
raise "An error occurred when fetching from '#{uri}'."
|
295
|
+
return false
|
296
|
+
end
|
297
|
+
end
|
228
298
|
end
|
229
|
-
|
230
|
-
|
299
|
+
|
300
|
+
private
|
301
|
+
def jar_update(hourly = false)
|
302
|
+
maven_repo = "http://maven.treasure-data.com/com/treasure_data/td-import"
|
303
|
+
|
304
|
+
require 'rexml/document'
|
305
|
+
require 'open-uri'
|
306
|
+
require 'fileutils'
|
307
|
+
|
308
|
+
doc = REXML::Document.new(open("#{maven_repo}/maven-metadata.xml") { |f| f.read })
|
309
|
+
updated = Time.strptime(REXML::XPath.match(doc, '/metadata/versioning/lastUpdated').first.text, "%Y%m%d%H%M%S")
|
310
|
+
version = REXML::XPath.match(doc, '/metadata/versioning/release').first.text
|
311
|
+
|
312
|
+
# Convert into UTF to compare time correctly
|
313
|
+
updated = (updated + updated.gmt_offset).utc unless updated.gmt?
|
314
|
+
last_updated = existent_jar_updated_time
|
315
|
+
|
316
|
+
if updated > last_updated
|
317
|
+
FileUtils.mkdir_p(jarfile_dest_path) unless File.exists?(jarfile_dest_path)
|
318
|
+
Dir.chdir jarfile_dest_path
|
319
|
+
|
320
|
+
File.open('VERSION', 'w') { |f| f.print "#{version} via import:jar_update" }
|
321
|
+
File.open('td-import-java.version', 'w') { |f| f.print "#{version} #{updated}" }
|
322
|
+
|
323
|
+
# initialize the progress indicator
|
324
|
+
base_msg = "Updating td-import.jar"
|
325
|
+
start_time = last_time = Time.new.to_i
|
326
|
+
print base_msg + " " * 10
|
327
|
+
|
328
|
+
binfile = File.open 'td-import.jar.new', 'wb'
|
329
|
+
status = Updater.stream_fetch("#{maven_repo}/#{version}/td-import-#{version}-jar-with-dependencies.jar", binfile) {
|
330
|
+
|
331
|
+
# progress indicator
|
332
|
+
if (time = Time.now.to_i) - last_time > 2
|
333
|
+
msg = "\r" + base_msg + ": #{humanize_time(time - start_time)} elapsed"
|
334
|
+
# TODO parse 'time - start_time' with humanize_time from common.rb
|
335
|
+
# once this method is not static
|
336
|
+
print msg + " " * 10
|
337
|
+
last_time = time
|
338
|
+
end
|
339
|
+
}
|
340
|
+
binfile.close
|
341
|
+
|
342
|
+
# clear progress indicator with this final message
|
343
|
+
puts "\r" + base_msg + "...done" + " " * 20
|
344
|
+
|
345
|
+
if status
|
346
|
+
puts "Installed td-import.jar v#{version} in '#{jarfile_dest_path}'.\n"
|
347
|
+
File.rename 'td-import.jar.new', 'td-import.jar'
|
348
|
+
else
|
349
|
+
puts "Update of td-import.jar failed." unless ENV['TD_TOOLBELT_DEBUG'].nil?
|
350
|
+
File.delete 'td-import.jar.new' if File.exists? 'td-import.jar.new'
|
351
|
+
end
|
352
|
+
else
|
353
|
+
puts 'Installed td-import.jar is already at the latest version.' unless hourly
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
def check_n_update_jar(hourly = false)
|
358
|
+
if hourly && \
|
359
|
+
File.exists?(last_jar_autoupdate_timestamp) && \
|
360
|
+
(Time.now - File.mtime(last_jar_autoupdate_timestamp)).to_i < (60 * 60 * 1) # every hour
|
361
|
+
return
|
362
|
+
end
|
363
|
+
jar_update(hourly)
|
364
|
+
FileUtils.touch File.join(jarfile_dest_path, "td-import-java.version")
|
365
|
+
end
|
366
|
+
|
367
|
+
private
|
368
|
+
def last_jar_autoupdate_timestamp
|
369
|
+
File.join(jarfile_dest_path, "td-import-java.version")
|
370
|
+
end
|
371
|
+
|
372
|
+
private
|
373
|
+
def existent_jar_updated_time
|
374
|
+
files = find_files("td-import-java.version", [jarfile_dest_path])
|
375
|
+
if files.empty?
|
376
|
+
return Time.at(0)
|
377
|
+
end
|
378
|
+
content = File.open(files.first).read
|
379
|
+
index = content.index(' ')
|
380
|
+
time = nil
|
381
|
+
if index.nil?
|
382
|
+
time = Time.at(0).utc
|
383
|
+
else
|
384
|
+
time = Time.parse(content[index+1..-1].strip).utc
|
385
|
+
end
|
386
|
+
time
|
387
|
+
end
|
388
|
+
|
389
|
+
#
|
390
|
+
# Helpers
|
391
|
+
#
|
392
|
+
def find_files(glob, locations)
|
393
|
+
files = []
|
394
|
+
locations.each {|loc|
|
395
|
+
files = Dir.glob("#{loc}/#{glob}")
|
396
|
+
break unless files.empty?
|
397
|
+
}
|
398
|
+
files
|
399
|
+
end
|
400
|
+
|
401
|
+
def find_version_file
|
402
|
+
version = find_files('VERSION', [jarfile_dest_path])
|
403
|
+
if version.empty?
|
404
|
+
$stderr.puts "Cannot find VERSION file in '#{jarfile_dest_path}'."
|
405
|
+
exit 10
|
406
|
+
end
|
407
|
+
version.first
|
408
|
+
end
|
409
|
+
|
410
|
+
def find_td_import_jar
|
411
|
+
jar = find_files('td-import.jar', [jarfile_dest_path])
|
412
|
+
if jar.empty?
|
413
|
+
$stderr.puts "Cannot find td-import.jar in '#{jarfile_dest_path}'."
|
414
|
+
exit 10
|
415
|
+
end
|
416
|
+
jar.first
|
417
|
+
end
|
418
|
+
|
419
|
+
def find_logging_property
|
420
|
+
installed_path = File.join(File.expand_path('../..', File.dirname(__FILE__)), 'java')
|
421
|
+
|
422
|
+
config = find_files("logging.properties", [installed_path])
|
423
|
+
if config.empty?
|
424
|
+
puts "Cannot find 'logging.properties' file in '#{installed_path}'." unless ENV['TD_TOOLBELT_DEBUG'].nil?
|
425
|
+
[]
|
426
|
+
else
|
427
|
+
config.first
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
end # end of module Updater
|
432
|
+
end # end of module TreasureData
|
data/lib/td/version.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'td/updater'
|
3
|
+
|
4
|
+
module TreasureData::Updater
|
5
|
+
describe 'without the TD_TOOLBELT_UPDATE_ROOT environment variable defined' do
|
6
|
+
describe 'endpoints methods' do
|
7
|
+
it 'use the default root path' do
|
8
|
+
TreasureData::Updater.endpoint_root.should == TreasureData::Updater::DEFAULT_TOOLBELT_URL
|
9
|
+
TreasureData::Updater.version_endpoint.should =~ Regexp.new(TreasureData::Updater::DEFAULT_TOOLBELT_URL)
|
10
|
+
TreasureData::Updater.update_package_endpoint.should =~ Regexp.new(TreasureData::Updater::DEFAULT_TOOLBELT_URL)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
describe 'with the TD_TOOLBELT_UPDATE_ROOT environment variable defined' do
|
15
|
+
before do
|
16
|
+
ENV['TD_TOOLBELT_UPDATE_ROOT'] = 'https://0.0.0.0:5000/'
|
17
|
+
end
|
18
|
+
describe 'endpoints methods' do
|
19
|
+
it 'use the custom root path' do
|
20
|
+
TreasureData::Updater.endpoint_root.should == ENV['TD_TOOLBELT_UPDATE_ROOT']
|
21
|
+
TreasureData::Updater.version_endpoint.should =~ Regexp.new(ENV['TD_TOOLBELT_UPDATE_ROOT'])
|
22
|
+
TreasureData::Updater.update_package_endpoint.should =~ Regexp.new(ENV['TD_TOOLBELT_UPDATE_ROOT'])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
after do
|
26
|
+
ENV.delete 'TD_TOOLBELT_UPDATE_ROOT'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/td/version_spec.rb
CHANGED
data/td.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.description = "CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing"
|
8
8
|
gem.homepage = "http://treasure-data.com/"
|
9
9
|
gem.summary = "CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing"
|
10
|
-
gem.version = TreasureData::
|
10
|
+
gem.version = TreasureData::TOOLBELT_VERSION
|
11
11
|
gem.authors = ["Treasure Data, Inc."]
|
12
12
|
gem.email = "support@treasure-data.com"
|
13
13
|
gem.has_rdoc = false
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_dependency "yajl-ruby", "~> 1.1.0"
|
21
21
|
gem.add_dependency "hirb", ">= 0.4.5"
|
22
22
|
gem.add_dependency "parallel", "~> 0.6.1"
|
23
|
-
gem.add_dependency "td-client", "~> 0.8.
|
23
|
+
gem.add_dependency "td-client", "~> 0.8.60"
|
24
24
|
gem.add_dependency "td-logger", "~> 0.3.21"
|
25
25
|
gem.add_dependency "rubyzip", "~> 0.9.9"
|
26
26
|
gem.add_development_dependency "rake", "~> 0.9"
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.11.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Treasure Data, Inc.
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-04-30 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: msgpack
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -37,7 +35,6 @@ dependencies:
|
|
37
35
|
type: :runtime
|
38
36
|
prerelease: false
|
39
37
|
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
38
|
requirements:
|
42
39
|
- - ! '>='
|
43
40
|
- !ruby/object:Gem::Version
|
@@ -60,7 +57,6 @@ dependencies:
|
|
60
57
|
- !ruby/object:Gem::Dependency
|
61
58
|
name: yajl-ruby
|
62
59
|
requirement: !ruby/object:Gem::Requirement
|
63
|
-
none: false
|
64
60
|
requirements:
|
65
61
|
- - ~>
|
66
62
|
- !ruby/object:Gem::Version
|
@@ -68,7 +64,6 @@ dependencies:
|
|
68
64
|
type: :runtime
|
69
65
|
prerelease: false
|
70
66
|
version_requirements: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
67
|
requirements:
|
73
68
|
- - ~>
|
74
69
|
- !ruby/object:Gem::Version
|
@@ -76,7 +71,6 @@ dependencies:
|
|
76
71
|
- !ruby/object:Gem::Dependency
|
77
72
|
name: hirb
|
78
73
|
requirement: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
74
|
requirements:
|
81
75
|
- - ! '>='
|
82
76
|
- !ruby/object:Gem::Version
|
@@ -84,7 +78,6 @@ dependencies:
|
|
84
78
|
type: :runtime
|
85
79
|
prerelease: false
|
86
80
|
version_requirements: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
81
|
requirements:
|
89
82
|
- - ! '>='
|
90
83
|
- !ruby/object:Gem::Version
|
@@ -92,7 +85,6 @@ dependencies:
|
|
92
85
|
- !ruby/object:Gem::Dependency
|
93
86
|
name: parallel
|
94
87
|
requirement: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
88
|
requirements:
|
97
89
|
- - ~>
|
98
90
|
- !ruby/object:Gem::Version
|
@@ -100,7 +92,6 @@ dependencies:
|
|
100
92
|
type: :runtime
|
101
93
|
prerelease: false
|
102
94
|
version_requirements: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
95
|
requirements:
|
105
96
|
- - ~>
|
106
97
|
- !ruby/object:Gem::Version
|
@@ -108,23 +99,20 @@ dependencies:
|
|
108
99
|
- !ruby/object:Gem::Dependency
|
109
100
|
name: td-client
|
110
101
|
requirement: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
102
|
requirements:
|
113
103
|
- - ~>
|
114
104
|
- !ruby/object:Gem::Version
|
115
|
-
version: 0.8.
|
105
|
+
version: 0.8.60
|
116
106
|
type: :runtime
|
117
107
|
prerelease: false
|
118
108
|
version_requirements: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
109
|
requirements:
|
121
110
|
- - ~>
|
122
111
|
- !ruby/object:Gem::Version
|
123
|
-
version: 0.8.
|
112
|
+
version: 0.8.60
|
124
113
|
- !ruby/object:Gem::Dependency
|
125
114
|
name: td-logger
|
126
115
|
requirement: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
116
|
requirements:
|
129
117
|
- - ~>
|
130
118
|
- !ruby/object:Gem::Version
|
@@ -132,7 +120,6 @@ dependencies:
|
|
132
120
|
type: :runtime
|
133
121
|
prerelease: false
|
134
122
|
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
123
|
requirements:
|
137
124
|
- - ~>
|
138
125
|
- !ruby/object:Gem::Version
|
@@ -140,7 +127,6 @@ dependencies:
|
|
140
127
|
- !ruby/object:Gem::Dependency
|
141
128
|
name: rubyzip
|
142
129
|
requirement: !ruby/object:Gem::Requirement
|
143
|
-
none: false
|
144
130
|
requirements:
|
145
131
|
- - ~>
|
146
132
|
- !ruby/object:Gem::Version
|
@@ -148,7 +134,6 @@ dependencies:
|
|
148
134
|
type: :runtime
|
149
135
|
prerelease: false
|
150
136
|
version_requirements: !ruby/object:Gem::Requirement
|
151
|
-
none: false
|
152
137
|
requirements:
|
153
138
|
- - ~>
|
154
139
|
- !ruby/object:Gem::Version
|
@@ -156,7 +141,6 @@ dependencies:
|
|
156
141
|
- !ruby/object:Gem::Dependency
|
157
142
|
name: rake
|
158
143
|
requirement: !ruby/object:Gem::Requirement
|
159
|
-
none: false
|
160
144
|
requirements:
|
161
145
|
- - ~>
|
162
146
|
- !ruby/object:Gem::Version
|
@@ -164,7 +148,6 @@ dependencies:
|
|
164
148
|
type: :development
|
165
149
|
prerelease: false
|
166
150
|
version_requirements: !ruby/object:Gem::Requirement
|
167
|
-
none: false
|
168
151
|
requirements:
|
169
152
|
- - ~>
|
170
153
|
- !ruby/object:Gem::Version
|
@@ -172,7 +155,6 @@ dependencies:
|
|
172
155
|
- !ruby/object:Gem::Dependency
|
173
156
|
name: rspec
|
174
157
|
requirement: !ruby/object:Gem::Requirement
|
175
|
-
none: false
|
176
158
|
requirements:
|
177
159
|
- - ~>
|
178
160
|
- !ruby/object:Gem::Version
|
@@ -180,7 +162,6 @@ dependencies:
|
|
180
162
|
type: :development
|
181
163
|
prerelease: false
|
182
164
|
version_requirements: !ruby/object:Gem::Requirement
|
183
|
-
none: false
|
184
165
|
requirements:
|
185
166
|
- - ~>
|
186
167
|
- !ruby/object:Gem::Version
|
@@ -188,7 +169,6 @@ dependencies:
|
|
188
169
|
- !ruby/object:Gem::Dependency
|
189
170
|
name: simplecov
|
190
171
|
requirement: !ruby/object:Gem::Requirement
|
191
|
-
none: false
|
192
172
|
requirements:
|
193
173
|
- - ~>
|
194
174
|
- !ruby/object:Gem::Version
|
@@ -196,7 +176,6 @@ dependencies:
|
|
196
176
|
type: :development
|
197
177
|
prerelease: false
|
198
178
|
version_requirements: !ruby/object:Gem::Requirement
|
199
|
-
none: false
|
200
179
|
requirements:
|
201
180
|
- - ~>
|
202
181
|
- !ruby/object:Gem::Version
|
@@ -214,9 +193,8 @@ files:
|
|
214
193
|
- README.rdoc
|
215
194
|
- Rakefile
|
216
195
|
- bin/td
|
217
|
-
- build/update-td-import-java.sh
|
218
196
|
- contrib/completion/_td
|
219
|
-
- contrib/completion/td-
|
197
|
+
- contrib/completion/td-completion.bash
|
220
198
|
- data/sample_apache.json
|
221
199
|
- data/sample_apache_gen.rb
|
222
200
|
- dist/exe.rake
|
@@ -230,10 +208,7 @@ files:
|
|
230
208
|
- dist/resources/pkg/postinstall
|
231
209
|
- dist/resources/pkg/ruby-2.0.0-p0.pkg
|
232
210
|
- dist/resources/pkg/td
|
233
|
-
- java/VERSION
|
234
211
|
- java/logging.properties
|
235
|
-
- java/td-import-java.version
|
236
|
-
- java/td-import.jar
|
237
212
|
- lib/td.rb
|
238
213
|
- lib/td/command/account.rb
|
239
214
|
- lib/td/command/acl.rb
|
@@ -274,37 +249,31 @@ files:
|
|
274
249
|
- spec/file_reader_spec.rb
|
275
250
|
- spec/spec_helper.rb
|
276
251
|
- spec/td/helpers_spec.rb
|
252
|
+
- spec/td/updater_spec.rb
|
277
253
|
- spec/td/version_spec.rb
|
278
254
|
- td.gemspec
|
279
255
|
homepage: http://treasure-data.com/
|
280
256
|
licenses: []
|
257
|
+
metadata: {}
|
281
258
|
post_install_message:
|
282
259
|
rdoc_options: []
|
283
260
|
require_paths:
|
284
261
|
- lib
|
285
262
|
required_ruby_version: !ruby/object:Gem::Requirement
|
286
|
-
none: false
|
287
263
|
requirements:
|
288
264
|
- - ! '>='
|
289
265
|
- !ruby/object:Gem::Version
|
290
266
|
version: '0'
|
291
|
-
segments:
|
292
|
-
- 0
|
293
|
-
hash: 687370063067596647
|
294
267
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
295
|
-
none: false
|
296
268
|
requirements:
|
297
269
|
- - ! '>='
|
298
270
|
- !ruby/object:Gem::Version
|
299
271
|
version: '0'
|
300
|
-
segments:
|
301
|
-
- 0
|
302
|
-
hash: 687370063067596647
|
303
272
|
requirements: []
|
304
273
|
rubyforge_project:
|
305
|
-
rubygems_version:
|
274
|
+
rubygems_version: 2.2.2
|
306
275
|
signing_key:
|
307
|
-
specification_version:
|
276
|
+
specification_version: 4
|
308
277
|
summary: CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing
|
309
278
|
test_files:
|
310
279
|
- spec/file_reader/filter_spec.rb
|
@@ -315,4 +284,5 @@ test_files:
|
|
315
284
|
- spec/file_reader_spec.rb
|
316
285
|
- spec/spec_helper.rb
|
317
286
|
- spec/td/helpers_spec.rb
|
287
|
+
- spec/td/updater_spec.rb
|
318
288
|
- spec/td/version_spec.rb
|