rbbt-util 5.26.156 → 5.26.157

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
- SHA1:
3
- metadata.gz: 883e3e337b3a80b3ae8cdb0f31aad83733d32b99
4
- data.tar.gz: 8b6fa24e110c55fe055e7c4ede4ae748525e7a1a
2
+ SHA256:
3
+ metadata.gz: 4a7cb4caf03456a936ef3dab72d6ab957a2f3dce03324291fb10c0f4aabe527f
4
+ data.tar.gz: 8690112157a89e64313dc7fcec69c7192db507c210bac57cfd529271294b7174
5
5
  SHA512:
6
- metadata.gz: c833d053a9706e594a70b6409161ab87e08b872fef9a3b3ad09770d4092470b906ebda2a0446731d2e5a8deba5e51d38a7b7145cb0bcdebf96c93899f6c0a56c
7
- data.tar.gz: 7213a43f2a80ef6bfecff486efad61834e2835528ffe001e661fedb27de57e9d041c7652be8c72c411ff8a88ae919e44d915b78e032582150291d99212209417
6
+ metadata.gz: 68a347659e479c2cd5fdb09c15bbe09be216586c403f984689c6b72a360cb63f3c4815edabfb675362e4137440e67e5d364da836e4cca33c5ce200a5a7d19539
7
+ data.tar.gz: f77fa581d1b0cd8fd6d34f4ac63101a40162f0d7012e2ff9917c7f5b0de729a56f5c81a011528f676aac4cb59a30ebc09acdf47892bfadf1662d41a22ec2959c
data/lib/rbbt/resource.rb CHANGED
@@ -93,7 +93,12 @@ module Resource
93
93
  timeout = 60 * 10
94
94
  Net::HTTP.start(uri.host, uri.port, :timeout => timeout, :read_timeout => timeout, :open_timeout => timeout) do |http|
95
95
  http.request request do |response|
96
- filename = response["Content-Disposition"].split(";").select{|f| f.include? "filename"}.collect{|f| f.split("=").last.gsub('"','')}.first
96
+ filename = if response["Content-Disposition"]
97
+ response["Content-Disposition"].split(";").select{|f| f.include? "filename"}.collect{|f| f.split("=").last.gsub('"','')}.first
98
+ else
99
+ nil
100
+ end
101
+
97
102
  if filename && filename =~ /\.b?gz$/ && final_path !~ /\.b?gz$/
98
103
  extension = filename.split(".").last
99
104
  final_path += '.' + extension
data/lib/rbbt/workflow.rb CHANGED
@@ -598,6 +598,9 @@ module Workflow
598
598
  end
599
599
 
600
600
  def self.load_step(path)
601
+ Path.setup(path) unless Path === path
602
+ path = path.find
603
+
601
604
  begin
602
605
  _load_step(path)
603
606
  ensure
@@ -72,7 +72,16 @@ module Workflow
72
72
  end
73
73
 
74
74
  end
75
- IndiferentHash.setup(inputs)
75
+ inputs = IndiferentHash.setup(inputs)
76
+
77
+ dir.glob("*#*").each do |od|
78
+ name = File.basename(od)
79
+ value = Open.read(od)
80
+ Log.debug "Loading override dependency #{ name } as #{value}"
81
+ inputs[name] = value.chomp
82
+ end
83
+
84
+ inputs
76
85
  end
77
86
  end
78
87
 
@@ -258,7 +258,8 @@ class WorkflowRemoteClient
258
258
  stream = true if res.respond_to? :read
259
259
  join unless stream
260
260
  result_type ||= self.result_type
261
- case result_type
261
+
262
+ case result_type.to_sym
262
263
  when :string
263
264
  stream ? res.read : res
264
265
  when :boolean
@@ -277,7 +278,6 @@ class WorkflowRemoteClient
277
278
  end
278
279
  when :array
279
280
  (stream ? res.read : res).split("\n")
280
- res.split("\n")
281
281
  else
282
282
  json_text = if IO === res
283
283
  res.read
@@ -1,4 +1,6 @@
1
1
  module WorkflowSSHClient
2
+ attr_accessor :override_dependencies
3
+
2
4
  def self.fix_hash(hash, fix_values = false)
3
5
  fixed = {}
