##// END OF EJS Templates
Rails3: scm: git: fix error of test_fetch_changesets_from_scratch at unit model test...
Toshi MARUYAMA -
r6942:9cc83b425ba7
parent child
Show More
@@ -1,451 +1,452
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19
20 20 class RepositoryGitTest < ActiveSupport::TestCase
21 21 fixtures :projects, :repositories, :enabled_modules, :users, :roles
22 22
23 23 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
24 24 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
25 25
26 26 FELIX_HEX = "Felix Sch\xC3\xA4fer"
27 27 CHAR_1_HEX = "\xc3\x9c"
28 28
29 29 ## Ruby uses ANSI api to fork a process on Windows.
30 30 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
31 31 ## and these are incompatible with ASCII.
32 32 # WINDOWS_PASS = Redmine::Platform.mswin?
33 33 WINDOWS_PASS = false
34 34
35 35 ## Git, Mercurial and CVS path encodings are binary.
36 36 ## Subversion supports URL encoding for path.
37 37 ## Redmine Mercurial adapter and extension use URL encoding.
38 38 ## Git accepts only binary path in command line parameter.
39 39 ## So, there is no way to use binary command line parameter in JRuby.
40 40 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
41 41 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
42 42
43 43 if File.directory?(REPOSITORY_PATH)
44 44 def setup
45 45 klass = Repository::Git
46 46 assert_equal "Git", klass.scm_name
47 47 assert klass.scm_adapter_class
48 48 assert_not_equal "", klass.scm_command
49 49 assert_equal true, klass.scm_available
50 50
51 51 @project = Project.find(3)
52 52 @repository = Repository::Git.create(
53 53 :project => @project,
54 54 :url => REPOSITORY_PATH,
55 55 :path_encoding => 'ISO-8859-1'
56 56 )
57 57 assert @repository
58 58 @char_1 = CHAR_1_HEX.dup
59 59 if @char_1.respond_to?(:force_encoding)
60 60 @char_1.force_encoding('UTF-8')
61 61 end
62 62 end
63 63
64 64 def test_fetch_changesets_from_scratch
65 65 assert_nil @repository.extra_info
66 66
67 assert_equal 0, @repository.changesets.count
67 68 @repository.fetch_changesets
68 @repository.reload
69 @project.reload
69 70
70 71 assert_equal 21, @repository.changesets.count
71 72 assert_equal 33, @repository.changes.count
72 73
73 74 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
74 75 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
75 76 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
76 77 assert_equal User.find_by_login('jsmith'), commit.user
77 78 # TODO: add a commit with commit time <> author time to the test repository
78 79 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
79 80 assert_equal "2007-12-14".to_date, commit.commit_date
80 81 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
81 82 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
82 83 assert_equal 3, commit.changes.count
83 84 change = commit.changes.sort_by(&:path).first
84 85 assert_equal "README", change.path
85 86 assert_equal "A", change.action
86 87
87 88 assert_equal 4, @repository.extra_info["branches"].size
88 89 end
89 90
90 91 def test_fetch_changesets_incremental
91 92 @repository.fetch_changesets
92 93 @repository.reload
93 94 assert_equal 21, @repository.changesets.count
94 95 assert_equal 33, @repository.changes.count
95 96 extra_info_db = @repository.extra_info["branches"]
96 97 assert_equal 4, extra_info_db.size
97 98 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
98 99 extra_info_db["latin-1-path-encoding"]["last_scmid"]
99 100 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
100 101 extra_info_db["master"]["last_scmid"]
101 102
102 103 del_revs = [
103 104 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
104 105 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
105 106 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
106 107 "deff712f05a90d96edbd70facc47d944be5897e3",
107 108 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
108 109 "7e61ac704deecde634b51e59daa8110435dcb3da",
109 110 ]
110 111 @repository.changesets.each do |rev|
111 112 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
112 113 end
113 114 @repository.reload
114 115 cs1 = @repository.changesets
115 116 assert_equal 15, cs1.count
116 117 h = @repository.extra_info.dup
117 118 h["branches"]["master"]["last_scmid"] =
118 119 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
119 120 @repository.merge_extra_info(h)
120 121 @repository.save
121 122 @repository.reload
122 123 extra_info_db_1 = @repository.extra_info["branches"]
123 124 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
124 125 extra_info_db_1["master"]["last_scmid"]
125 126
126 127 @repository.fetch_changesets
127 128 assert_equal 21, @repository.changesets.count
128 129 end
129 130
130 131 def test_fetch_changesets_invalid_rev
131 132 @repository.fetch_changesets
132 133 @repository.reload
133 134 assert_equal 21, @repository.changesets.count
134 135 assert_equal 33, @repository.changes.count
135 136 extra_info_db = @repository.extra_info["branches"]
136 137 assert_equal 4, extra_info_db.size
137 138 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
138 139 extra_info_db["latin-1-path-encoding"]["last_scmid"]
139 140 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
140 141 extra_info_db["master"]["last_scmid"]
141 142
142 143 del_revs = [
143 144 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
144 145 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
145 146 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
146 147 "deff712f05a90d96edbd70facc47d944be5897e3",
147 148 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
148 149 "7e61ac704deecde634b51e59daa8110435dcb3da",
149 150 ]
150 151 @repository.changesets.each do |rev|
151 152 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
152 153 end
153 154 @repository.reload
154 155 cs1 = @repository.changesets
155 156 assert_equal 15, cs1.count
156 157 h = @repository.extra_info.dup
157 158 h["branches"]["master"]["last_scmid"] =
158 159 "abcd1234efgh"
159 160 @repository.merge_extra_info(h)
160 161 @repository.save
161 162 @repository.reload
162 163 extra_info_db_1 = @repository.extra_info["branches"]
163 164 assert_equal "abcd1234efgh",
164 165 extra_info_db_1["master"]["last_scmid"]
165 166
166 167 @repository.fetch_changesets
167 168 assert_equal 15, @repository.changesets.count
168 169 end
169 170
170 171 def test_db_consistent_ordering_init
171 172 assert_nil @repository.extra_info
172 173 @repository.fetch_changesets
173 174 @repository.reload
174 175 assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
175 176 end
176 177
177 178 def test_db_consistent_ordering_before_1_2
178 179 assert_nil @repository.extra_info
179 180 @repository.fetch_changesets
180 181 @repository.reload
181 182 assert_equal 21, @repository.changesets.count
182 183 assert_not_nil @repository.extra_info
183 184 @repository.write_attribute(:extra_info, nil)
184 185 @repository.save
185 186 assert_nil @repository.extra_info
186 187 assert_equal 21, @repository.changesets.count
187 188 @repository.fetch_changesets
188 189 @repository.reload
189 190 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
190 191
191 192 del_revs = [
192 193 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
193 194 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
194 195 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
195 196 "deff712f05a90d96edbd70facc47d944be5897e3",
196 197 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
197 198 "7e61ac704deecde634b51e59daa8110435dcb3da",
198 199 ]
199 200 @repository.changesets.each do |rev|
200 201 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
201 202 end
202 203 @repository.reload
203 204 cs1 = @repository.changesets
204 205 assert_equal 15, cs1.count
205 206 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
206 207 h = @repository.extra_info.dup
207 208 h["branches"]["master"]["last_scmid"] =
208 209 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
209 210 @repository.merge_extra_info(h)
210 211 @repository.save
211 212 @repository.reload
212 213 extra_info_db_1 = @repository.extra_info["branches"]
213 214 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
214 215 extra_info_db_1["master"]["last_scmid"]
215 216
216 217 @repository.fetch_changesets
217 218 assert_equal 21, @repository.changesets.count
218 219 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
219 220 end
220 221
221 222 def test_latest_changesets
222 223 @repository.fetch_changesets
223 224 @repository.reload
224 225 # with limit
225 226 changesets = @repository.latest_changesets('', nil, 2)
226 227 assert_equal 2, changesets.size
227 228
228 229 # with path
229 230 changesets = @repository.latest_changesets('images', nil)
230 231 assert_equal [
231 232 'deff712f05a90d96edbd70facc47d944be5897e3',
232 233 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
233 234 '7234cb2750b63f47bff735edc50a1c0a433c2518',
234 235 ], changesets.collect(&:revision)
235 236
236 237 changesets = @repository.latest_changesets('README', nil)
237 238 assert_equal [
238 239 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
239 240 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
240 241 '713f4944648826f558cf548222f813dabe7cbb04',
241 242 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
242 243 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
243 244 '7234cb2750b63f47bff735edc50a1c0a433c2518',
244 245 ], changesets.collect(&:revision)
245 246
246 247 # with path, revision and limit
247 248 changesets = @repository.latest_changesets('images', '899a15dba')
248 249 assert_equal [
249 250 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
250 251 '7234cb2750b63f47bff735edc50a1c0a433c2518',
251 252 ], changesets.collect(&:revision)
252 253
253 254 changesets = @repository.latest_changesets('images', '899a15dba', 1)
254 255 assert_equal [
255 256 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
256 257 ], changesets.collect(&:revision)
257 258
258 259 changesets = @repository.latest_changesets('README', '899a15dba')
259 260 assert_equal [
260 261 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
261 262 '7234cb2750b63f47bff735edc50a1c0a433c2518',
262 263 ], changesets.collect(&:revision)
263 264
264 265 changesets = @repository.latest_changesets('README', '899a15dba', 1)
265 266 assert_equal [
266 267 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
267 268 ], changesets.collect(&:revision)
268 269
269 270 # with path, tag and limit
270 271 changesets = @repository.latest_changesets('images', 'tag01.annotated')
271 272 assert_equal [
272 273 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
273 274 '7234cb2750b63f47bff735edc50a1c0a433c2518',
274 275 ], changesets.collect(&:revision)
275 276
276 277 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
277 278 assert_equal [
278 279 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
279 280 ], changesets.collect(&:revision)
280 281
281 282 changesets = @repository.latest_changesets('README', 'tag01.annotated')
282 283 assert_equal [
283 284 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
284 285 '7234cb2750b63f47bff735edc50a1c0a433c2518',
285 286 ], changesets.collect(&:revision)
286 287
287 288 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
288 289 assert_equal [
289 290 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
290 291 ], changesets.collect(&:revision)
291 292
292 293 # with path, branch and limit
293 294 changesets = @repository.latest_changesets('images', 'test_branch')
294 295 assert_equal [
295 296 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
296 297 '7234cb2750b63f47bff735edc50a1c0a433c2518',
297 298 ], changesets.collect(&:revision)
298 299
299 300 changesets = @repository.latest_changesets('images', 'test_branch', 1)
300 301 assert_equal [
301 302 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
302 303 ], changesets.collect(&:revision)
303 304
304 305 changesets = @repository.latest_changesets('README', 'test_branch')
305 306 assert_equal [
306 307 '713f4944648826f558cf548222f813dabe7cbb04',
307 308 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
308 309 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
309 310 '7234cb2750b63f47bff735edc50a1c0a433c2518',
310 311 ], changesets.collect(&:revision)
311 312
312 313 changesets = @repository.latest_changesets('README', 'test_branch', 2)
313 314 assert_equal [
314 315 '713f4944648826f558cf548222f813dabe7cbb04',
315 316 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
316 317 ], changesets.collect(&:revision)
317 318
318 319 if JRUBY_SKIP
319 320 puts JRUBY_SKIP_STR
320 321 else
321 322 # latin-1 encoding path
322 323 changesets = @repository.latest_changesets(
323 324 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
324 325 assert_equal [
325 326 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
326 327 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
327 328 ], changesets.collect(&:revision)
328 329
329 330 changesets = @repository.latest_changesets(
330 331 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
331 332 assert_equal [
332 333 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
333 334 ], changesets.collect(&:revision)
334 335 end
335 336 end
336 337
337 338 def test_latest_changesets_latin_1_dir
338 339 if WINDOWS_PASS
339 340 #
340 341 elsif JRUBY_SKIP
341 342 puts JRUBY_SKIP_STR
342 343 else
343 344 @repository.fetch_changesets
344 345 @repository.reload
345 346 changesets = @repository.latest_changesets(
346 347 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
347 348 assert_equal [
348 349 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
349 350 ], changesets.collect(&:revision)
350 351 end
351 352 end
352 353
353 354 def test_find_changeset_by_name
354 355 @repository.fetch_changesets
355 356 @repository.reload
356 357 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
357 358 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
358 359 @repository.find_changeset_by_name(r).revision
359 360 end
360 361 end
361 362
362 363 def test_find_changeset_by_empty_name
363 364 @repository.fetch_changesets
364 365 @repository.reload
365 366 ['', ' ', nil].each do |r|
366 367 assert_nil @repository.find_changeset_by_name(r)
367 368 end
368 369 end
369 370
370 371 def test_identifier
371 372 @repository.fetch_changesets
372 373 @repository.reload
373 374 c = @repository.changesets.find_by_revision(
374 375 '7234cb2750b63f47bff735edc50a1c0a433c2518')
375 376 assert_equal c.scmid, c.identifier
376 377 end
377 378
378 379 def test_format_identifier
379 380 @repository.fetch_changesets
380 381 @repository.reload
381 382 c = @repository.changesets.find_by_revision(
382 383 '7234cb2750b63f47bff735edc50a1c0a433c2518')
383 384 assert_equal '7234cb27', c.format_identifier
384 385 end
385 386
386 387 def test_activities
387 388 c = Changeset.new(:repository => @repository,
388 389 :committed_on => Time.now,
389 390 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
390 391 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
391 392 :comments => 'test')
392 393 assert c.event_title.include?('abc7234c:')
393 394 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
394 395 end
395 396
396 397 def test_log_utf8
397 398 @repository.fetch_changesets
398 399 @repository.reload
399 400 str_felix_hex = FELIX_HEX.dup
400 401 if str_felix_hex.respond_to?(:force_encoding)
401 402 str_felix_hex.force_encoding('UTF-8')
402 403 end
403 404 c = @repository.changesets.find_by_revision(
404 405 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
405 406 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
406 407 end
407 408
408 409 def test_previous
409 410 @repository.fetch_changesets
410 411 @repository.reload
411 412 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
412 413 changeset = @repository.find_changeset_by_name(r1)
413 414 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
414 415 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
415 416 end
416 417 end
417 418 end
418 419
419 420 def test_previous_nil
420 421 @repository.fetch_changesets
421 422 @repository.reload
422 423 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb2|.each do |r1|
423 424 changeset = @repository.find_changeset_by_name(r1)
424 425 assert_nil changeset.previous
425 426 end
426 427 end
427 428
428 429 def test_next
429 430 @repository.fetch_changesets
430 431 @repository.reload
431 432 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
432 433 changeset = @repository.find_changeset_by_name(r2)
433 434 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
434 435 assert_equal @repository.find_changeset_by_name(r1), changeset.next
435 436 end
436 437 end
437 438 end
438 439
439 440 def test_next_nil
440 441 @repository.fetch_changesets
441 442 @repository.reload
442 443 %w|67e7792ce20ccae2e4bb73eed09bb397819c8834 67e7792ce20cca|.each do |r1|
443 444 changeset = @repository.find_changeset_by_name(r1)
444 445 assert_nil changeset.next
445 446 end
446 447 end
447 448 else
448 449 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
449 450 def test_fake; assert true end
450 451 end
451 452 end
General Comments 0
You need to be logged in to leave comments. Login now