##// END OF EJS Templates
scm: git: update test repository (#10207)...
Toshi MARUYAMA -
r8735:804482ef2b5e
parent child
Show More
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,524 +1,528
1 # encoding: utf-8
1 # encoding: utf-8
2
2
3 # This file includes UTF-8 "Felix Schäfer".
3 # This file includes UTF-8 "Felix Schäfer".
4 # We need to consider Ruby 1.9 compatibility.
4 # We need to consider Ruby 1.9 compatibility.
5
5
6 require File.expand_path('../../../../../../test_helper', __FILE__)
6 require File.expand_path('../../../../../../test_helper', __FILE__)
7 begin
7 begin
8 require 'mocha'
8 require 'mocha'
9
9
10 class GitAdapterTest < ActiveSupport::TestCase
10 class GitAdapterTest < ActiveSupport::TestCase
11 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
11 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
12
12
13 FELIX_UTF8 = "Felix Schäfer"
13 FELIX_UTF8 = "Felix Schäfer"
14 FELIX_HEX = "Felix Sch\xC3\xA4fer"
14 FELIX_HEX = "Felix Sch\xC3\xA4fer"
15 CHAR_1_HEX = "\xc3\x9c"
15 CHAR_1_HEX = "\xc3\x9c"
16
16
17 ## Ruby uses ANSI api to fork a process on Windows.
17 ## Ruby uses ANSI api to fork a process on Windows.
18 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
18 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
19 ## and these are incompatible with ASCII.
19 ## and these are incompatible with ASCII.
20 # WINDOWS_PASS = Redmine::Platform.mswin?
20 # WINDOWS_PASS = Redmine::Platform.mswin?
21 WINDOWS_PASS = false
21 WINDOWS_PASS = false
22
22
23 ## Git, Mercurial and CVS path encodings are binary.
23 ## Git, Mercurial and CVS path encodings are binary.
24 ## Subversion supports URL encoding for path.
24 ## Subversion supports URL encoding for path.
25 ## Redmine Mercurial adapter and extension use URL encoding.
25 ## Redmine Mercurial adapter and extension use URL encoding.
26 ## Git accepts only binary path in command line parameter.
26 ## Git accepts only binary path in command line parameter.
27 ## So, there is no way to use binary command line parameter in JRuby.
27 ## So, there is no way to use binary command line parameter in JRuby.
28 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
28 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
29 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
29 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
30
30
31 if File.directory?(REPOSITORY_PATH)
31 if File.directory?(REPOSITORY_PATH)
32 def setup
32 def setup
33 adapter_class = Redmine::Scm::Adapters::GitAdapter
33 adapter_class = Redmine::Scm::Adapters::GitAdapter
34 assert adapter_class
34 assert adapter_class
35 assert adapter_class.client_command
35 assert adapter_class.client_command
36 assert_equal true, adapter_class.client_available
36 assert_equal true, adapter_class.client_available
37 assert_equal true, adapter_class.client_version_above?([1])
37 assert_equal true, adapter_class.client_version_above?([1])
38 assert_equal true, adapter_class.client_version_above?([1, 0])
38 assert_equal true, adapter_class.client_version_above?([1, 0])
39
39
40 @adapter = Redmine::Scm::Adapters::GitAdapter.new(
40 @adapter = Redmine::Scm::Adapters::GitAdapter.new(
41 REPOSITORY_PATH,
41 REPOSITORY_PATH,
42 nil,
42 nil,
43 nil,
43 nil,
44 nil,
44 nil,
45 'ISO-8859-1'
45 'ISO-8859-1'
46 )
46 )
47 assert @adapter
47 assert @adapter
48 @char_1 = CHAR_1_HEX.dup
48 @char_1 = CHAR_1_HEX.dup
49 if @char_1.respond_to?(:force_encoding)
49 if @char_1.respond_to?(:force_encoding)
50 @char_1.force_encoding('UTF-8')
50 @char_1.force_encoding('UTF-8')
51 end
51 end
52 end
52 end
53
53
54 def test_scm_version
54 def test_scm_version
55 to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
55 to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
56 "1.6.1\n1.7\n1.8" => [1,6,1],
56 "1.6.1\n1.7\n1.8" => [1,6,1],
57 "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
57 "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
58 to_test.each do |s, v|
58 to_test.each do |s, v|
59 test_scm_version_for(s, v)
59 test_scm_version_for(s, v)
60 end
60 end
61 end
61 end
62
62
63 def test_branches
63 def test_branches
64 brs = []
64 brs = []
65 @adapter.branches.each do |b|
65 @adapter.branches.each do |b|
66 brs << b
66 brs << b
67 end
67 end
68 assert_equal 5, brs.length
68 assert_equal 6, brs.length
69 br_issue_8857 = brs[-5]
69 br_issue_8857 = brs[0]
70 assert_equal 'issue-8857', br_issue_8857.to_s
70 assert_equal 'issue-8857', br_issue_8857.to_s
71 assert_equal '2a682156a3b6e77a8bf9cd4590e8db757f3c6c78', br_issue_8857.revision
71 assert_equal '2a682156a3b6e77a8bf9cd4590e8db757f3c6c78', br_issue_8857.revision
72 assert_equal br_issue_8857.scmid, br_issue_8857.revision
72 assert_equal br_issue_8857.scmid, br_issue_8857.revision
73 br_latin_1_path = brs[-4]
73 br_latin_1_path = brs[1]
74 assert_equal 'latin-1-path-encoding', br_latin_1_path.to_s
74 assert_equal 'latin-1-path-encoding', br_latin_1_path.to_s
75 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', br_latin_1_path.revision
75 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', br_latin_1_path.revision
76 assert_equal br_latin_1_path.scmid, br_latin_1_path.revision
76 assert_equal br_latin_1_path.scmid, br_latin_1_path.revision
77 br_master = brs[-3]
77 br_master = brs[2]
78 assert_equal 'master', br_master.to_s
78 assert_equal 'master', br_master.to_s
79 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master.revision
79 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master.revision
80 assert_equal br_master.scmid, br_master.revision
80 assert_equal br_master.scmid, br_master.revision
81 br_master_20120212 = brs[3]
82 assert_equal 'master-20120212', br_master_20120212.to_s
83 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master_20120212.revision
84 assert_equal br_master_20120212.scmid, br_master_20120212.revision
81 br_latin_1 = brs[-2]
85 br_latin_1 = brs[-2]
82 assert_equal 'test-latin-1', br_latin_1.to_s
86 assert_equal 'test-latin-1', br_latin_1.to_s
83 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', br_latin_1.revision
87 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', br_latin_1.revision
84 assert_equal br_latin_1.scmid, br_latin_1.revision
88 assert_equal br_latin_1.scmid, br_latin_1.revision
85 br_test = brs[-1]
89 br_test = brs[-1]
86 assert_equal 'test_branch', br_test.to_s
90 assert_equal 'test_branch', br_test.to_s
87 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', br_test.revision
91 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', br_test.revision
88 assert_equal br_test.scmid, br_test.revision
92 assert_equal br_test.scmid, br_test.revision
89 end
93 end
90
94
91 def test_tags
95 def test_tags
92 assert_equal [
96 assert_equal [
93 "tag00.lightweight",
97 "tag00.lightweight",
94 "tag01.annotated",
98 "tag01.annotated",
95 ], @adapter.tags
99 ], @adapter.tags
96 end
100 end
97
101
98 def test_revisions_master_all
102 def test_revisions_master_all
99 revs1 = []
103 revs1 = []
100 @adapter.revisions('', nil, "master",{}) do |rev|
104 @adapter.revisions('', nil, "master",{}) do |rev|
101 revs1 << rev
105 revs1 << rev
102 end
106 end
103 assert_equal 15, revs1.length
107 assert_equal 15, revs1.length
104 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
108 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
105 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
109 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
106
110
107 revs2 = []
111 revs2 = []
108 @adapter.revisions('', nil, "master",
112 @adapter.revisions('', nil, "master",
109 {:reverse => true}) do |rev|
113 {:reverse => true}) do |rev|
110 revs2 << rev
114 revs2 << rev
111 end
115 end
112 assert_equal 15, revs2.length
116 assert_equal 15, revs2.length
113 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
117 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
114 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
118 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
115 end
119 end
116
120
117 def test_revisions_master_merged_rev
121 def test_revisions_master_merged_rev
118 revs1 = []
122 revs1 = []
119 @adapter.revisions('',
123 @adapter.revisions('',
120 "713f4944648826f558cf548222f813dabe7cbb04",
124 "713f4944648826f558cf548222f813dabe7cbb04",
121 "master",
125 "master",
122 {:reverse => true}) do |rev|
126 {:reverse => true}) do |rev|
123 revs1 << rev
127 revs1 << rev
124 end
128 end
125 assert_equal 8, revs1.length
129 assert_equal 8, revs1.length
126 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
130 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
127 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
131 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
128 # 4a07fe31b is not a child of 713f49446
132 # 4a07fe31b is not a child of 713f49446
129 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
133 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
130 # Merged revision
134 # Merged revision
131 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
135 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
132 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
136 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
133
137
134 revs2 = []
138 revs2 = []
135 @adapter.revisions('',
139 @adapter.revisions('',
136 "fba357b886984ee71185ad2065e65fc0417d9b92",
140 "fba357b886984ee71185ad2065e65fc0417d9b92",
137 "master",
141 "master",
138 {:reverse => true}) do |rev|
142 {:reverse => true}) do |rev|
139 revs2 << rev
143 revs2 << rev
140 end
144 end
141 assert_equal 7, revs2.length
145 assert_equal 7, revs2.length
142 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
146 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
143 # 4a07fe31b is not a child of fba357b8869
147 # 4a07fe31b is not a child of fba357b8869
144 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
148 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
145 # Merged revision
149 # Merged revision
146 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
150 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
147 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
151 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
148 end
152 end
149
153
150 def test_revisions_branch_latin_1_path_encoding_all
154 def test_revisions_branch_latin_1_path_encoding_all
151 revs1 = []
155 revs1 = []
152 @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
156 @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
153 revs1 << rev
157 revs1 << rev
154 end
158 end
155 assert_equal 8, revs1.length
159 assert_equal 8, revs1.length
156 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
160 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
157 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
161 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
158
162
159 revs2 = []
163 revs2 = []
160 @adapter.revisions('', nil, "latin-1-path-encoding",
164 @adapter.revisions('', nil, "latin-1-path-encoding",
161 {:reverse => true}) do |rev|
165 {:reverse => true}) do |rev|
162 revs2 << rev
166 revs2 << rev
163 end
167 end
164 assert_equal 8, revs2.length
168 assert_equal 8, revs2.length
165 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
169 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
166 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
170 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
167 end
171 end
168
172
169 def test_revisions_branch_latin_1_path_encoding_with_rev
173 def test_revisions_branch_latin_1_path_encoding_with_rev
170 revs1 = []
174 revs1 = []
171 @adapter.revisions('',
175 @adapter.revisions('',
172 '7234cb2750b63f47bff735edc50a1c0a433c2518',
176 '7234cb2750b63f47bff735edc50a1c0a433c2518',
173 "latin-1-path-encoding",
177 "latin-1-path-encoding",
174 {:reverse => true}) do |rev|
178 {:reverse => true}) do |rev|
175 revs1 << rev
179 revs1 << rev
176 end
180 end
177 assert_equal 7, revs1.length
181 assert_equal 7, revs1.length
178 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
182 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
179 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
183 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
180
184
181 revs2 = []
185 revs2 = []
182 @adapter.revisions('',
186 @adapter.revisions('',
183 '57ca437c0acbbcb749821fdf3726a1367056d364',
187 '57ca437c0acbbcb749821fdf3726a1367056d364',
184 "latin-1-path-encoding",
188 "latin-1-path-encoding",
185 {:reverse => true}) do |rev|
189 {:reverse => true}) do |rev|
186 revs2 << rev
190 revs2 << rev
187 end
191 end
188 assert_equal 3, revs2.length
192 assert_equal 3, revs2.length
189 assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
193 assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
190 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
194 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
191 end
195 end
192
196
193 def test_revisions_invalid_rev
197 def test_revisions_invalid_rev
194 assert_equal [], @adapter.revisions('', '1234abcd', "master")
198 assert_equal [], @adapter.revisions('', '1234abcd', "master")
195 assert_raise Redmine::Scm::Adapters::CommandFailed do
199 assert_raise Redmine::Scm::Adapters::CommandFailed do
196 revs1 = []
200 revs1 = []
197 @adapter.revisions('',
201 @adapter.revisions('',
198 '1234abcd',
202 '1234abcd',
199 "master",
203 "master",
200 {:reverse => true}) do |rev|
204 {:reverse => true}) do |rev|
201 revs1 << rev
205 revs1 << rev
202 end
206 end
203 end
207 end
204 end
208 end
205
209
206 def test_revisions_includes_master_two_revs
210 def test_revisions_includes_master_two_revs
207 revs1 = []
211 revs1 = []
208 @adapter.revisions('', nil, nil,
212 @adapter.revisions('', nil, nil,
209 {:reverse => true,
213 {:reverse => true,
210 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
214 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
211 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43']}) do |rev|
215 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43']}) do |rev|
212 revs1 << rev
216 revs1 << rev
213 end
217 end
214 assert_equal 2, revs1.length
218 assert_equal 2, revs1.length
215 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
219 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
216 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
220 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
217 end
221 end
218
222
219 def test_revisions_includes_master_two_revs_from_origin
223 def test_revisions_includes_master_two_revs_from_origin
220 revs1 = []
224 revs1 = []
221 @adapter.revisions('', nil, nil,
225 @adapter.revisions('', nil, nil,
222 {:reverse => true,
226 {:reverse => true,
223 :includes => ['899a15dba03a3b350b89c3f537e4bbe02a03cdc9'],
227 :includes => ['899a15dba03a3b350b89c3f537e4bbe02a03cdc9'],
224 :excludes => []}) do |rev|
228 :excludes => []}) do |rev|
225 revs1 << rev
229 revs1 << rev
226 end
230 end
227 assert_equal 2, revs1.length
231 assert_equal 2, revs1.length
228 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[ 0].identifier
232 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[ 0].identifier
229 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 1].identifier
233 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 1].identifier
230 end
234 end
231
235
232 def test_revisions_includes_merged_revs
236 def test_revisions_includes_merged_revs
233 revs1 = []
237 revs1 = []
234 @adapter.revisions('', nil, nil,
238 @adapter.revisions('', nil, nil,
235 {:reverse => true,
239 {:reverse => true,
236 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
240 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
237 :excludes => ['fba357b886984ee71185ad2065e65fc0417d9b92']}) do |rev|
241 :excludes => ['fba357b886984ee71185ad2065e65fc0417d9b92']}) do |rev|
238 revs1 << rev
242 revs1 << rev
239 end
243 end
240 assert_equal 7, revs1.length
244 assert_equal 7, revs1.length
241 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 0].identifier
245 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 0].identifier
242 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 1].identifier
246 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 1].identifier
243 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 2].identifier
247 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 2].identifier
244 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
248 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
245 end
249 end
246
250
247 def test_revisions_includes_two_heads
251 def test_revisions_includes_two_heads
248 revs1 = []
252 revs1 = []
249 @adapter.revisions('', nil, nil,
253 @adapter.revisions('', nil, nil,
250 {:reverse => true,
254 {:reverse => true,
251 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
255 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
252 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127'],
256 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127'],
253 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43',
257 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43',
254 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e']}) do |rev|
258 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e']}) do |rev|
255 revs1 << rev
259 revs1 << rev
256 end
260 end
257 assert_equal 4, revs1.length
261 assert_equal 4, revs1.length
258 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
262 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
259 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
263 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
260 assert_equal '64f1f3e89ad1cb57976ff0ad99a107012ba3481d', revs1[-2].identifier
264 assert_equal '64f1f3e89ad1cb57976ff0ad99a107012ba3481d', revs1[-2].identifier
261 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
265 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
262 end
266 end
263
267
264 def test_revisions_disjointed_histories_revisions
268 def test_revisions_disjointed_histories_revisions
265 revs1 = []
269 revs1 = []
266 @adapter.revisions('', nil, nil,
270 @adapter.revisions('', nil, nil,
267 {:reverse => true,
271 {:reverse => true,
268 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
272 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
269 '92397af84d22f27389c822848ecd5b463c181583'],
273 '92397af84d22f27389c822848ecd5b463c181583'],
270 :excludes => ['95488a44bc25f7d1f97d775a31359539ff333a63',
274 :excludes => ['95488a44bc25f7d1f97d775a31359539ff333a63',
271 '4f26664364207fa8b1af9f8722647ab2d4ac5d43'] }) do |rev|
275 '4f26664364207fa8b1af9f8722647ab2d4ac5d43'] }) do |rev|
272 revs1 << rev
276 revs1 << rev
273 end
277 end
274 assert_equal 4, revs1.length
278 assert_equal 4, revs1.length
275 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
279 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
276 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
280 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
277 assert_equal 'bc201c95999c4f10d018b0aa03b541cd6a2ff0ee', revs1[-2].identifier
281 assert_equal 'bc201c95999c4f10d018b0aa03b541cd6a2ff0ee', revs1[-2].identifier
278 assert_equal '92397af84d22f27389c822848ecd5b463c181583', revs1[-1].identifier
282 assert_equal '92397af84d22f27389c822848ecd5b463c181583', revs1[-1].identifier
279 end
283 end
280
284
281 def test_revisions_invalid_rev_excludes
285 def test_revisions_invalid_rev_excludes
282 assert_equal [],
286 assert_equal [],
283 @adapter.revisions('', nil, nil,
287 @adapter.revisions('', nil, nil,
284 {:reverse => true,
288 {:reverse => true,
285 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
289 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
286 :excludes => ['0123abcd4567']})
290 :excludes => ['0123abcd4567']})
287 assert_raise Redmine::Scm::Adapters::CommandFailed do
291 assert_raise Redmine::Scm::Adapters::CommandFailed do
288 revs1 = []
292 revs1 = []
289 @adapter.revisions('', nil, nil,
293 @adapter.revisions('', nil, nil,
290 {:reverse => true,
294 {:reverse => true,
291 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
295 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
292 :excludes => ['0123abcd4567']}) do |rev|
296 :excludes => ['0123abcd4567']}) do |rev|
293 revs1 << rev
297 revs1 << rev
294 end
298 end
295 end
299 end
296 end
300 end
297
301
298 def test_getting_revisions_with_spaces_in_filename
302 def test_getting_revisions_with_spaces_in_filename
299 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
303 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
300 nil, "master").length
304 nil, "master").length
301 end
305 end
302
306
303 def test_parents
307 def test_parents
304 revs1 = []
308 revs1 = []
305 @adapter.revisions('',
309 @adapter.revisions('',
306 nil,
310 nil,
307 "master",
311 "master",
308 {:reverse => true}) do |rev|
312 {:reverse => true}) do |rev|
309 revs1 << rev
313 revs1 << rev
310 end
314 end
311 assert_equal 15, revs1.length
315 assert_equal 15, revs1.length
312 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
316 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
313 revs1[0].identifier
317 revs1[0].identifier
314 assert_equal nil, revs1[0].parents
318 assert_equal nil, revs1[0].parents
315 assert_equal "899a15dba03a3b350b89c3f537e4bbe02a03cdc9",
319 assert_equal "899a15dba03a3b350b89c3f537e4bbe02a03cdc9",
316 revs1[1].identifier
320 revs1[1].identifier
317 assert_equal 1, revs1[1].parents.length
321 assert_equal 1, revs1[1].parents.length
318 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
322 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
319 revs1[1].parents[0]
323 revs1[1].parents[0]
320 assert_equal "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
324 assert_equal "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
321 revs1[10].identifier
325 revs1[10].identifier
322 assert_equal 2, revs1[10].parents.length
326 assert_equal 2, revs1[10].parents.length
323 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
327 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
324 revs1[10].parents[0]
328 revs1[10].parents[0]
325 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da",
329 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da",
326 revs1[10].parents[1]
330 revs1[10].parents[1]
327 end
331 end
328
332
329 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
333 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
330 assert_equal " filename with a leading space.txt ",
334 assert_equal " filename with a leading space.txt ",
331 @adapter.revisions(" filename with a leading space.txt ",
335 @adapter.revisions(" filename with a leading space.txt ",
332 nil, "master")[0].paths[0][:path]
336 nil, "master")[0].paths[0][:path]
333 end
337 end
334
338
335 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
339 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
336 assert_equal " filename with a leading space.txt ",
340 assert_equal " filename with a leading space.txt ",
337 @adapter.entries('',
341 @adapter.entries('',
338 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
342 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
339 end
343 end
340
344
341 def test_annotate
345 def test_annotate
342 annotate = @adapter.annotate('sources/watchers_controller.rb')
346 annotate = @adapter.annotate('sources/watchers_controller.rb')
343 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
347 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
344 assert_equal 41, annotate.lines.size
348 assert_equal 41, annotate.lines.size
345 assert_equal "# This program is free software; you can redistribute it and/or",
349 assert_equal "# This program is free software; you can redistribute it and/or",
346 annotate.lines[4].strip
350 annotate.lines[4].strip
347 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
351 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
348 annotate.revisions[4].identifier
352 annotate.revisions[4].identifier
349 assert_equal "jsmith", annotate.revisions[4].author
353 assert_equal "jsmith", annotate.revisions[4].author
350 end
354 end
351
355
352 def test_annotate_moved_file
356 def test_annotate_moved_file
353 annotate = @adapter.annotate('renamed_test.txt')
357 annotate = @adapter.annotate('renamed_test.txt')
354 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
358 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
355 assert_equal 2, annotate.lines.size
359 assert_equal 2, annotate.lines.size
356 end
360 end
357
361
358 def test_last_rev
362 def test_last_rev
359 last_rev = @adapter.lastrev("README",
363 last_rev = @adapter.lastrev("README",
360 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
364 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
361 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
365 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
362 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
366 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
363 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
367 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
364 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
368 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
365 end
369 end
366
370
367 def test_last_rev_with_spaces_in_filename
371 def test_last_rev_with_spaces_in_filename
368 last_rev = @adapter.lastrev("filemane with spaces.txt",
372 last_rev = @adapter.lastrev("filemane with spaces.txt",
369 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
373 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
370 str_felix_utf8 = FELIX_UTF8.dup
374 str_felix_utf8 = FELIX_UTF8.dup
371 str_felix_hex = FELIX_HEX.dup
375 str_felix_hex = FELIX_HEX.dup
372 last_rev_author = last_rev.author
376 last_rev_author = last_rev.author
373 if last_rev_author.respond_to?(:force_encoding)
377 if last_rev_author.respond_to?(:force_encoding)
374 last_rev_author.force_encoding('UTF-8')
378 last_rev_author.force_encoding('UTF-8')
375 end
379 end
376 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
380 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
377 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
381 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
378 assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
382 assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
379 last_rev.author
383 last_rev.author
380 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
384 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
381 last_rev.author
385 last_rev.author
382 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
386 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
383 end
387 end
384
388
385 def test_latin_1_path
389 def test_latin_1_path
386 if WINDOWS_PASS
390 if WINDOWS_PASS
387 #
391 #
388 elsif JRUBY_SKIP
392 elsif JRUBY_SKIP
389 puts JRUBY_SKIP_STR
393 puts JRUBY_SKIP_STR
390 else
394 else
391 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
395 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
392 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
396 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
393 assert @adapter.diff(p2, r1)
397 assert @adapter.diff(p2, r1)
394 assert @adapter.cat(p2, r1)
398 assert @adapter.cat(p2, r1)
395 assert_equal 1, @adapter.annotate(p2, r1).lines.length
399 assert_equal 1, @adapter.annotate(p2, r1).lines.length
396 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
400 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
397 assert @adapter.diff(p2, r1, r2)
401 assert @adapter.diff(p2, r1, r2)
398 end
402 end
399 end
403 end
400 end
404 end
401 end
405 end
402
406
403 def test_entries_tag
407 def test_entries_tag
404 entries1 = @adapter.entries(nil, 'tag01.annotated',
408 entries1 = @adapter.entries(nil, 'tag01.annotated',
405 options = {:report_last_commit => true})
409 options = {:report_last_commit => true})
406 assert entries1
410 assert entries1
407 assert_equal 3, entries1.size
411 assert_equal 3, entries1.size
408 assert_equal 'sources', entries1[1].name
412 assert_equal 'sources', entries1[1].name
409 assert_equal 'sources', entries1[1].path
413 assert_equal 'sources', entries1[1].path
410 assert_equal 'dir', entries1[1].kind
414 assert_equal 'dir', entries1[1].kind
411 readme = entries1[2]
415 readme = entries1[2]
412 assert_equal 'README', readme.name
416 assert_equal 'README', readme.name
413 assert_equal 'README', readme.path
417 assert_equal 'README', readme.path
414 assert_equal 'file', readme.kind
418 assert_equal 'file', readme.kind
415 assert_equal 27, readme.size
419 assert_equal 27, readme.size
416 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
420 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
417 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
421 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
418 end
422 end
419
423
420 def test_entries_branch
424 def test_entries_branch
421 entries1 = @adapter.entries(nil, 'test_branch',
425 entries1 = @adapter.entries(nil, 'test_branch',
422 options = {:report_last_commit => true})
426 options = {:report_last_commit => true})
423 assert entries1
427 assert entries1
424 assert_equal 4, entries1.size
428 assert_equal 4, entries1.size
425 assert_equal 'sources', entries1[1].name
429 assert_equal 'sources', entries1[1].name
426 assert_equal 'sources', entries1[1].path
430 assert_equal 'sources', entries1[1].path
427 assert_equal 'dir', entries1[1].kind
431 assert_equal 'dir', entries1[1].kind
428 readme = entries1[2]
432 readme = entries1[2]
429 assert_equal 'README', readme.name
433 assert_equal 'README', readme.name
430 assert_equal 'README', readme.path
434 assert_equal 'README', readme.path
431 assert_equal 'file', readme.kind
435 assert_equal 'file', readme.kind
432 assert_equal 159, readme.size
436 assert_equal 159, readme.size
433 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
437 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
434 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
438 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
435 end
439 end
436
440
437 def test_entries_latin_1_files
441 def test_entries_latin_1_files
438 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
442 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
439 assert entries1
443 assert entries1
440 assert_equal 3, entries1.size
444 assert_equal 3, entries1.size
441 f1 = entries1[1]
445 f1 = entries1[1]
442 assert_equal "test-#{@char_1}-2.txt", f1.name
446 assert_equal "test-#{@char_1}-2.txt", f1.name
443 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
447 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
444 assert_equal 'file', f1.kind
448 assert_equal 'file', f1.kind
445 end
449 end
446
450
447 def test_entries_latin_1_dir
451 def test_entries_latin_1_dir
448 if WINDOWS_PASS
452 if WINDOWS_PASS
449 #
453 #
450 elsif JRUBY_SKIP
454 elsif JRUBY_SKIP
451 puts JRUBY_SKIP_STR
455 puts JRUBY_SKIP_STR
452 else
456 else
453 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
457 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
454 '1ca7f5ed')
458 '1ca7f5ed')
455 assert entries1
459 assert entries1
456 assert_equal 3, entries1.size
460 assert_equal 3, entries1.size
457 f1 = entries1[1]
461 f1 = entries1[1]
458 assert_equal "test-#{@char_1}-2.txt", f1.name
462 assert_equal "test-#{@char_1}-2.txt", f1.name
459 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
463 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
460 assert_equal 'file', f1.kind
464 assert_equal 'file', f1.kind
461 end
465 end
462 end
466 end
463
467
464 def test_path_encoding_default_utf8
468 def test_path_encoding_default_utf8
465 adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
469 adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
466 REPOSITORY_PATH
470 REPOSITORY_PATH
467 )
471 )
468 assert_equal "UTF-8", adpt1.path_encoding
472 assert_equal "UTF-8", adpt1.path_encoding
469 adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
473 adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
470 REPOSITORY_PATH,
474 REPOSITORY_PATH,
471 nil,
475 nil,
472 nil,
476 nil,
473 nil,
477 nil,
474 ""
478 ""
475 )
479 )
476 assert_equal "UTF-8", adpt2.path_encoding
480 assert_equal "UTF-8", adpt2.path_encoding
477 end
481 end
478
482
479 def test_cat_path_invalid
483 def test_cat_path_invalid
480 assert_nil @adapter.cat('invalid')
484 assert_nil @adapter.cat('invalid')
481 end
485 end
482
486
483 def test_cat_revision_invalid
487 def test_cat_revision_invalid
484 assert @adapter.cat('README')
488 assert @adapter.cat('README')
485 assert_nil @adapter.cat('README', 'abcd1234efgh')
489 assert_nil @adapter.cat('README', 'abcd1234efgh')
486 end
490 end
487
491
488 def test_diff_path_invalid
492 def test_diff_path_invalid
489 assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
493 assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
490 end
494 end
491
495
492 def test_diff_revision_invalid
496 def test_diff_revision_invalid
493 assert_nil @adapter.diff(nil, 'abcd1234efgh')
497 assert_nil @adapter.diff(nil, 'abcd1234efgh')
494 assert_nil @adapter.diff(nil, '713f4944648826f5', 'abcd1234efgh')
498 assert_nil @adapter.diff(nil, '713f4944648826f5', 'abcd1234efgh')
495 assert_nil @adapter.diff(nil, 'abcd1234efgh', '713f4944648826f5')
499 assert_nil @adapter.diff(nil, 'abcd1234efgh', '713f4944648826f5')
496 end
500 end
497
501
498 def test_annotate_path_invalid
502 def test_annotate_path_invalid
499 assert_nil @adapter.annotate('invalid')
503 assert_nil @adapter.annotate('invalid')
500 end
504 end
501
505
502 def test_annotate_revision_invalid
506 def test_annotate_revision_invalid
503 assert @adapter.annotate('README')
507 assert @adapter.annotate('README')
504 assert_nil @adapter.annotate('README', 'abcd1234efgh')
508 assert_nil @adapter.annotate('README', 'abcd1234efgh')
505 end
509 end
506
510
507 private
511 private
508
512
509 def test_scm_version_for(scm_command_version, version)
513 def test_scm_version_for(scm_command_version, version)
510 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
514 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
511 assert_equal version, @adapter.class.scm_command_version
515 assert_equal version, @adapter.class.scm_command_version
512 end
516 end
513
517
514 else
518 else
515 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
519 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
516 def test_fake; assert true end
520 def test_fake; assert true end
517 end
521 end
518 end
522 end
519
523
520 rescue LoadError
524 rescue LoadError
521 class GitMochaFake < ActiveSupport::TestCase
525 class GitMochaFake < ActiveSupport::TestCase
522 def test_fake; assert(false, "Requires mocha to run those tests") end
526 def test_fake; assert(false, "Requires mocha to run those tests") end
523 end
527 end
524 end
528 end
@@ -1,523 +1,524
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
28
28 FELIX_HEX = "Felix Sch\xC3\xA4fer"
29 FELIX_HEX = "Felix Sch\xC3\xA4fer"
29 CHAR_1_HEX = "\xc3\x9c"
30 CHAR_1_HEX = "\xc3\x9c"
30
31
31 ## Ruby uses ANSI api to fork a process on Windows.
32 ## Ruby uses ANSI api to fork a process on Windows.
32 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
33 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
33 ## and these are incompatible with ASCII.
34 ## and these are incompatible with ASCII.
34 # WINDOWS_PASS = Redmine::Platform.mswin?
35 # WINDOWS_PASS = Redmine::Platform.mswin?
35 WINDOWS_PASS = false
36 WINDOWS_PASS = false
36
37
37 ## Git, Mercurial and CVS path encodings are binary.
38 ## Git, Mercurial and CVS path encodings are binary.
38 ## Subversion supports URL encoding for path.
39 ## Subversion supports URL encoding for path.
39 ## Redmine Mercurial adapter and extension use URL encoding.
40 ## Redmine Mercurial adapter and extension use URL encoding.
40 ## Git accepts only binary path in command line parameter.
41 ## Git accepts only binary path in command line parameter.
41 ## 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.
42 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
43 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
43 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
44 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
44
45
45 if File.directory?(REPOSITORY_PATH)
46 if File.directory?(REPOSITORY_PATH)
46 def setup
47 def setup
47 klass = Repository::Git
48 klass = Repository::Git
48 assert_equal "Git", klass.scm_name
49 assert_equal "Git", klass.scm_name
49 assert klass.scm_adapter_class
50 assert klass.scm_adapter_class
50 assert_not_equal "", klass.scm_command
51 assert_not_equal "", klass.scm_command
51 assert_equal true, klass.scm_available
52 assert_equal true, klass.scm_available
52
53
53 @project = Project.find(3)
54 @project = Project.find(3)
54 @repository = Repository::Git.create(
55 @repository = Repository::Git.create(
55 :project => @project,
56 :project => @project,
56 :url => REPOSITORY_PATH,
57 :url => REPOSITORY_PATH,
57 :path_encoding => 'ISO-8859-1'
58 :path_encoding => 'ISO-8859-1'
58 )
59 )
59 assert @repository
60 assert @repository
60 @char_1 = CHAR_1_HEX.dup
61 @char_1 = CHAR_1_HEX.dup
61 if @char_1.respond_to?(:force_encoding)
62 if @char_1.respond_to?(:force_encoding)
62 @char_1.force_encoding('UTF-8')
63 @char_1.force_encoding('UTF-8')
63 end
64 end
64 end
65 end
65
66
66 def test_fetch_changesets_from_scratch
67 def test_fetch_changesets_from_scratch
67 assert_nil @repository.extra_info
68 assert_nil @repository.extra_info
68
69
69 assert_equal 0, @repository.changesets.count
70 assert_equal 0, @repository.changesets.count
70 @repository.fetch_changesets
71 @repository.fetch_changesets
71 @project.reload
72 @project.reload
72
73
73 assert_equal NUM_REV, @repository.changesets.count
74 assert_equal NUM_REV, @repository.changesets.count
74 assert_equal 39, @repository.changes.count
75 assert_equal 39, @repository.changes.count
75
76
76 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
77 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
77 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
78 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
78 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
79 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
79 assert_equal User.find_by_login('jsmith'), commit.user
80 assert_equal User.find_by_login('jsmith'), commit.user
80 # TODO: add a commit with commit time <> author time to the test repository
81 # TODO: add a commit with commit time <> author time to the test repository
81 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
82 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
82 assert_equal "2007-12-14".to_date, commit.commit_date
83 assert_equal "2007-12-14".to_date, commit.commit_date
83 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
84 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
84 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
85 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
85 assert_equal 3, commit.changes.count
86 assert_equal 3, commit.changes.count
86 change = commit.changes.sort_by(&:path).first
87 change = commit.changes.sort_by(&:path).first
87 assert_equal "README", change.path
88 assert_equal "README", change.path
88 assert_equal "A", change.action
89 assert_equal "A", change.action
89
90
90 assert_equal 5, @repository.extra_info["heads"].size
91 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
91 end
92 end
92
93
93 def test_fetch_changesets_incremental
94 def test_fetch_changesets_incremental
94 assert_equal 0, @repository.changesets.count
95 assert_equal 0, @repository.changesets.count
95 @repository.fetch_changesets
96 @repository.fetch_changesets
96 @project.reload
97 @project.reload
97 assert_equal NUM_REV, @repository.changesets.count
98 assert_equal NUM_REV, @repository.changesets.count
98 extra_info_heads = @repository.extra_info["heads"].dup
99 extra_info_heads = @repository.extra_info["heads"].dup
99 assert_equal 5, extra_info_heads.size
100 assert_equal NUM_HEAD, extra_info_heads.size
100 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
101 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
101 assert_equal 4, extra_info_heads.size
102 assert_equal 4, extra_info_heads.size
102
103
103 del_revs = [
104 del_revs = [
104 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
105 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
105 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
106 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
106 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
107 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
107 "deff712f05a90d96edbd70facc47d944be5897e3",
108 "deff712f05a90d96edbd70facc47d944be5897e3",
108 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
109 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
109 "7e61ac704deecde634b51e59daa8110435dcb3da",
110 "7e61ac704deecde634b51e59daa8110435dcb3da",
110 ]
111 ]
111 @repository.changesets.each do |rev|
112 @repository.changesets.each do |rev|
112 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
113 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
113 end
114 end
114 @project.reload
115 @project.reload
115 cs1 = @repository.changesets
116 cs1 = @repository.changesets
116 assert_equal NUM_REV - 6, cs1.count
117 assert_equal NUM_REV - 6, cs1.count
117 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
118 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
118 h = {}
119 h = {}
119 h["heads"] = extra_info_heads
120 h["heads"] = extra_info_heads
120 @repository.merge_extra_info(h)
121 @repository.merge_extra_info(h)
121 @repository.save
122 @repository.save
122 @project.reload
123 @project.reload
123 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
124 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
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 assert_equal 5, @repository.extra_info["heads"].size
128 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
128 assert @repository.extra_info["heads"].index("83ca5fd546063a3c7dc2e568ba3355661a9e2b2c")
129 assert @repository.extra_info["heads"].index("83ca5fd546063a3c7dc2e568ba3355661a9e2b2c")
129 end
130 end
130
131
131 def test_fetch_changesets_history_editing
132 def test_fetch_changesets_history_editing
132 assert_equal 0, @repository.changesets.count
133 assert_equal 0, @repository.changesets.count
133 @repository.fetch_changesets
134 @repository.fetch_changesets
134 @project.reload
135 @project.reload
135 assert_equal NUM_REV, @repository.changesets.count
136 assert_equal NUM_REV, @repository.changesets.count
136 extra_info_heads = @repository.extra_info["heads"].dup
137 extra_info_heads = @repository.extra_info["heads"].dup
137 assert_equal 5, extra_info_heads.size
138 assert_equal NUM_HEAD, extra_info_heads.size
138 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
139 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
139 assert_equal 4, extra_info_heads.size
140 assert_equal 4, extra_info_heads.size
140
141
141 del_revs = [
142 del_revs = [
142 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
143 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
143 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
144 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
144 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
145 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
145 "deff712f05a90d96edbd70facc47d944be5897e3",
146 "deff712f05a90d96edbd70facc47d944be5897e3",
146 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
147 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
147 "7e61ac704deecde634b51e59daa8110435dcb3da",
148 "7e61ac704deecde634b51e59daa8110435dcb3da",
148 ]
149 ]
149 @repository.changesets.each do |rev|
150 @repository.changesets.each do |rev|
150 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
151 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
151 end
152 end
152 @project.reload
153 @project.reload
153 assert_equal NUM_REV - 6, @repository.changesets.count
154 assert_equal NUM_REV - 6, @repository.changesets.count
154
155
155 c = Changeset.new(:repository => @repository,
156 c = Changeset.new(:repository => @repository,
156 :committed_on => Time.now,
157 :committed_on => Time.now,
157 :revision => "abcd1234efgh",
158 :revision => "abcd1234efgh",
158 :scmid => "abcd1234efgh",
159 :scmid => "abcd1234efgh",
159 :comments => 'test')
160 :comments => 'test')
160 assert c.save
161 assert c.save
161 @project.reload
162 @project.reload
162 assert_equal NUM_REV - 5, @repository.changesets.count
163 assert_equal NUM_REV - 5, @repository.changesets.count
163
164
164 extra_info_heads << "abcd1234efgh"
165 extra_info_heads << "abcd1234efgh"
165 h = {}
166 h = {}
166 h["heads"] = extra_info_heads
167 h["heads"] = extra_info_heads
167 @repository.merge_extra_info(h)
168 @repository.merge_extra_info(h)
168 @repository.save
169 @repository.save
169 @project.reload
170 @project.reload
170 h1 = @repository.extra_info["heads"].dup
171 h1 = @repository.extra_info["heads"].dup
171 assert h1.index("abcd1234efgh")
172 assert h1.index("abcd1234efgh")
172 assert_equal 5, h1.size
173 assert_equal 5, h1.size
173
174
174 @repository.fetch_changesets
175 @repository.fetch_changesets
175 @project.reload
176 @project.reload
176 assert_equal NUM_REV - 5, @repository.changesets.count
177 assert_equal NUM_REV - 5, @repository.changesets.count
177 h2 = @repository.extra_info["heads"].dup
178 h2 = @repository.extra_info["heads"].dup
178 assert_equal h1, h2
179 assert_equal h1, h2
179 end
180 end
180
181
181 def test_parents
182 def test_parents
182 assert_equal 0, @repository.changesets.count
183 assert_equal 0, @repository.changesets.count
183 @repository.fetch_changesets
184 @repository.fetch_changesets
184 @project.reload
185 @project.reload
185 assert_equal NUM_REV, @repository.changesets.count
186 assert_equal NUM_REV, @repository.changesets.count
186 r1 = @repository.find_changeset_by_name("7234cb2750b63")
187 r1 = @repository.find_changeset_by_name("7234cb2750b63")
187 assert_equal [], r1.parents
188 assert_equal [], r1.parents
188 r2 = @repository.find_changeset_by_name("899a15dba03a3")
189 r2 = @repository.find_changeset_by_name("899a15dba03a3")
189 assert_equal 1, r2.parents.length
190 assert_equal 1, r2.parents.length
190 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
191 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
191 r2.parents[0].identifier
192 r2.parents[0].identifier
192 r3 = @repository.find_changeset_by_name("32ae898b720c2")
193 r3 = @repository.find_changeset_by_name("32ae898b720c2")
193 assert_equal 2, r3.parents.length
194 assert_equal 2, r3.parents.length
194 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
195 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
195 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", r4[0]
196 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", r4[0]
196 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da", r4[1]
197 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da", r4[1]
197 end
198 end
198
199
199 def test_db_consistent_ordering_init
200 def test_db_consistent_ordering_init
200 assert_nil @repository.extra_info
201 assert_nil @repository.extra_info
201 assert_equal 0, @repository.changesets.count
202 assert_equal 0, @repository.changesets.count
202 @repository.fetch_changesets
203 @repository.fetch_changesets
203 @project.reload
204 @project.reload
204 assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
205 assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
205 end
206 end
206
207
207 def test_db_consistent_ordering_before_1_2
208 def test_db_consistent_ordering_before_1_2
208 assert_nil @repository.extra_info
209 assert_nil @repository.extra_info
209 assert_equal 0, @repository.changesets.count
210 assert_equal 0, @repository.changesets.count
210 @repository.fetch_changesets
211 @repository.fetch_changesets
211 @project.reload
212 @project.reload
212 assert_equal NUM_REV, @repository.changesets.count
213 assert_equal NUM_REV, @repository.changesets.count
213 assert_not_nil @repository.extra_info
214 assert_not_nil @repository.extra_info
214 @repository.write_attribute(:extra_info, nil)
215 @repository.write_attribute(:extra_info, nil)
215 @repository.save
216 @repository.save
216 assert_nil @repository.extra_info
217 assert_nil @repository.extra_info
217 assert_equal NUM_REV, @repository.changesets.count
218 assert_equal NUM_REV, @repository.changesets.count
218 @repository.fetch_changesets
219 @repository.fetch_changesets
219 @project.reload
220 @project.reload
220 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
221 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
221
222
222 extra_info_heads = @repository.extra_info["heads"].dup
223 extra_info_heads = @repository.extra_info["heads"].dup
223 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
224 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
224 del_revs = [
225 del_revs = [
225 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
226 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
226 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
227 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
227 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
228 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
228 "deff712f05a90d96edbd70facc47d944be5897e3",
229 "deff712f05a90d96edbd70facc47d944be5897e3",
229 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
230 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
230 "7e61ac704deecde634b51e59daa8110435dcb3da",
231 "7e61ac704deecde634b51e59daa8110435dcb3da",
231 ]
232 ]
232 @repository.changesets.each do |rev|
233 @repository.changesets.each do |rev|
233 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
234 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
234 end
235 end
235 @project.reload
236 @project.reload
236 cs1 = @repository.changesets
237 cs1 = @repository.changesets
237 assert_equal NUM_REV - 6, cs1.count
238 assert_equal NUM_REV - 6, cs1.count
238 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
239 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
239
240
240 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
241 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
241 h = {}
242 h = {}
242 h["heads"] = extra_info_heads
243 h["heads"] = extra_info_heads
243 @repository.merge_extra_info(h)
244 @repository.merge_extra_info(h)
244 @repository.save
245 @repository.save
245 @project.reload
246 @project.reload
246 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
247 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
247 @repository.fetch_changesets
248 @repository.fetch_changesets
248 @project.reload
249 @project.reload
249 assert_equal NUM_REV, @repository.changesets.count
250 assert_equal NUM_REV, @repository.changesets.count
250 assert_equal 5, @repository.extra_info["heads"].size
251 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
251
252
252 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
253 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
253 end
254 end
254
255
255 def test_heads_from_branches_hash
256 def test_heads_from_branches_hash
256 assert_nil @repository.extra_info
257 assert_nil @repository.extra_info
257 assert_equal 0, @repository.changesets.count
258 assert_equal 0, @repository.changesets.count
258 assert_equal [], @repository.heads_from_branches_hash
259 assert_equal [], @repository.heads_from_branches_hash
259 h = {}
260 h = {}
260 h["branches"] = {}
261 h["branches"] = {}
261 h["branches"]["test1"] = {}
262 h["branches"]["test1"] = {}
262 h["branches"]["test1"]["last_scmid"] = "1234abcd"
263 h["branches"]["test1"]["last_scmid"] = "1234abcd"
263 h["branches"]["test2"] = {}
264 h["branches"]["test2"] = {}
264 h["branches"]["test2"]["last_scmid"] = "abcd1234"
265 h["branches"]["test2"]["last_scmid"] = "abcd1234"
265 @repository.merge_extra_info(h)
266 @repository.merge_extra_info(h)
266 @repository.save
267 @repository.save
267 @project.reload
268 @project.reload
268 assert_equal ["1234abcd", "abcd1234"], @repository.heads_from_branches_hash.sort
269 assert_equal ["1234abcd", "abcd1234"], @repository.heads_from_branches_hash.sort
269 end
270 end
270
271
271 def test_latest_changesets
272 def test_latest_changesets
272 assert_equal 0, @repository.changesets.count
273 assert_equal 0, @repository.changesets.count
273 @repository.fetch_changesets
274 @repository.fetch_changesets
274 @project.reload
275 @project.reload
275 assert_equal NUM_REV, @repository.changesets.count
276 assert_equal NUM_REV, @repository.changesets.count
276 # with limit
277 # with limit
277 changesets = @repository.latest_changesets('', 'master', 2)
278 changesets = @repository.latest_changesets('', 'master', 2)
278 assert_equal 2, changesets.size
279 assert_equal 2, changesets.size
279
280
280 # with path
281 # with path
281 changesets = @repository.latest_changesets('images', 'master')
282 changesets = @repository.latest_changesets('images', 'master')
282 assert_equal [
283 assert_equal [
283 'deff712f05a90d96edbd70facc47d944be5897e3',
284 'deff712f05a90d96edbd70facc47d944be5897e3',
284 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
285 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
285 '7234cb2750b63f47bff735edc50a1c0a433c2518',
286 '7234cb2750b63f47bff735edc50a1c0a433c2518',
286 ], changesets.collect(&:revision)
287 ], changesets.collect(&:revision)
287
288
288 changesets = @repository.latest_changesets('README', nil)
289 changesets = @repository.latest_changesets('README', nil)
289 assert_equal [
290 assert_equal [
290 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
291 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
291 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
292 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
292 '713f4944648826f558cf548222f813dabe7cbb04',
293 '713f4944648826f558cf548222f813dabe7cbb04',
293 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
294 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
294 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
295 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
295 '7234cb2750b63f47bff735edc50a1c0a433c2518',
296 '7234cb2750b63f47bff735edc50a1c0a433c2518',
296 ], changesets.collect(&:revision)
297 ], changesets.collect(&:revision)
297
298
298 # with path, revision and limit
299 # with path, revision and limit
299 changesets = @repository.latest_changesets('images', '899a15dba')
300 changesets = @repository.latest_changesets('images', '899a15dba')
300 assert_equal [
301 assert_equal [
301 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
302 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
302 '7234cb2750b63f47bff735edc50a1c0a433c2518',
303 '7234cb2750b63f47bff735edc50a1c0a433c2518',
303 ], changesets.collect(&:revision)
304 ], changesets.collect(&:revision)
304
305
305 changesets = @repository.latest_changesets('images', '899a15dba', 1)
306 changesets = @repository.latest_changesets('images', '899a15dba', 1)
306 assert_equal [
307 assert_equal [
307 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
308 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
308 ], changesets.collect(&:revision)
309 ], changesets.collect(&:revision)
309
310
310 changesets = @repository.latest_changesets('README', '899a15dba')
311 changesets = @repository.latest_changesets('README', '899a15dba')
311 assert_equal [
312 assert_equal [
312 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
313 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
313 '7234cb2750b63f47bff735edc50a1c0a433c2518',
314 '7234cb2750b63f47bff735edc50a1c0a433c2518',
314 ], changesets.collect(&:revision)
315 ], changesets.collect(&:revision)
315
316
316 changesets = @repository.latest_changesets('README', '899a15dba', 1)
317 changesets = @repository.latest_changesets('README', '899a15dba', 1)
317 assert_equal [
318 assert_equal [
318 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
319 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
319 ], changesets.collect(&:revision)
320 ], changesets.collect(&:revision)
320
321
321 # with path, tag and limit
322 # with path, tag and limit
322 changesets = @repository.latest_changesets('images', 'tag01.annotated')
323 changesets = @repository.latest_changesets('images', 'tag01.annotated')
323 assert_equal [
324 assert_equal [
324 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
325 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
325 '7234cb2750b63f47bff735edc50a1c0a433c2518',
326 '7234cb2750b63f47bff735edc50a1c0a433c2518',
326 ], changesets.collect(&:revision)
327 ], changesets.collect(&:revision)
327
328
328 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
329 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
329 assert_equal [
330 assert_equal [
330 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
331 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
331 ], changesets.collect(&:revision)
332 ], changesets.collect(&:revision)
332
333
333 changesets = @repository.latest_changesets('README', 'tag01.annotated')
334 changesets = @repository.latest_changesets('README', 'tag01.annotated')
334 assert_equal [
335 assert_equal [
335 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
336 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
336 '7234cb2750b63f47bff735edc50a1c0a433c2518',
337 '7234cb2750b63f47bff735edc50a1c0a433c2518',
337 ], changesets.collect(&:revision)
338 ], changesets.collect(&:revision)
338
339
339 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
340 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
340 assert_equal [
341 assert_equal [
341 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
342 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
342 ], changesets.collect(&:revision)
343 ], changesets.collect(&:revision)
343
344
344 # with path, branch and limit
345 # with path, branch and limit
345 changesets = @repository.latest_changesets('images', 'test_branch')
346 changesets = @repository.latest_changesets('images', 'test_branch')
346 assert_equal [
347 assert_equal [
347 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
348 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
348 '7234cb2750b63f47bff735edc50a1c0a433c2518',
349 '7234cb2750b63f47bff735edc50a1c0a433c2518',
349 ], changesets.collect(&:revision)
350 ], changesets.collect(&:revision)
350
351
351 changesets = @repository.latest_changesets('images', 'test_branch', 1)
352 changesets = @repository.latest_changesets('images', 'test_branch', 1)
352 assert_equal [
353 assert_equal [
353 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
354 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
354 ], changesets.collect(&:revision)
355 ], changesets.collect(&:revision)
355
356
356 changesets = @repository.latest_changesets('README', 'test_branch')
357 changesets = @repository.latest_changesets('README', 'test_branch')
357 assert_equal [
358 assert_equal [
358 '713f4944648826f558cf548222f813dabe7cbb04',
359 '713f4944648826f558cf548222f813dabe7cbb04',
359 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
360 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
360 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
361 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
361 '7234cb2750b63f47bff735edc50a1c0a433c2518',
362 '7234cb2750b63f47bff735edc50a1c0a433c2518',
362 ], changesets.collect(&:revision)
363 ], changesets.collect(&:revision)
363
364
364 changesets = @repository.latest_changesets('README', 'test_branch', 2)
365 changesets = @repository.latest_changesets('README', 'test_branch', 2)
365 assert_equal [
366 assert_equal [
366 '713f4944648826f558cf548222f813dabe7cbb04',
367 '713f4944648826f558cf548222f813dabe7cbb04',
367 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
368 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
368 ], changesets.collect(&:revision)
369 ], changesets.collect(&:revision)
369
370
370 if JRUBY_SKIP
371 if JRUBY_SKIP
371 puts JRUBY_SKIP_STR
372 puts JRUBY_SKIP_STR
372 else
373 else
373 # latin-1 encoding path
374 # latin-1 encoding path
374 changesets = @repository.latest_changesets(
375 changesets = @repository.latest_changesets(
375 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
376 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
376 assert_equal [
377 assert_equal [
377 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
378 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
378 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
379 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
379 ], changesets.collect(&:revision)
380 ], changesets.collect(&:revision)
380
381
381 changesets = @repository.latest_changesets(
382 changesets = @repository.latest_changesets(
382 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
383 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
383 assert_equal [
384 assert_equal [
384 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
385 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
385 ], changesets.collect(&:revision)
386 ], changesets.collect(&:revision)
386 end
387 end
387 end
388 end
388
389
389 def test_latest_changesets_latin_1_dir
390 def test_latest_changesets_latin_1_dir
390 if WINDOWS_PASS
391 if WINDOWS_PASS
391 #
392 #
392 elsif JRUBY_SKIP
393 elsif JRUBY_SKIP
393 puts JRUBY_SKIP_STR
394 puts JRUBY_SKIP_STR
394 else
395 else
395 assert_equal 0, @repository.changesets.count
396 assert_equal 0, @repository.changesets.count
396 @repository.fetch_changesets
397 @repository.fetch_changesets
397 @project.reload
398 @project.reload
398 assert_equal NUM_REV, @repository.changesets.count
399 assert_equal NUM_REV, @repository.changesets.count
399 changesets = @repository.latest_changesets(
400 changesets = @repository.latest_changesets(
400 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
401 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
401 assert_equal [
402 assert_equal [
402 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
403 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
403 ], changesets.collect(&:revision)
404 ], changesets.collect(&:revision)
404 end
405 end
405 end
406 end
406
407
407 def test_find_changeset_by_name
408 def test_find_changeset_by_name
408 assert_equal 0, @repository.changesets.count
409 assert_equal 0, @repository.changesets.count
409 @repository.fetch_changesets
410 @repository.fetch_changesets
410 @project.reload
411 @project.reload
411 assert_equal NUM_REV, @repository.changesets.count
412 assert_equal NUM_REV, @repository.changesets.count
412 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
413 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
413 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
414 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
414 @repository.find_changeset_by_name(r).revision
415 @repository.find_changeset_by_name(r).revision
415 end
416 end
416 end
417 end
417
418
418 def test_find_changeset_by_empty_name
419 def test_find_changeset_by_empty_name
419 assert_equal 0, @repository.changesets.count
420 assert_equal 0, @repository.changesets.count
420 @repository.fetch_changesets
421 @repository.fetch_changesets
421 @project.reload
422 @project.reload
422 assert_equal NUM_REV, @repository.changesets.count
423 assert_equal NUM_REV, @repository.changesets.count
423 ['', ' ', nil].each do |r|
424 ['', ' ', nil].each do |r|
424 assert_nil @repository.find_changeset_by_name(r)
425 assert_nil @repository.find_changeset_by_name(r)
425 end
426 end
426 end
427 end
427
428
428 def test_identifier
429 def test_identifier
429 assert_equal 0, @repository.changesets.count
430 assert_equal 0, @repository.changesets.count
430 @repository.fetch_changesets
431 @repository.fetch_changesets
431 @project.reload
432 @project.reload
432 assert_equal NUM_REV, @repository.changesets.count
433 assert_equal NUM_REV, @repository.changesets.count
433 c = @repository.changesets.find_by_revision(
434 c = @repository.changesets.find_by_revision(
434 '7234cb2750b63f47bff735edc50a1c0a433c2518')
435 '7234cb2750b63f47bff735edc50a1c0a433c2518')
435 assert_equal c.scmid, c.identifier
436 assert_equal c.scmid, c.identifier
436 end
437 end
437
438
438 def test_format_identifier
439 def test_format_identifier
439 assert_equal 0, @repository.changesets.count
440 assert_equal 0, @repository.changesets.count
440 @repository.fetch_changesets
441 @repository.fetch_changesets
441 @project.reload
442 @project.reload
442 assert_equal NUM_REV, @repository.changesets.count
443 assert_equal NUM_REV, @repository.changesets.count
443 c = @repository.changesets.find_by_revision(
444 c = @repository.changesets.find_by_revision(
444 '7234cb2750b63f47bff735edc50a1c0a433c2518')
445 '7234cb2750b63f47bff735edc50a1c0a433c2518')
445 assert_equal '7234cb27', c.format_identifier
446 assert_equal '7234cb27', c.format_identifier
446 end
447 end
447
448
448 def test_activities
449 def test_activities
449 c = Changeset.new(:repository => @repository,
450 c = Changeset.new(:repository => @repository,
450 :committed_on => Time.now,
451 :committed_on => Time.now,
451 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
452 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
452 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
453 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
453 :comments => 'test')
454 :comments => 'test')
454 assert c.event_title.include?('abc7234c:')
455 assert c.event_title.include?('abc7234c:')
455 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
456 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
456 end
457 end
457
458
458 def test_log_utf8
459 def test_log_utf8
459 assert_equal 0, @repository.changesets.count
460 assert_equal 0, @repository.changesets.count
460 @repository.fetch_changesets
461 @repository.fetch_changesets
461 @project.reload
462 @project.reload
462 assert_equal NUM_REV, @repository.changesets.count
463 assert_equal NUM_REV, @repository.changesets.count
463 str_felix_hex = FELIX_HEX.dup
464 str_felix_hex = FELIX_HEX.dup
464 if str_felix_hex.respond_to?(:force_encoding)
465 if str_felix_hex.respond_to?(:force_encoding)
465 str_felix_hex.force_encoding('UTF-8')
466 str_felix_hex.force_encoding('UTF-8')
466 end
467 end
467 c = @repository.changesets.find_by_revision(
468 c = @repository.changesets.find_by_revision(
468 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
469 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
469 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
470 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
470 end
471 end
471
472
472 def test_previous
473 def test_previous
473 assert_equal 0, @repository.changesets.count
474 assert_equal 0, @repository.changesets.count
474 @repository.fetch_changesets
475 @repository.fetch_changesets
475 @project.reload
476 @project.reload
476 assert_equal NUM_REV, @repository.changesets.count
477 assert_equal NUM_REV, @repository.changesets.count
477 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
478 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
478 changeset = @repository.find_changeset_by_name(r1)
479 changeset = @repository.find_changeset_by_name(r1)
479 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
480 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
480 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
481 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
481 end
482 end
482 end
483 end
483 end
484 end
484
485
485 def test_previous_nil
486 def test_previous_nil
486 assert_equal 0, @repository.changesets.count
487 assert_equal 0, @repository.changesets.count
487 @repository.fetch_changesets
488 @repository.fetch_changesets
488 @project.reload
489 @project.reload
489 assert_equal NUM_REV, @repository.changesets.count
490 assert_equal NUM_REV, @repository.changesets.count
490 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb275|.each do |r1|
491 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb275|.each do |r1|
491 changeset = @repository.find_changeset_by_name(r1)
492 changeset = @repository.find_changeset_by_name(r1)
492 assert_nil changeset.previous
493 assert_nil changeset.previous
493 end
494 end
494 end
495 end
495
496
496 def test_next
497 def test_next
497 assert_equal 0, @repository.changesets.count
498 assert_equal 0, @repository.changesets.count
498 @repository.fetch_changesets
499 @repository.fetch_changesets
499 @project.reload
500 @project.reload
500 assert_equal NUM_REV, @repository.changesets.count
501 assert_equal NUM_REV, @repository.changesets.count
501 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
502 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
502 changeset = @repository.find_changeset_by_name(r2)
503 changeset = @repository.find_changeset_by_name(r2)
503 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
504 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
504 assert_equal @repository.find_changeset_by_name(r1), changeset.next
505 assert_equal @repository.find_changeset_by_name(r1), changeset.next
505 end
506 end
506 end
507 end
507 end
508 end
508
509
509 def test_next_nil
510 def test_next_nil
510 assert_equal 0, @repository.changesets.count
511 assert_equal 0, @repository.changesets.count
511 @repository.fetch_changesets
512 @repository.fetch_changesets
512 @project.reload
513 @project.reload
513 assert_equal NUM_REV, @repository.changesets.count
514 assert_equal NUM_REV, @repository.changesets.count
514 %w|2a682156a3b6e77a8bf9cd4590e8db757f3c6c78 2a682156a3b6e77a|.each do |r1|
515 %w|2a682156a3b6e77a8bf9cd4590e8db757f3c6c78 2a682156a3b6e77a|.each do |r1|
515 changeset = @repository.find_changeset_by_name(r1)
516 changeset = @repository.find_changeset_by_name(r1)
516 assert_nil changeset.next
517 assert_nil changeset.next
517 end
518 end
518 end
519 end
519 else
520 else
520 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
521 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
521 def test_fake; assert true end
522 def test_fake; assert true end
522 end
523 end
523 end
524 end
General Comments 0
You need to be logged in to leave comments. Login now