4
6
  hash.each do |key, value|
@@ -107,7 +109,20 @@ module WorkflowSSHClient
107
109
  @input_id ||= "inputs-" << rand(100000).to_s
108
110
  @input_types = task_info(task)[:input_types]
109
111
 
110
- WorkflowSSHClient.upload_inputs(@server, inputs, @input_types, @input_id)
112
+ if override_dependencies
113
+
114
+ if override_dependencies && override_dependencies.any?
115
+ override_dependencies.each do |od|
116
+ name, _sep, value = od.partition("=")
117
+ inputs[name] = value
118
+ end
119
+ end
120
+ iii inputs
121
+
122
+ WorkflowSSHClient.upload_inputs(@server, inputs, @input_types, @input_id)
123
+ else
124
+ WorkflowSSHClient.upload_inputs(@server, inputs, @input_types, @input_id)
125
+ end
111
126
 
112
127
  @name ||= Persist.memory("RemoteSteps", :workflow => self, :task => task, :jobname => @name, :inputs => inputs, :cache_type => cache_type) do
113
128
  Misc.insist do
@@ -138,8 +153,13 @@ module WorkflowSSHClient
138
153
  end
139
154
  end
140
155
 
156
+ def load
157
+ load_res Open.open(path)
158
+ end
159
+
141
160
  def run(*args)
142
161
  produce(*args)
162
+ self.load unless args.first
143
163
  end
144
164
 
145
165
  def clean
@@ -148,4 +168,26 @@ module WorkflowSSHClient
148
168
  _restart
149
169
  end
150
170
 
171
+ def self.relay(workflow, task, jobname, inputs, server, options = {})
172
+ options = Misc.add_defaults options, :search_path => 'user'
173
+ search_path = options[:search_path]
174
+
175
+ job = workflow.job(task, jobname, inputs)
176
+
177
+ job.dependencies.each do |dep|
178
+ dep.produce
179
+ end
180
+
181
+ override_dependencies = job.dependencies.collect{|dep| [dep.workflow.to_s, dep.task_name.to_s] * "#" << "=" << Rbbt.identify(dep.path)}
182
+
183
+ job.dependencies.each do |dep|
184
+ Step.migrate(dep.path, search_path, :target => server)
185
+ end
186
+
187
+ remote = WorkflowRemoteClient.new("ssh://#{server}:#{workflow.to_s}", "#{workflow.to_s}")
188
+ rjob = remote.job(task, jobname, {})
189
+ rjob.override_dependencies = override_dependencies
190
+ rjob.run
191
+ end
192
+
151
193
  end
@@ -77,7 +77,8 @@ class Step
77
77
 
78
78
  def self.save_inputs(inputs, input_types, dir)
79
79
  inputs.each do |name,value|
80
- type = input_types[name].to_s
80
+ type = input_types[name]
81
+ type = type.to_s if type
81
82
  path = File.join(dir, name.to_s)
82
83
 
83
84
  Log.debug "Saving job input #{name} (#{type}) into #{path}"
@@ -115,6 +116,11 @@ class Step
115
116
  next if value.nil?
116
117
  inputs[name] = value
117
118
  end
119
+
120
+ if options.include? 'override_dependencies'
121
+ inputs.merge!(:override_dependencies => open[:override_dependencies])
122
+ input_types = IndiferentHash.setup(input_types.merge(:override_dependencies => :array))
123
+ end
118
124
  save_inputs(inputs, input_types, dir)
119
125
 
120
126
  inputs.any?
@@ -290,7 +290,7 @@ class Step
290
290
 
291
291
  @inputs = new_inputs if @inputs
292
292
 
293
- if not task.inputs.nil?
293
+ if @inputs && ! task.inputs.nil?
294
294
  info_inputs = @inputs.collect do |i|
295
295
  if Path === i
296
296
  i.to_s
@@ -361,7 +361,8 @@ class Step
361
361
  merge_info({
362
362
  :done => (done_time = Time.now),
363
363
  :total_time_elapsed => (total_time_elapsed = done_time - issue_time),
364
- :time_elapsed => (time_elapsed = done_time - start_time)
364
+ :time_elapsed => (time_elapsed = done_time - start_time),
365
+ :versions => Rbbt.versions
365
366
  })
