delta_test 0.2.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +22 -34
- data/Rakefile +5 -2
- data/bin/delta_test +1 -1
- data/circle.yml +5 -1
- data/delta_test.gemspec +1 -1
- data/lib/delta_test/cli/command_base.rb +114 -0
- data/lib/delta_test/cli/exec_command.rb +95 -0
- data/lib/delta_test/cli/help_command.rb +38 -0
- data/lib/delta_test/cli/specs_command.rb +43 -0
- data/lib/delta_test/cli/stats_clean_command.rb +20 -0
- data/lib/delta_test/cli/stats_save_command.rb +67 -0
- data/lib/delta_test/cli/stats_show_command.rb +46 -0
- data/lib/delta_test/cli/version_command.rb +13 -0
- data/lib/delta_test/cli.rb +22 -296
- data/lib/delta_test/configuration.rb +57 -42
- data/lib/delta_test/errors.rb +24 -0
- data/lib/delta_test/generator.rb +4 -24
- data/lib/delta_test/git.rb +161 -80
- data/lib/delta_test/profiler.rb +8 -0
- data/lib/delta_test/related_spec_list.rb +14 -9
- data/lib/delta_test/stats.rb +41 -0
- data/lib/delta_test/version.rb +2 -2
- data/lib/delta_test.rb +14 -9
- data/spec/lib/delta_test/cli/command_base_spec.rb +164 -0
- data/spec/lib/delta_test/cli/exec_command_spec.rb +128 -0
- data/spec/lib/delta_test/cli/help_command_spec.rb +17 -0
- data/spec/lib/delta_test/cli/specs_command_spec.rb +54 -0
- data/spec/lib/delta_test/cli/stats_clean_command_spec.rb +39 -0
- data/spec/lib/delta_test/cli/stats_save_command_spec.rb +207 -0
- data/spec/lib/delta_test/cli/stats_show_command_spec.rb +52 -0
- data/spec/lib/delta_test/cli/version_command_spec.rb +17 -0
- data/spec/lib/delta_test/cli_spec.rb +47 -386
- data/spec/lib/delta_test/configuration_spec.rb +99 -47
- data/spec/lib/delta_test/dependencies_table_spec.rb +1 -1
- data/spec/lib/delta_test/generator_spec.rb +3 -3
- data/spec/lib/delta_test/git_spec.rb +291 -50
- data/spec/lib/delta_test/profiler_spec.rb +3 -3
- data/spec/lib/delta_test/related_spec_list_spec.rb +12 -14
- data/spec/lib/delta_test/stats_spec.rb +89 -0
- data/spec/lib/delta_test/utils_spec.rb +4 -4
- data/spec/lib/delta_test_spec.rb +13 -4
- data/spec/rails/Gemfile.lock +5 -2
- data/spec/rails/app/models/category.rb +4 -0
- data/spec/rails/delta_test.yml +4 -3
- data/spec/rails/spec/models/category_spec.rb +4 -0
- data/spec/spec_helper.rb +9 -2
- data/spec/supports/create_table_file.rb +11 -1
- data/visual.jpg +0 -0
- metadata +32 -4
data/lib/delta_test/cli.rb
CHANGED
@@ -1,310 +1,36 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require_relative 'cli/exec_command'
|
2
|
+
require_relative 'cli/specs_command'
|
3
|
+
require_relative 'cli/stats_clean_command'
|
4
|
+
require_relative 'cli/stats_show_command'
|
5
|
+
require_relative 'cli/stats_save_command'
|
6
|
+
require_relative 'cli/version_command'
|
7
|
+
require_relative 'cli/help_command'
|
5
8
|
|
6
|
-
require_relative 'related_spec_list'
|
7
9
|
|
8
10
|
module DeltaTest
|
9
11
|
class CLI
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
'head' => 'HEAD',
|
14
|
-
'verbose' => false,
|
15
|
-
}.freeze
|
16
|
-
|
17
|
-
BUNDLE_EXEC = ['bundle', 'exec'].freeze
|
18
|
-
|
19
|
-
SPLITTER = '--'
|
20
|
-
|
21
|
-
attr_reader *%i[
|
22
|
-
args
|
23
|
-
command
|
24
|
-
options
|
25
|
-
]
|
26
|
-
|
27
|
-
def initialize
|
28
|
-
@args = []
|
29
|
-
@command = nil
|
30
|
-
@options = {}
|
31
|
-
end
|
32
|
-
|
33
|
-
###
|
34
|
-
# Run cli
|
35
|
-
#
|
36
|
-
# @params {Array} args
|
37
|
-
###
|
38
|
-
def run(args)
|
39
|
-
@args = args.dup
|
40
|
-
|
13
|
+
def initialize(args)
|
14
|
+
@args = args.dup
|
41
15
|
@command = @args.shift
|
42
|
-
@options = parse_options!
|
43
|
-
|
44
|
-
@list = RelatedSpecList.new
|
45
|
-
|
46
|
-
DeltaTest.verbose = !!@options['verbose']
|
47
|
-
|
48
|
-
invoke
|
49
16
|
end
|
50
17
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
do_table
|
61
|
-
when 'exec'
|
62
|
-
do_exec
|
63
|
-
when 'clear'
|
64
|
-
do_clear
|
65
|
-
when '-v', '--version'
|
66
|
-
do_version
|
67
|
-
else
|
68
|
-
do_help
|
69
|
-
end
|
70
|
-
rescue => e
|
71
|
-
if DeltaTest.verbose?
|
72
|
-
raise e
|
73
|
-
else
|
74
|
-
exit_with_message(1, '[%s] %s' % [e.class.name, e.message])
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
18
|
+
COMMANDS = {
|
19
|
+
'exec' => ExecCommand,
|
20
|
+
'specs' => SpecsCommand,
|
21
|
+
'stats:clean' => StatsCleanCommand,
|
22
|
+
'stats:show' => StatsShowCommand,
|
23
|
+
'stats:save' => StatsSaveCommand,
|
24
|
+
'version' => VersionCommand,
|
25
|
+
'help' => HelpCommand,
|
26
|
+
}
|
78
27
|
|
79
28
|
###
|
80
|
-
#
|
81
|
-
#
|
82
|
-
# @return {Hash<String, Boolean|String>}
|
83
|
-
###
|
84
|
-
def parse_options!
|
85
|
-
options = {}
|
86
|
-
|
87
|
-
@args.reject! do |arg|
|
88
|
-
case arg
|
89
|
-
when /^-([a-z0-9])$/i, /^--([a-z0-9][a-z0-9-]*)$/i
|
90
|
-
options[$1] = true
|
91
|
-
when /^--([a-z0-9][a-z0-9-]*)=(.+)$/i
|
92
|
-
options[$1] = $2
|
93
|
-
else
|
94
|
-
break
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
DEFAULTS.merge(options)
|
99
|
-
end
|
100
|
-
|
101
|
-
###
|
102
|
-
# Print message and exit with a status
|
103
|
-
#
|
104
|
-
# @params {Integer} status - exit code
|
105
|
-
# @params {Object} *args
|
106
|
-
###
|
107
|
-
def exit_with_message(status, *args)
|
108
|
-
if status.zero?
|
109
|
-
puts(*args)
|
110
|
-
else
|
111
|
-
$stderr.puts(*args)
|
112
|
-
end
|
113
|
-
|
114
|
-
exit status
|
115
|
-
end
|
116
|
-
|
117
|
-
###
|
118
|
-
# Whether run full test or not
|
119
|
-
#
|
120
|
-
# @return {Boolean}
|
121
|
-
###
|
122
|
-
def profile_mode?
|
123
|
-
@profile_mode ||= Git.same_commit?(@options['base'], @options['head'])
|
124
|
-
end
|
125
|
-
|
126
|
-
###
|
127
|
-
# Show table contents
|
128
|
-
###
|
129
|
-
def do_table
|
130
|
-
@list.load_table!
|
131
|
-
|
132
|
-
@list.table.each do |spec_file, dependencies|
|
133
|
-
puts spec_file
|
134
|
-
puts
|
135
|
-
dependencies.each do |dependency|
|
136
|
-
puts "\t#{dependency}"
|
137
|
-
end
|
138
|
-
puts
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
###
|
143
|
-
# Show related spec files
|
144
|
-
###
|
145
|
-
def do_list
|
146
|
-
@list.load_table!
|
147
|
-
@list.retrive_changed_files!(@options['base'], @options['head'])
|
148
|
-
|
149
|
-
puts @list.related_spec_files
|
150
|
-
end
|
151
|
-
|
152
|
-
###
|
153
|
-
# Execute test script with delta_test
|
154
|
-
###
|
155
|
-
def do_exec
|
156
|
-
spec_files = nil
|
157
|
-
args = []
|
158
|
-
|
159
|
-
begin
|
160
|
-
unless profile_mode?
|
161
|
-
@list.load_table!
|
162
|
-
@list.retrive_changed_files!(@options['base'], @options['head'])
|
163
|
-
|
164
|
-
spec_files = @list.related_spec_files.to_a
|
165
|
-
|
166
|
-
if spec_files.empty?
|
167
|
-
exit_with_message(0, 'Nothing to test')
|
168
|
-
end
|
169
|
-
end
|
170
|
-
rescue TableNotFoundError
|
171
|
-
# force profile mode cuz we don't have a table
|
172
|
-
@profile_mode = true
|
173
|
-
end
|
174
|
-
|
175
|
-
@args.map! { |arg| Shellwords.escape(arg) }
|
176
|
-
|
177
|
-
if (splitter = @args.index(SPLITTER))
|
178
|
-
files = @args.drop(splitter + 1)
|
179
|
-
@args = @args.take(splitter)
|
180
|
-
|
181
|
-
if files && files.any?
|
182
|
-
if spec_files
|
183
|
-
pattern = files.map { |file| Regexp.escape(file) }
|
184
|
-
pattern = '^(%s)' % pattern.join('|')
|
185
|
-
spec_files = spec_files.grep(pattern)
|
186
|
-
else
|
187
|
-
spec_files = files
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
if profile_mode?
|
193
|
-
args << ('%s=%s' % [VERBOSE_FLAG, true]) if DeltaTest.verbose?
|
194
|
-
args << ('%s=%s' % [ACTIVE_FLAG, true])
|
195
|
-
end
|
196
|
-
|
197
|
-
if spec_files
|
198
|
-
args.unshift('cat', '|')
|
199
|
-
args << 'xargs'
|
200
|
-
end
|
201
|
-
|
202
|
-
if bundler_enabled? && BUNDLE_EXEC != @args.take(2)
|
203
|
-
args += BUNDLE_EXEC
|
204
|
-
end
|
205
|
-
|
206
|
-
args += @args
|
207
|
-
args = args.join(' ')
|
208
|
-
|
209
|
-
$stdout.sync = true
|
210
|
-
|
211
|
-
Open3.popen3(args) do |i, o, e, w|
|
212
|
-
i.write(spec_files.join("\n")) if spec_files
|
213
|
-
i.close
|
214
|
-
|
215
|
-
threads = []
|
216
|
-
threads << Thread.new { o.each { |l| puts l } }
|
217
|
-
threads << Thread.new { e.each { |l| $stderr.puts l } }
|
218
|
-
|
219
|
-
ThreadsWait.all_waits(*threads)
|
220
|
-
exit w.value.exitstatus
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
###
|
225
|
-
# Clean up tables and caches
|
226
|
-
###
|
227
|
-
def do_clear
|
228
|
-
table_file_path = DeltaTest.config.table_file_path('')
|
229
|
-
|
230
|
-
return unless table_file_path
|
231
|
-
|
232
|
-
args = [
|
233
|
-
'rm',
|
234
|
-
'%s*' % Shellwords.escape(table_file_path),
|
235
|
-
]
|
236
|
-
|
237
|
-
Open3.capture3(args.join(' ')) rescue nil
|
238
|
-
end
|
239
|
-
|
240
|
-
###
|
241
|
-
# Show version
|
242
|
-
###
|
243
|
-
def do_version
|
244
|
-
puts 'DeltaTest v%s' % VERSION
|
245
|
-
end
|
246
|
-
|
247
|
-
###
|
248
|
-
# Show help
|
249
|
-
###
|
250
|
-
def do_help
|
251
|
-
if !@command.nil? && '-' != @command[0]
|
252
|
-
puts "Command not found: #{@command}"
|
253
|
-
end
|
254
|
-
|
255
|
-
puts <<HELP
|
256
|
-
usage: delta_test <command> [--base=<base>] [--head=<head>] [--verbose] [<args>]
|
257
|
-
[-v|--version]
|
258
|
-
|
259
|
-
options:
|
260
|
-
--base=<base> A branch or a commit id to diff from.
|
261
|
-
<head> is default to master.
|
262
|
-
|
263
|
-
--head=<head> A branch or a commit id to diff to.
|
264
|
-
<head> is default to HEAD. (current branch you're on)
|
265
|
-
|
266
|
-
--verbose Print more output.
|
267
|
-
|
268
|
-
-v, --version Show version.
|
269
|
-
|
270
|
-
commands:
|
271
|
-
list List related spec files for changes between base and head.
|
272
|
-
head is default to master; base is to the current branch.
|
273
|
-
|
274
|
-
table Show dependencies table.
|
275
|
-
|
276
|
-
exec <script> [-- <files>]
|
277
|
-
Execute test script using delta_test.
|
278
|
-
if <base> and <head> is the same commit or no dependencies table is found,
|
279
|
-
it'll run full test cases with a profile mode to create a table.
|
280
|
-
Otherwise, it'll run test script with only related spec files
|
281
|
-
passed by its arguments, like `delta_test list | xargs script'.
|
282
|
-
|
283
|
-
clear Clean up tables and caches.
|
284
|
-
HELP
|
285
|
-
end
|
286
|
-
|
287
|
-
|
288
|
-
private
|
289
|
-
|
290
|
-
###
|
291
|
-
# Check bundler existance
|
292
|
-
#
|
293
|
-
# @see http://github.com/carlhuda/bundler Bundler::SharedHelpers#find_gemfile
|
29
|
+
# Run cli
|
294
30
|
###
|
295
|
-
def
|
296
|
-
|
297
|
-
|
298
|
-
previous = nil
|
299
|
-
current = File.expand_path(Dir.pwd)
|
300
|
-
|
301
|
-
until !File.directory?(current) || current == previous
|
302
|
-
filename = File.join(current, 'Gemfile')
|
303
|
-
return true if File.exist?(filename)
|
304
|
-
current, previous = File.expand_path('..', current), current
|
305
|
-
end
|
306
|
-
|
307
|
-
false
|
31
|
+
def run
|
32
|
+
command_class = COMMANDS[@command] || COMMANDS['help']
|
33
|
+
command_class.new(@args).invoke
|
308
34
|
end
|
309
35
|
|
310
36
|
end
|
@@ -48,25 +48,30 @@ module DeltaTest
|
|
48
48
|
|
49
49
|
PART_FILE_EXT = '.part-%s'
|
50
50
|
|
51
|
-
attr_accessor
|
51
|
+
attr_accessor(*%i[
|
52
52
|
base_path
|
53
53
|
files
|
54
54
|
|
55
|
-
|
55
|
+
stats_path
|
56
|
+
stats_life
|
57
|
+
|
56
58
|
patterns
|
57
59
|
exclude_patterns
|
58
60
|
full_test_patterns
|
59
61
|
custom_mappings
|
60
|
-
]
|
62
|
+
])
|
61
63
|
|
62
64
|
# for precalculated values
|
63
|
-
attr_reader
|
65
|
+
attr_reader(*%i[
|
64
66
|
filtered_files
|
65
|
-
|
66
|
-
]
|
67
|
+
])
|
67
68
|
|
68
69
|
validate :base_path, 'need to be an absolute path' do
|
69
|
-
self.base_path.absolute?
|
70
|
+
self.base_path.absolute? rescue false
|
71
|
+
end
|
72
|
+
|
73
|
+
validate :base_path, 'need to be managed by git' do
|
74
|
+
Git.new(self.base_path).git_repo?
|
70
75
|
end
|
71
76
|
|
72
77
|
validate :files, 'need to be an array' do
|
@@ -77,6 +82,18 @@ module DeltaTest
|
|
77
82
|
self.patterns.is_a?(Array)
|
78
83
|
end
|
79
84
|
|
85
|
+
validate :stats_path, 'need to be an absolute path' do
|
86
|
+
self.stats_path.absolute? rescue false
|
87
|
+
end
|
88
|
+
|
89
|
+
validate :stats_path, 'need to be managed by git' do
|
90
|
+
Git.new(self.stats_path).git_repo?
|
91
|
+
end
|
92
|
+
|
93
|
+
validate :stats_life, 'need to be a real number' do
|
94
|
+
self.stats_life.is_a?(Integer) && self.stats_life > 0
|
95
|
+
end
|
96
|
+
|
80
97
|
validate :exclude_patterns, 'need to be an array' do
|
81
98
|
self.exclude_patterns.is_a?(Array)
|
82
99
|
end
|
@@ -94,10 +111,13 @@ module DeltaTest
|
|
94
111
|
end
|
95
112
|
|
96
113
|
def initialize
|
97
|
-
update do |c|
|
98
|
-
c.base_path
|
99
|
-
c.
|
100
|
-
|
114
|
+
update(validate: false) do |c|
|
115
|
+
c.base_path = File.expand_path('.')
|
116
|
+
c.files = []
|
117
|
+
|
118
|
+
c.stats_path = File.expand_path('tmp/delta_test_stats')
|
119
|
+
c.stats_life = 1000 # commits
|
120
|
+
|
101
121
|
c.patterns = []
|
102
122
|
c.exclude_patterns = []
|
103
123
|
c.full_test_patterns = []
|
@@ -115,37 +135,19 @@ module DeltaTest
|
|
115
135
|
# @return {Pathname}
|
116
136
|
###
|
117
137
|
def base_path=(path)
|
138
|
+
return unless path
|
118
139
|
@base_path = Pathname.new(path)
|
119
140
|
end
|
120
141
|
|
121
142
|
###
|
122
|
-
# Store
|
143
|
+
# Store stats_path as Pathname
|
123
144
|
#
|
124
145
|
# @params {String|Pathname} path
|
125
146
|
# @return {Pathname}
|
126
147
|
###
|
127
|
-
def
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
# Override getters
|
133
|
-
#-----------------------------------------------
|
134
|
-
###
|
135
|
-
# Returns file path for the table
|
136
|
-
#
|
137
|
-
# @params {String} part
|
138
|
-
#
|
139
|
-
# @return {Pathname}
|
140
|
-
###
|
141
|
-
def table_file_path(part = nil)
|
142
|
-
return unless @table_file_path
|
143
|
-
|
144
|
-
if part
|
145
|
-
@table_file_path.sub_ext(PART_FILE_EXT % part)
|
146
|
-
else
|
147
|
-
@table_file_path
|
148
|
-
end
|
148
|
+
def stats_path=(path)
|
149
|
+
return unless path
|
150
|
+
@stats_path = Pathname.new(path)
|
149
151
|
end
|
150
152
|
|
151
153
|
|
@@ -156,9 +158,9 @@ module DeltaTest
|
|
156
158
|
#
|
157
159
|
# @block
|
158
160
|
###
|
159
|
-
def update
|
161
|
+
def update(validate: true)
|
160
162
|
yield self if block_given?
|
161
|
-
validate!
|
163
|
+
validate! if validate
|
162
164
|
precalculate!
|
163
165
|
end
|
164
166
|
|
@@ -174,7 +176,7 @@ module DeltaTest
|
|
174
176
|
|
175
177
|
@filtered_files = Set.new(filtered_files)
|
176
178
|
|
177
|
-
@
|
179
|
+
@stats_path = Pathname.new(File.absolute_path(self.stats_path, self.base_path))
|
178
180
|
end
|
179
181
|
|
180
182
|
|
@@ -201,8 +203,13 @@ module DeltaTest
|
|
201
203
|
end
|
202
204
|
|
203
205
|
yaml = YAML.load_file(config_file)
|
206
|
+
yaml_dir = File.dirname(config_file)
|
204
207
|
|
205
|
-
|
208
|
+
_base_path = yaml.delete('base_path')
|
209
|
+
self.base_path = _base_path ? File.absolute_path(_base_path, yaml_dir) : yaml_dir
|
210
|
+
|
211
|
+
_stats_path = yaml.delete('stats_path')
|
212
|
+
self.stats_path = File.absolute_path(_stats_path, yaml_dir) if _stats_path
|
206
213
|
|
207
214
|
yaml.each do |k, v|
|
208
215
|
if self.respond_to?("#{k}=")
|
@@ -218,11 +225,19 @@ module DeltaTest
|
|
218
225
|
# And update `files`
|
219
226
|
###
|
220
227
|
def retrive_files_from_git_index!
|
221
|
-
|
222
|
-
|
223
|
-
|
228
|
+
self.files = Git.new(self.base_path).ls_files
|
229
|
+
end
|
230
|
+
|
224
231
|
|
225
|
-
|
232
|
+
# Getters
|
233
|
+
#-----------------------------------------------
|
234
|
+
###
|
235
|
+
# Temporary table file path
|
236
|
+
#
|
237
|
+
# @return {Pathname}
|
238
|
+
###
|
239
|
+
def tmp_table_file
|
240
|
+
self.stats_path.join('tmp', DeltaTest.tester_id)
|
226
241
|
end
|
227
242
|
|
228
243
|
end
|
data/lib/delta_test/errors.rb
CHANGED
@@ -20,6 +20,30 @@ module DeltaTest
|
|
20
20
|
|
21
21
|
end
|
22
22
|
|
23
|
+
class StatsNotFoundError < StandardError
|
24
|
+
|
25
|
+
def message
|
26
|
+
'no stats data found'
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
class StatsRepositorySyncError < StandardError
|
32
|
+
|
33
|
+
def message
|
34
|
+
'failed to sync the stats repository'
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
class TableFileStageError < StandardError
|
40
|
+
|
41
|
+
def message
|
42
|
+
'failed to stage a table file'
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
23
47
|
class NoConfigurationFileFoundError < IOError
|
24
48
|
|
25
49
|
def message
|
data/lib/delta_test/generator.rb
CHANGED
@@ -8,10 +8,10 @@ require_relative 'utils'
|
|
8
8
|
module DeltaTest
|
9
9
|
class Generator
|
10
10
|
|
11
|
-
attr_reader
|
11
|
+
attr_reader(*%i[
|
12
12
|
current_spec_file
|
13
13
|
table
|
14
|
-
]
|
14
|
+
])
|
15
15
|
|
16
16
|
###
|
17
17
|
# Setup table
|
@@ -24,7 +24,7 @@ module DeltaTest
|
|
24
24
|
|
25
25
|
DeltaTest.log('--- setup!')
|
26
26
|
|
27
|
-
@table = DependenciesTable.
|
27
|
+
@table = DependenciesTable.new
|
28
28
|
|
29
29
|
@current_spec_file = nil
|
30
30
|
end
|
@@ -75,28 +75,8 @@ module DeltaTest
|
|
75
75
|
@_teardown = true
|
76
76
|
|
77
77
|
DeltaTest.log('--- teardown!')
|
78
|
-
|
79
78
|
Profiler.clean!
|
80
|
-
|
81
|
-
if defined?(ParallelTests)
|
82
|
-
if ParallelTests.first_process?
|
83
|
-
ParallelTests.wait_for_other_processes_to_finish
|
84
|
-
|
85
|
-
table_file_path = DeltaTest.config.table_file_path('*')
|
86
|
-
|
87
|
-
Dir.glob(table_file_path).each do |part_file|
|
88
|
-
part_table = DependenciesTable.load(part_file)
|
89
|
-
@table.reverse_merge!(part_table)
|
90
|
-
end
|
91
|
-
else
|
92
|
-
table_file_path = DeltaTest.config.table_file_path(ENV['TEST_ENV_NUMBER'])
|
93
|
-
|
94
|
-
@table.dump(table_file_path)
|
95
|
-
return
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
@table.dump(DeltaTest.config.table_file_path)
|
79
|
+
@table.dump(DeltaTest.config.tmp_table_file)
|
100
80
|
end
|
101
81
|
|
102
82
|
###
|