comparison test/unit/repository_mercurial_test.rb @ 1517:dffacf8a6908 redmine-2.5

Update to Redmine SVN revision 13367 on 2.5-stable branch
author Chris Cannam
date Tue, 09 Sep 2014 09:29:00 +0100
parents e248c7af89ec
children fb9a13467253
comparison
equal deleted inserted replaced
1516:b450a9d58aed 1517:dffacf8a6908
44 @branch_char_0.force_encoding('UTF-8') 44 @branch_char_0.force_encoding('UTF-8')
45 @branch_char_1.force_encoding('UTF-8') 45 @branch_char_1.force_encoding('UTF-8')
46 end 46 end
47 end 47 end
48 48
49
50 def test_blank_path_to_repository_error_message 49 def test_blank_path_to_repository_error_message
51 set_language_if_valid 'en' 50 set_language_if_valid 'en'
52 repo = Repository::Mercurial.new( 51 repo = Repository::Mercurial.new(
53 :project => @project, 52 :project => @project,
54 :identifier => 'test' 53 :identifier => 'test'
79 assert klass.scm_adapter_class 78 assert klass.scm_adapter_class
80 assert_not_equal "", klass.scm_command 79 assert_not_equal "", klass.scm_command
81 assert_equal true, klass.scm_available 80 assert_equal true, klass.scm_available
82 end 81 end
83 82
84 def test_entries 83 def test_entries_on_tip
85 entries = @repository.entries 84 entries = @repository.entries
86 assert_kind_of Redmine::Scm::Adapters::Entries, entries 85 assert_kind_of Redmine::Scm::Adapters::Entries, entries
87 end 86 end
88 87
88 def assert_entries(is_short_scmid=true)
89 hex = "9d5b5b00419901478496242e0768deba1ce8c51e"
90 scmid = scmid_for_assert(hex, is_short_scmid)
91 [2, '400bb8672109', '400', 400].each do |r|
92 entries1 = @repository.entries(nil, r)
93 assert entries1
94 assert_kind_of Redmine::Scm::Adapters::Entries, entries1
95 assert_equal 3, entries1.size
96 readme = entries1[2]
97 assert_equal '1', readme.lastrev.revision
98 assert_equal scmid, readme.lastrev.identifier
99 assert_equal '1', readme.changeset.revision
100 assert_equal scmid, readme.changeset.scmid
101 end
102 end
103 private :assert_entries
104
105 def test_entries_short_id
106 assert_equal 0, @repository.changesets.count
107 create_rev0_short_id
108 assert_equal 1, @repository.changesets.count
109 @repository.fetch_changesets
110 @project.reload
111 assert_equal NUM_REV, @repository.changesets.count
112 assert_entries(true)
113 end
114
115 def test_entries_long_id
116 assert_equal 0, @repository.changesets.count
117 @repository.fetch_changesets
118 @project.reload
119 assert_equal NUM_REV, @repository.changesets.count
120 assert_entries(false)
121 end
122
123 def test_entry_on_tip
124 entry = @repository.entry
125 assert_kind_of Redmine::Scm::Adapters::Entry, entry
126 assert_equal "", entry.path
127 assert_equal 'dir', entry.kind
128 end
129
130 def assert_entry(is_short_scmid=true)
131 hex = "0885933ad4f68d77c2649cd11f8311276e7ef7ce"
132 scmid = scmid_for_assert(hex, is_short_scmid)
133 ["README", "/README"].each do |path|
134 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
135 entry = @repository.entry(path, rev)
136 assert_kind_of Redmine::Scm::Adapters::Entry, entry
137 assert_equal "README", entry.path
138 assert_equal "file", entry.kind
139 assert_equal '0', entry.lastrev.revision
140 assert_equal scmid, entry.lastrev.identifier
141 end
142 end
143 ["sources", "/sources", "/sources/"].each do |path|
144 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
145 entry = @repository.entry(path, rev)
146 assert_kind_of Redmine::Scm::Adapters::Entry, entry
147 assert_equal "sources", entry.path
148 assert_equal "dir", entry.kind
149 end
150 end
151 ["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
152 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
153 entry = @repository.entry(path, rev)
154 assert_kind_of Redmine::Scm::Adapters::Entry, entry
155 assert_equal "sources/watchers_controller.rb", entry.path
156 assert_equal "file", entry.kind
157 assert_equal '0', entry.lastrev.revision
158 assert_equal scmid, entry.lastrev.identifier
159 end
160 end
161 end
162 private :assert_entry
163
164 def test_entry_short_id
165 assert_equal 0, @repository.changesets.count
166 create_rev0_short_id
167 assert_equal 1, @repository.changesets.count
168 assert_entry(true)
169 end
170
171 def test_entry_long_id
172 assert_entry(false)
173 end
174
89 def test_fetch_changesets_from_scratch 175 def test_fetch_changesets_from_scratch
90 assert_equal 0, @repository.changesets.count 176 assert_equal 0, @repository.changesets.count
91 @repository.fetch_changesets 177 @repository.fetch_changesets
92 @project.reload 178 @project.reload
93 assert_equal NUM_REV, @repository.changesets.count 179 assert_equal NUM_REV, @repository.changesets.count
94 assert_equal 46, @repository.filechanges.count 180 assert_equal 46, @repository.filechanges.count
181 rev0 = @repository.changesets.find_by_revision('0')
95 assert_equal "Initial import.\nThe repository contains 3 files.", 182 assert_equal "Initial import.\nThe repository contains 3 files.",
96 @repository.changesets.find_by_revision('0').comments 183 rev0.comments
184 assert_equal "0885933ad4f68d77c2649cd11f8311276e7ef7ce", rev0.scmid
185 first_rev = @repository.changesets.first
186 last_rev = @repository.changesets.last
187 assert_equal "#{NUM_REV - 1}", first_rev.revision
188 assert_equal "0", last_rev.revision
189 end
190
191 def test_fetch_changesets_keep_short_id
192 assert_equal 0, @repository.changesets.count
193 create_rev0_short_id
194 assert_equal 1, @repository.changesets.count
195 @repository.fetch_changesets
196 @project.reload
197 assert_equal NUM_REV, @repository.changesets.count
198 rev1 = @repository.changesets.find_by_revision('1')
199 assert_equal "9d5b5b004199", rev1.scmid
200 end
201
202 def test_fetch_changesets_keep_long_id
203 assert_equal 0, @repository.changesets.count
204 Changeset.create!(:repository => @repository,
205 :committed_on => Time.now,
206 :revision => '0',
207 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
208 :comments => 'test')
209 assert_equal 1, @repository.changesets.count
210 @repository.fetch_changesets
211 @project.reload
212 assert_equal NUM_REV, @repository.changesets.count
213 rev1 = @repository.changesets.find_by_revision('1')
214 assert_equal "9d5b5b00419901478496242e0768deba1ce8c51e", rev1.scmid
97 end 215 end
98 216
99 def test_fetch_changesets_incremental 217 def test_fetch_changesets_incremental
100 assert_equal 0, @repository.changesets.count 218 assert_equal 0, @repository.changesets.count
101 @repository.fetch_changesets 219 @repository.fetch_changesets
102 @project.reload 220 @project.reload
103 assert_equal NUM_REV, @repository.changesets.count 221 assert_equal NUM_REV, @repository.changesets.count
104 # Remove changesets with revision > 2 222 # Remove changesets with revision > 2
105 @repository.changesets.all.each {|c| c.destroy if c.revision.to_i > 2} 223 @repository.changesets.each {|c| c.destroy if c.revision.to_i > 2}
106 @project.reload 224 @project.reload
225 @repository.reload
107 assert_equal 3, @repository.changesets.count 226 assert_equal 3, @repository.changesets.count
108 227
109 @repository.fetch_changesets 228 @repository.fetch_changesets
110 @project.reload 229 @project.reload
111 assert_equal NUM_REV, @repository.changesets.count 230 assert_equal NUM_REV, @repository.changesets.count
185 changesets = @repository.latest_changesets(path, '12') 304 changesets = @repository.latest_changesets(path, '12')
186 assert_equal %w|12 9|, changesets.collect(&:revision) 305 assert_equal %w|12 9|, changesets.collect(&:revision)
187 306
188 changesets = @repository.latest_changesets(path, '12', 1) 307 changesets = @repository.latest_changesets(path, '12', 1)
189 assert_equal %w|12|, changesets.collect(&:revision) 308 assert_equal %w|12|, changesets.collect(&:revision)
190 309 end
191 # tag 310
311 def assert_latest_changesets_tag
192 changesets = @repository.latest_changesets('', 'tag_test.00') 312 changesets = @repository.latest_changesets('', 'tag_test.00')
193 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision) 313 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
314 end
315 private :assert_latest_changesets_tag
316
317 def test_latest_changesets_tag
318 assert_equal 0, @repository.changesets.count
319 @repository.fetch_changesets
320 @project.reload
321 assert_equal NUM_REV, @repository.changesets.count
322 assert_latest_changesets_tag
323 end
324
325 def test_latest_changesets_tag_short_id
326 assert_equal 0, @repository.changesets.count
327 create_rev0_short_id
328 assert_equal 1, @repository.changesets.count
329 @repository.fetch_changesets
330 @project.reload
331 assert_equal NUM_REV, @repository.changesets.count
332 assert_latest_changesets_tag
333 end
334
335 def test_latest_changesets_tag_with_path
336 assert_equal 0, @repository.changesets.count
337 @repository.fetch_changesets
338 @project.reload
339 assert_equal NUM_REV, @repository.changesets.count
340
341 changesets = @repository.latest_changesets('sources', 'tag_test.00')
342 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
343 end
344
345 def test_latest_changesets_tag_with_limit
346 assert_equal 0, @repository.changesets.count
347 @repository.fetch_changesets
348 @project.reload
349 assert_equal NUM_REV, @repository.changesets.count
194 350
195 changesets = @repository.latest_changesets('', 'tag_test.00', 2) 351 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
196 assert_equal %w|5 4|, changesets.collect(&:revision) 352 assert_equal %w|5 4|, changesets.collect(&:revision)
197 353
198 changesets = @repository.latest_changesets('sources', 'tag_test.00')
199 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
200
201 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2) 354 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
202 assert_equal %w|4 3|, changesets.collect(&:revision) 355 assert_equal %w|4 3|, changesets.collect(&:revision)
203 356 end
204 # named branch 357
358 def test_latest_changesets_branch
359 assert_equal 0, @repository.changesets.count
360 @repository.fetch_changesets
361 @project.reload
362 assert_equal NUM_REV, @repository.changesets.count
363
205 if @repository.scm.class.client_version_above?([1, 6]) 364 if @repository.scm.class.client_version_above?([1, 6])
206 changesets = @repository.latest_changesets('', @branch_char_1) 365 changesets = @repository.latest_changesets('', @branch_char_1)
207 assert_equal %w|27 26|, changesets.collect(&:revision) 366 assert_equal %w|27 26|, changesets.collect(&:revision)
208 end 367 end
209 368
210 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1) 369 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
211 assert_equal %w|27|, changesets.collect(&:revision) 370 assert_equal %w|27|, changesets.collect(&:revision)
212 end 371 end
213 372
214 def test_copied_files 373 def assert_latest_changesets_default_branch
215 assert_equal 0, @repository.changesets.count 374 changesets = @repository.latest_changesets('', 'default')
216 @repository.fetch_changesets 375 assert_equal %w|31 28 24 6 4 3 2 1 0|, changesets.collect(&:revision)
217 @project.reload 376 end
218 assert_equal NUM_REV, @repository.changesets.count 377 private :assert_latest_changesets_default_branch
219 378
379 def test_latest_changesets_default_branch
380 assert_equal 0, @repository.changesets.count
381 @repository.fetch_changesets
382 @project.reload
383 assert_equal NUM_REV, @repository.changesets.count
384 assert_latest_changesets_default_branch
385 end
386
387 def test_latest_changesets_default_branch_short_id
388 assert_equal 0, @repository.changesets.count
389 create_rev0_short_id
390 assert_equal 1, @repository.changesets.count
391 @repository.fetch_changesets
392 @project.reload
393 assert_equal NUM_REV, @repository.changesets.count
394 assert_latest_changesets_default_branch
395 end
396
397 def assert_copied_files(is_short_scmid=true)
220 cs1 = @repository.changesets.find_by_revision('13') 398 cs1 = @repository.changesets.find_by_revision('13')
221 assert_not_nil cs1 399 assert_not_nil cs1
222 c1 = cs1.filechanges.sort_by(&:path) 400 c1 = cs1.filechanges.sort_by(&:path)
223 assert_equal 2, c1.size 401 assert_equal 2, c1.size
224 402
403 hex1 = "3a330eb329586ea2adb3f83237c23310e744ebe9"
404 scmid1 = scmid_for_assert(hex1, is_short_scmid)
225 assert_equal 'A', c1[0].action 405 assert_equal 'A', c1[0].action
226 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path 406 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
227 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path 407 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
228 assert_equal '3a330eb32958', c1[0].from_revision 408 assert_equal scmid1, c1[0].from_revision
229 409
230 assert_equal 'A', c1[1].action 410 assert_equal 'A', c1[1].action
231 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path 411 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
232 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path 412 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
233 413
234 cs2 = @repository.changesets.find_by_revision('15') 414 cs2 = @repository.changesets.find_by_revision('15')
235 c2 = cs2.filechanges 415 c2 = cs2.filechanges
236 assert_equal 1, c2.size 416 assert_equal 1, c2.size
237 417
418 hex2 = "933ca60293d78f7c7979dd123cc0c02431683575"
419 scmid2 = scmid_for_assert(hex2, is_short_scmid)
238 assert_equal 'A', c2[0].action 420 assert_equal 'A', c2[0].action
239 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path 421 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
240 assert_equal '/README', c2[0].from_path 422 assert_equal '/README', c2[0].from_path
241 assert_equal '933ca60293d7', c2[0].from_revision 423 assert_equal scmid2, c2[0].from_revision
242 424
243 cs3 = @repository.changesets.find_by_revision('19') 425 cs3 = @repository.changesets.find_by_revision('19')
244 c3 = cs3.filechanges 426 c3 = cs3.filechanges
427
428 hex3 = "5d9891a1b4258ea256552aa856e388f2da28256a"
429 scmid3 = scmid_for_assert(hex3, is_short_scmid)
245 assert_equal 1, c3.size 430 assert_equal 1, c3.size
246 assert_equal 'A', c3[0].action 431 assert_equal 'A', c3[0].action
247 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path 432 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
248 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path 433 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
249 assert_equal '5d9891a1b425', c3[0].from_revision 434 assert_equal scmid3, c3[0].from_revision
435 end
436 private :assert_copied_files
437
438 def test_copied_files_short_id
439 assert_equal 0, @repository.changesets.count
440 create_rev0_short_id
441 assert_equal 1, @repository.changesets.count
442 @repository.fetch_changesets
443 @project.reload
444 assert_equal NUM_REV, @repository.changesets.count
445 assert_copied_files(true)
446 end
447
448 def test_copied_files_long_id
449 assert_equal 0, @repository.changesets.count
450 @repository.fetch_changesets
451 @project.reload
452 assert_equal NUM_REV, @repository.changesets.count
453 assert_copied_files(false)
250 end 454 end
251 455
252 def test_find_changeset_by_name 456 def test_find_changeset_by_name
253 assert_equal 0, @repository.changesets.count 457 assert_equal 0, @repository.changesets.count
254 @repository.fetch_changesets 458 @repository.fetch_changesets
283 assert_equal NUM_REV, @repository.changesets.count 487 assert_equal NUM_REV, @repository.changesets.count
284 c = @repository.changesets.find_by_revision('2') 488 c = @repository.changesets.find_by_revision('2')
285 assert_equal '2:400bb8672109', c.format_identifier 489 assert_equal '2:400bb8672109', c.format_identifier
286 end 490 end
287 491
492 def test_format_identifier_long_id
493 assert_equal 0, @repository.changesets.count
494 Changeset.create!(:repository => @repository,
495 :committed_on => Time.now,
496 :revision => '0',
497 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
498 :comments => 'test')
499 c = @repository.changesets.find_by_revision('0')
500 assert_equal '0:0885933ad4f6', c.format_identifier
501 end
502
288 def test_find_changeset_by_empty_name 503 def test_find_changeset_by_empty_name
289 assert_equal 0, @repository.changesets.count 504 assert_equal 0, @repository.changesets.count
290 @repository.fetch_changesets 505 @repository.fetch_changesets
291 @project.reload 506 @project.reload
292 assert_equal NUM_REV, @repository.changesets.count 507 assert_equal NUM_REV, @repository.changesets.count
293 ['', ' ', nil].each do |r| 508 ['', ' ', nil].each do |r|
294 assert_nil @repository.find_changeset_by_name(r) 509 assert_nil @repository.find_changeset_by_name(r)
295 end 510 end
296 end 511 end
297 512
298 def test_parents 513 def assert_parents(is_short_scmid=true)
299 assert_equal 0, @repository.changesets.count
300 @repository.fetch_changesets
301 @project.reload
302 assert_equal NUM_REV, @repository.changesets.count
303 r1 = @repository.changesets.find_by_revision('0') 514 r1 = @repository.changesets.find_by_revision('0')
304 assert_equal [], r1.parents 515 assert_equal [], r1.parents
305 r2 = @repository.changesets.find_by_revision('1') 516 r2 = @repository.changesets.find_by_revision('1')
517 hex2 = "0885933ad4f68d77c2649cd11f8311276e7ef7ce"
518 scmid2 = scmid_for_assert(hex2, is_short_scmid)
306 assert_equal 1, r2.parents.length 519 assert_equal 1, r2.parents.length
307 assert_equal "0885933ad4f6", 520 assert_equal scmid2, r2.parents[0].identifier
308 r2.parents[0].identifier
309 r3 = @repository.changesets.find_by_revision('30') 521 r3 = @repository.changesets.find_by_revision('30')
310 assert_equal 2, r3.parents.length 522 assert_equal 2, r3.parents.length
311 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort 523 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
312 assert_equal "3a330eb32958", r4[0] 524 hex41 = "3a330eb329586ea2adb3f83237c23310e744ebe9"
313 assert_equal "a94b0528f24f", r4[1] 525 scmid41 = scmid_for_assert(hex41, is_short_scmid)
526 hex42 = "a94b0528f24fe05ebaef496ae0500bb050772e36"
527 scmid42 = scmid_for_assert(hex42, is_short_scmid)
528 assert_equal scmid41, r4[0]
529 assert_equal scmid42, r4[1]
530 end
531 private :assert_parents
532
533 def test_parents_short_id
534 assert_equal 0, @repository.changesets.count
535 create_rev0_short_id
536 assert_equal 1, @repository.changesets.count
537 @repository.fetch_changesets
538 @project.reload
539 assert_equal NUM_REV, @repository.changesets.count
540 assert_parents(true)
541 end
542
543 def test_parents_long_id
544 assert_equal 0, @repository.changesets.count
545 @repository.fetch_changesets
546 @project.reload
547 assert_equal NUM_REV, @repository.changesets.count
548 assert_parents(false)
314 end 549 end
315 550
316 def test_activities 551 def test_activities
317 c = Changeset.new(:repository => @repository, 552 c = Changeset.new(:repository => @repository,
318 :committed_on => Time.now, 553 :committed_on => Time.now,
368 ["#{NUM_REV - 1}", "2e6d54642923", "2e6d5"].each do |r1| 603 ["#{NUM_REV - 1}", "2e6d54642923", "2e6d5"].each do |r1|
369 changeset = @repository.find_changeset_by_name(r1) 604 changeset = @repository.find_changeset_by_name(r1)
370 assert_nil changeset.next 605 assert_nil changeset.next
371 end 606 end
372 end 607 end
608
609 def test_scmid_for_inserting_db_short_id
610 assert_equal 0, @repository.changesets.count
611 create_rev0_short_id
612 assert_equal 1, @repository.changesets.count
613 rev = "0123456789012345678901234567890123456789"
614 assert_equal 12, @repository.scmid_for_inserting_db(rev).length
615 end
616
617 def test_scmid_for_inserting_db_long_id
618 rev = "0123456789012345678901234567890123456789"
619 assert_equal 0, @repository.changesets.count
620 assert_equal 40, @repository.scmid_for_inserting_db(rev).length
621 Changeset.create!(:repository => @repository,
622 :committed_on => Time.now,
623 :revision => '0',
624 :scmid => rev,
625 :comments => 'test')
626 assert_equal 1, @repository.changesets.count
627 assert_equal 40, @repository.scmid_for_inserting_db(rev).length
628 end
629
630 def test_scmid_for_assert
631 rev = "0123456789012345678901234567890123456789"
632 assert_equal rev, scmid_for_assert(rev, false)
633 assert_equal "012345678901", scmid_for_assert(rev, true)
634 end
635
636 private
637
638 def scmid_for_assert(hex, is_short=true)
639 is_short ? hex[0, 12] : hex
640 end
641
642 def create_rev0_short_id
643 Changeset.create!(:repository => @repository,
644 :committed_on => Time.now,
645 :revision => '0',
646 :scmid => '0885933ad4f6',
647 :comments => 'test')
648 end
373 else 649 else
374 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!" 650 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
375 def test_fake; assert true end 651 def test_fake; assert true end
376 end 652 end
377 end 653 end