366
367
  log :done, "Completed step #{Log.color :yellow, task.name.to_s || ""} in #{time_elapsed.to_i}+#{(total_time_elapsed - time_elapsed).to_i} sec."
367
368
  end
@@ -402,7 +403,8 @@ class Step
402
403
  merge_info({
403
404
  :done => (done_time = Time.now),
404
405
  :total_time_elapsed => (total_time_elapsed = done_time - issue_time),
405
- :time_elapsed => (time_elapsed = done_time - start_time)
406
+ :time_elapsed => (time_elapsed = done_time - start_time),
407
+ :versions => Rbbt.versions
406
408
  })
407
409
  log :ending
408
410
  Step.purge_stream_cache
@@ -420,7 +422,6 @@ class Step
420
422
  result
421
423
  end # END PERSIST
422
424
  log :done, "Completed step #{Log.color :yellow, task.name.to_s || ""} in #{time_elapsed.to_i}+#{(total_time_elapsed - time_elapsed).to_i} sec." unless stream or time_elapsed.nil?
423
- set_info :versions, Rbbt.versions
424
425
 
425
426
  if no_load
426
427
  @result ||= result
@@ -1,5 +1,8 @@
1
1
  require 'rbbt/workflow/remote/ssh/driver'
2
2
  class Step
3
+
4
+ MAIN_RSYNC_ARGS="-avztAXHP"
5
+
3
6
  def self.link_job(path, target_dir, task = nil, workflow = nil)
4
7
  Path.setup(target_dir)
5
8
 
@@ -40,7 +43,7 @@ class Step
40
43
 
41
44
  Misc.in_dir(tmpdir) do
42
45
  if File.directory?(target)
43
- CMD.cmd_log("rsync -avztAXHP --copy-unsafe-links '#{ tmpdir }/' '#{ target }/'")
46
+ CMD.cmd_log("rsync #{MAIN_RSYNC_ARGS} --copy-unsafe-links '#{ tmpdir }/' '#{ target }/'")
44
47
  else
45
48
  CMD.cmd_log("tar cvhzf '#{target}' ./*")
46
49
  end
@@ -111,7 +114,7 @@ class Step
111
114
 
112
115
  Misc.in_dir(tmpdir) do
113
116
  if File.directory?(target)
114
- CMD.cmd_log("rsync -avztAXHP --copy-unsafe-links '#{ tmpdir }/' '#{ target }/'")
117
+ CMD.cmd_log("rsync #{MAIN_RSYNC_ARGS} --copy-unsafe-links '#{ tmpdir }/' '#{ target }/'")
115
118
  else
116
119
  CMD.cmd_log("tar cvhzf '#{target}' ./*")
117
120
  end
@@ -214,7 +217,7 @@ puts resource[path].find(search_path)
214
217
  TmpFile.with_file(files_and_dirs.sort_by{|l| l.length}.to_a * "\n") do |tmp_include_file|
215
218
  test_str = options[:test] ? '-nv' : ''
216
219
 
217
- cmd = "rsync -avztAXHP --progress #{test_str} --files-from='#{tmp_include_file}' #{source}/ #{target}/ #{other_rsync_args}"
220
+ cmd = "rsync #{MAIN_RSYNC_ARGS} --progress #{test_str} --files-from='#{tmp_include_file}' #{source}/ #{target}/ #{other_rsync_args}"
218
221
 
219
222
  cmd << " && rm -Rf #{source}" if options[:delete]
220
223
 
@@ -73,7 +73,12 @@ def fix_options(workflow, task, job_options)
73
73
  job_options_cleaned = {}
74
74
 
75
75
  job_options.each do |name, value|
76
- value = case input_types[name].to_sym
76
+ type = input_types[name]
77
+ type = type.to_sym if type
78
+
79
+ value = case type
80
+ when nil
81
+ value
77
82
  when :boolean
78
83
  TrueClass === value or %w(true TRUE T yes).include? value
79
84
  when :float
@@ -94,7 +99,7 @@ def fix_options(workflow, task, job_options)
94
99
  end
95
100
  end
96
101
  when :array
