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