rbbt-util 5.26.156 → 5.26.157

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 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