97
- if input_options[name] and input_options[name][:stream] and String === value and Misc.is_filename?(value) and not input_options[name][:nofile]
102
+ if input_options[name] && input_options[name][:stream] && String === value && Misc.is_filename?(value) && !! input_options[name][:nofile]
98
103
  get_value_stream(value)
99
104
  elsif input_options[name] and input_options[name][:stream] and value == "-"
100
105
  STDIN
@@ -394,7 +399,7 @@ begin
394
399
 
395
400
  if tasks = options.delete(:prepare)
396
401
  tasks = tasks.split(",")
397
- prepare_cpus = (options[:prepare_cpus] || 1)
402
+ prepare_cpus = (options[:prepare_cpus] || 1)
398
403
  puts Step.prepare_dependencies(job, tasks, prepare_cpus)
399
404
  exit 0
400
405
  end
@@ -18,27 +18,26 @@ end
18
18
 
19
19
  class TestRemote < Test::Unit::TestCase
20
20
 
21
- def _test_ssh
21
+ def test_ssh
22
22
  Log.severity = 0
23
- client = WorkflowRemoteClient.new "ssh://localhost:Translation", "Translation"
23
+ client = WorkflowRemoteClient.new "ssh://turbo:Translation", "Translation"
24
24
  job = client.job("translate", "SSH-TEST", :genes => ["TP53","KRAS"])
25
- iii job.url
26
- puts job.run
25
+ assert_equal 2, job.run.select{|l| l =~ /ENSG/}.length
27
26
  end
28
27
 
29
28
  def test_rest
30
29
  Log.with_severity 0 do
31
30
 
32
31
  workflow_server(TestWFRest) do |client|
33
- assert_equal "Hello World", client.job(:hi, nil, {}).run
34
- assert_equal "Hello Miguel", client.job(:hi, nil, {:name => :Miguel}).run
35
- assert_equal "Hello Miguel, nice to meet you", client.job(:intro, nil, {:name => :Miguel}).run
32
+ assert_equal "Hello World", client.job(:hi, nil, {}).run.chomp
33
+ assert_equal "Hello Miguel", client.job(:hi, nil, {:name => :Miguel}).run.chomp
34
+ assert_equal "Hello Miguel, nice to meet you", client.job(:intro, nil, {:name => :Miguel}).run.chomp
36
35
  end
37
36
 
38
37
  workflow_server(TestWFRest, :Port => 1902) do |client|
39
- assert_equal "Hello World", client.job(:hi, nil, {}).run
40
- assert_equal "Hello Miguel", client.job(:hi, nil, {:name => :Miguel}).run
41
- assert_equal "Hello Miguel, nice to meet you", client.job(:intro, nil, {:name => :Miguel}).run
38
+ assert_equal "Hello World", client.job(:hi, nil, {}).run.chomp
39
+ assert_equal "Hello Miguel", client.job(:hi, nil, {:name => :Miguel}).run.chomp
40
+ assert_equal "Hello Miguel, nice to meet you", client.job(:intro, nil, {:name => :Miguel}).run.chomp
42
41
  end
43
42
  end
44
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.26.156
4
+ version: 5.26.157
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-23 00:00:00.000000000 Z
11
+ date: 2020-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -537,94 +537,93 @@ required_rubygems_version: !ruby/object:Gem::Requirement
537
537
  - !ruby/object:Gem::Version
538
538
  version: '0'
539
539
  requirements: []
540
- rubyforge_project:
541
- rubygems_version: 2.5.2.3
540
+ rubygems_version: 3.0.6
542
541
  signing_key:
543
542
  specification_version: 4
544
543
  summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
545
544
  test_files:
546
- - test/rbbt/test_knowledge_base.rb
547
- - test/rbbt/association/test_item.rb
548
- - test/rbbt/association/test_index.rb
549
- - test/rbbt/association/test_open.rb
550
- - test/rbbt/association/test_util.rb
551
- - test/rbbt/association/test_database.rb
552
- - test/rbbt/test_association.rb
553
- - test/rbbt/util/misc/test_multipart_payload.rb
545
+ - test/rbbt/test_entity.rb
546
+ - test/rbbt/workflow/test_doc.rb
547
+ - test/rbbt/workflow/test_step.rb
548
+ - test/rbbt/workflow/remote/test_client.rb
549
+ - test/rbbt/workflow/step/test_dependencies.rb
550
+ - test/rbbt/workflow/test_task.rb
551
+ - test/rbbt/resource/test_path.rb
552
+ - test/rbbt/util/test_colorize.rb
554
553
  - test/rbbt/util/misc/test_omics.rb
