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