td 0.10.99 → 0.11.1
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 +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
|