555
- - test/rbbt/util/misc/test_bgzf.rb
556
- - test/rbbt/util/misc/test_lock.rb
557
554
  - test/rbbt/util/misc/test_pipes.rb
558
- - test/rbbt/util/simpleopt/test_get.rb
559
- - test/rbbt/util/simpleopt/test_parse.rb
560
- - test/rbbt/util/simpleopt/test_setup.rb
561
- - test/rbbt/util/test_semaphore.rb
562
- - test/rbbt/util/test_config.rb
563
- - test/rbbt/util/test_R.rb
555
+ - test/rbbt/util/misc/test_lock.rb
556
+ - test/rbbt/util/misc/test_multipart_payload.rb
557
+ - test/rbbt/util/misc/test_bgzf.rb
558
+ - test/rbbt/util/test_concurrency.rb
559
+ - test/rbbt/util/test_cmd.rb
560
+ - test/rbbt/util/R/test_plot.rb
564
561
  - test/rbbt/util/R/test_eval.rb
565
562
  - test/rbbt/util/R/test_model.rb
566
- - test/rbbt/util/R/test_plot.rb
567
- - test/rbbt/util/test_excel2tsv.rb
568
- - test/rbbt/util/test_open.rb
569
- - test/rbbt/util/test_colorize.rb
570
- - test/rbbt/util/concurrency/processes/test_socket.rb
571
- - test/rbbt/util/concurrency/test_threads.rb
572
- - test/rbbt/util/concurrency/test_processes.rb
573
- - test/rbbt/util/test_cmd.rb
563
+ - test/rbbt/util/test_config.rb
574
564
  - test/rbbt/util/test_log.rb
575
565
  - test/rbbt/util/test_simpleDSL.rb
576
566
  - test/rbbt/util/log/test_progress.rb
577
567
  - test/rbbt/util/test_tmpfile.rb
568
+ - test/rbbt/util/test_R.rb
569
+ - test/rbbt/util/test_excel2tsv.rb
578
570
  - test/rbbt/util/test_misc.rb
571
+ - test/rbbt/util/test_open.rb
572
+ - test/rbbt/util/test_simpleopt.rb
573
+ - test/rbbt/util/simpleopt/test_parse.rb
574
+ - test/rbbt/util/simpleopt/test_setup.rb
575
+ - test/rbbt/util/simpleopt/test_get.rb
579
576
  - test/rbbt/util/test_python.rb
580
- - test/rbbt/util/test_chain_methods.rb
581
- - test/rbbt/util/test_concurrency.rb
582
577
  - test/rbbt/util/test_filecache.rb
583
- - test/rbbt/util/test_simpleopt.rb
584
- - test/rbbt/entity/test_identifiers.rb
585
- - test/rbbt/test_fix_width_table.rb
578
+ - test/rbbt/util/concurrency/test_processes.rb
579
+ - test/rbbt/util/concurrency/test_threads.rb
580
+ - test/rbbt/util/concurrency/processes/test_socket.rb
581
+ - test/rbbt/util/test_semaphore.rb
582
+ - test/rbbt/util/test_chain_methods.rb
583
+ - test/rbbt/test_resource.rb
584
+ - test/rbbt/test_packed_index.rb
585
+ - test/rbbt/tsv/test_change_id.rb
586
586
  - test/rbbt/tsv/test_attach.rb
587
- - test/rbbt/tsv/test_stream.rb
588
- - test/rbbt/tsv/test_excel.rb
589
- - test/rbbt/tsv/parallel/test_through.rb
590
- - test/rbbt/tsv/parallel/test_traverse.rb
591
- - test/rbbt/tsv/test_index.rb
592
- - test/rbbt/tsv/test_matrix.rb
593
- - test/rbbt/tsv/test_parallel.rb
594
- - test/rbbt/tsv/test_util.rb
587
+ - test/rbbt/tsv/test_filter.rb
588
+ - test/rbbt/tsv/test_parser.rb
595
589
  - test/rbbt/tsv/test_accessor.rb
590
+ - test/rbbt/tsv/test_matrix.rb
596
591
  - test/rbbt/tsv/test_field_index.rb
592
+ - test/rbbt/tsv/test_util.rb
593
+ - test/rbbt/tsv/test_index.rb
594
+ - test/rbbt/tsv/test_parallel.rb
597
595
  - test/rbbt/tsv/test_manipulate.rb
598
- - test/rbbt/tsv/test_change_id.rb
599
- - test/rbbt/tsv/test_filter.rb
600
- - test/rbbt/tsv/test_parser.rb
601
- - test/rbbt/test_workflow.rb
602
- - test/rbbt/test_packed_index.rb
596
+ - test/rbbt/tsv/test_excel.rb
597
+ - test/rbbt/tsv/parallel/test_through.rb
598
+ - test/rbbt/tsv/parallel/test_traverse.rb
599
+ - test/rbbt/tsv/test_stream.rb
600
+ - test/rbbt/test_association.rb
601
+ - test/rbbt/association/test_database.rb
602
+ - test/rbbt/association/test_item.rb
603
+ - test/rbbt/association/test_open.rb
604
+ - test/rbbt/association/test_util.rb
605
+ - test/rbbt/association/test_index.rb
606
+ - test/rbbt/test_knowledge_base.rb
607
+ - test/rbbt/persist/tsv/test_kyotocabinet.rb
608
+ - test/rbbt/persist/tsv/test_cdb.rb
609
+ - test/rbbt/persist/tsv/test_lmdb.rb
610
+ - test/rbbt/persist/tsv/test_sharder.rb
611
+ - test/rbbt/persist/tsv/test_leveldb.rb
612
+ - test/rbbt/persist/tsv/test_tokyocabinet.rb
613
+ - test/rbbt/persist/test_tsv.rb
614
+ - test/rbbt/test_tsv.rb
603
615
  - test/rbbt/test_annotations.rb
604
- - test/rbbt/test_persist.rb
616
+ - test/rbbt/test_fix_width_table.rb
617
+ - test/rbbt/test_workflow.rb
618
+ - test/rbbt/entity/test_identifiers.rb
605
619
  - test/rbbt/annotations/test_util.rb
606
- - test/rbbt/workflow/test_doc.rb
607
- - test/rbbt/workflow/test_step.rb
608
- - test/rbbt/workflow/step/test_dependencies.rb
609
- - test/rbbt/workflow/test_task.rb
610
- - test/rbbt/workflow/remote/test_client.rb
620
+ - test/rbbt/test_hpc.rb
621
+ - test/rbbt/test_monitor.rb
622
+ - test/rbbt/test_persist.rb
623
+ - test/rbbt/knowledge_base/test_entity.rb
624
+ - test/rbbt/knowledge_base/test_registry.rb
611
625
  - test/rbbt/knowledge_base/test_syndicate.rb
612
- - test/rbbt/knowledge_base/test_enrichment.rb
613
626
  - test/rbbt/knowledge_base/test_query.rb
627
+ - test/rbbt/knowledge_base/test_enrichment.rb
614
628
  - test/rbbt/knowledge_base/test_traverse.rb
615
- - test/rbbt/knowledge_base/test_entity.rb
616
- - test/rbbt/knowledge_base/test_registry.rb
617
- - test/rbbt/test_resource.rb
618
- - test/rbbt/test_tsv.rb
619
- - test/rbbt/test_hpc.rb
620
- - test/rbbt/resource/test_path.rb
621
- - test/rbbt/test_entity.rb
622
- - test/rbbt/test_monitor.rb
623
- - test/rbbt/persist/tsv/test_tokyocabinet.rb
624
- - test/rbbt/persist/tsv/test_leveldb.rb
625
- - test/rbbt/persist/tsv/test_lmdb.rb
626
- - test/rbbt/persist/tsv/test_kyotocabinet.rb
627
- - test/rbbt/persist/tsv/test_cdb.rb
628
- - test/rbbt/persist/tsv/test_sharder.rb
629
- - test/rbbt/persist/test_tsv.rb
630
629
  - test/test_helper.rb