##// END OF EJS Templates
scm: git: backout r8839 (#8857)...
Toshi MARUYAMA -
r9022:f0987e4b8f01
parent child
Show More
@@ -107,7 +107,8 class Repository::Git < Repository
107 # However, Git does not have a sequential commit numbering.
107 # However, Git does not have a sequential commit numbering.
108 #
108 #
109 # In order to fetch only new adding revisions,
109 # In order to fetch only new adding revisions,
110 # Redmine needs to save "heads".
110 # Redmine needs to parse revisions per branch.
111 # Branch "last_scmid" is for this requirement.
111 #
112 #
112 # In Git and Mercurial, revisions are not in date order.
113 # In Git and Mercurial, revisions are not in date order.
113 # Redmine Mercurial fixed issues.
114 # Redmine Mercurial fixed issues.
@@ -130,17 +131,9 class Repository::Git < Repository
130 def fetch_changesets
131 def fetch_changesets
131 scm_brs = branches
132 scm_brs = branches
132 return if scm_brs.nil? || scm_brs.empty?
133 return if scm_brs.nil? || scm_brs.empty?
133
134 h1 = extra_info || {}
134 h1 = extra_info || {}
135 h = h1.dup
135 h = h1.dup
136 repo_heads = scm_brs.map{ |br| br.scmid }
136 h["branches"] ||= {}
137 h["heads"] ||= []
138 prev_db_heads = h["heads"].dup
139 if prev_db_heads.empty?
140 prev_db_heads += heads_from_branches_hash
141 end
142 return if prev_db_heads.sort == repo_heads.sort
143
144 h["db_consistent"] ||= {}
137 h["db_consistent"] ||= {}
145 if changesets.count == 0
138 if changesets.count == 0
146 h["db_consistent"]["ordering"] = 1
139 h["db_consistent"]["ordering"] = 1
@@ -151,19 +144,18 class Repository::Git < Repository
151 merge_extra_info(h)
144 merge_extra_info(h)
152 self.save
145 self.save
153 end
146 end
154
147 save_revisions(h, scm_brs)
155 save_revisions(prev_db_heads, repo_heads)
156 end
148 end
157
149
158 def save_revisions(prev_db_heads, repo_heads)
150 def save_revisions(h, scm_brs)
159 h = {}
151 scm_brs.each do |br1|
160 opts = {}
152 br = br1.to_s
161 opts[:reverse] = true
153 from_scmid = nil
162 opts[:excludes] = prev_db_heads
154 from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br]
163 opts[:includes] = repo_heads
155 h["branches"][br] ||= {}
164 begin
156 begin
165 scm.revisions('', nil, nil, opts) do |rev|
157 scm.revisions('', from_scmid, br, {:reverse => true}) do |rev|
166 db_rev = find_changeset_by_name(rev.scmid)
158 db_rev = find_changeset_by_name(rev.revision)
167 transaction do
159 transaction do
168 if db_rev.nil?
160 if db_rev.nil?
169 db_saved_rev = save_revision(rev)
161 db_saved_rev = save_revision(rev)
@@ -173,19 +165,16 class Repository::Git < Repository
173 ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact
165 ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact
174 end
166 end
175 end
167 end
176 h["heads"] = prev_db_heads.dup
168 h["branches"][br]["last_scmid"] = rev.scmid
177 h["heads"] << rev.scmid
178 merge_extra_info(h)
169 merge_extra_info(h)
179 self.save
170 self.save
180 end
171 end
181 end
172 end
182 h["heads"] = repo_heads.dup
183 merge_extra_info(h)
184 self.save
185 rescue Redmine::Scm::Adapters::CommandFailed => e
173 rescue Redmine::Scm::Adapters::CommandFailed => e
186 logger.error("save revisions error: #{e.message}")
174 logger.error("save revisions error: #{e.message}")
187 end
175 end
188 end
176 end
177 end
189 private :save_revisions
178 private :save_revisions
190
179
191 def save_revision(rev)
180 def save_revision(rev)
@@ -116,7 +116,7 class RepositoryGitTest < ActiveSupport::TestCase
116 assert_equal "README", change.path
116 assert_equal "README", change.path
117 assert_equal "A", change.action
117 assert_equal "A", change.action
118
118
119 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
119 assert_equal NUM_HEAD, @repository.extra_info["branches"].size
120 end
120 end
121
121
122 def test_fetch_changesets_incremental
122 def test_fetch_changesets_incremental
@@ -124,11 +124,11 class RepositoryGitTest < ActiveSupport::TestCase
124 @repository.fetch_changesets
124 @repository.fetch_changesets
125 @project.reload
125 @project.reload
126 assert_equal NUM_REV, @repository.changesets.count
126 assert_equal NUM_REV, @repository.changesets.count
127 extra_info_heads = @repository.extra_info["heads"].dup
127 extra_info_db = @repository.extra_info["branches"]
128 assert_equal NUM_HEAD, extra_info_heads.size
128 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
129 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
129 extra_info_db["latin-1-path-encoding"]["last_scmid"]
130 assert_equal 4, extra_info_heads.size
130 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
131
131 extra_info_db["master"]["last_scmid"]
132 del_revs = [
132 del_revs = [
133 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
133 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
134 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
134 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
@@ -142,19 +142,20 class RepositoryGitTest < ActiveSupport::TestCase
142 end
142 end
143 @project.reload
143 @project.reload
144 cs1 = @repository.changesets
144 cs1 = @repository.changesets
145 assert_equal NUM_REV - 6, cs1.count
145 assert_equal 22, cs1.count
146 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
146 h = @repository.extra_info.dup
147 h = {}
147 h["branches"]["master"]["last_scmid"] =
148 h["heads"] = extra_info_heads
148 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
149 @repository.merge_extra_info(h)
149 @repository.merge_extra_info(h)
150 @repository.save
150 @repository.save
151 @project.reload
151 @project.reload
152 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
152 extra_info_db_1 = @repository.extra_info["branches"]
153 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
154 extra_info_db_1["master"]["last_scmid"]
155
153 @repository.fetch_changesets
156 @repository.fetch_changesets
154 @project.reload
157 @project.reload
155 assert_equal NUM_REV, @repository.changesets.count
158 assert_equal NUM_REV, @repository.changesets.count
156 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
157 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
@@ -162,11 +163,9 class RepositoryGitTest < ActiveSupport::TestCase
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 assert_equal NUM_HEAD, @repository.extra_info["branches"].size
166 assert_equal NUM_HEAD, extra_info_heads.size
167 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
167 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
168 @repository.extra_info["branches"]["master"]["last_scmid"]
168 assert_equal 4, extra_info_heads.size
169
170 del_revs = [
169 del_revs = [
171 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
170 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
172 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
171 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
@@ -190,21 +189,17 class RepositoryGitTest < ActiveSupport::TestCase
190 @project.reload
189 @project.reload
191 assert_equal NUM_REV - 5, @repository.changesets.count
190 assert_equal NUM_REV - 5, @repository.changesets.count
192
191
193 extra_info_heads << "abcd1234efgh"
192 h = @repository.extra_info.dup
194 h = {}
193 h["branches"]["master"]["last_scmid"] = "abcd1234efgh"
195 h["heads"] = extra_info_heads
196 @repository.merge_extra_info(h)
194 @repository.merge_extra_info(h)
197 @repository.save
195 @repository.save
198 @project.reload
196 @project.reload
199 h1 = @repository.extra_info["heads"].dup
197 assert_equal "abcd1234efgh",
200 assert h1.index("abcd1234efgh")
198 @repository.extra_info["branches"]["master"]["last_scmid"]
201 assert_equal 5, h1.size
202
199
203 @repository.fetch_changesets
200 @repository.fetch_changesets
204 @project.reload
201 @project.reload
205 assert_equal NUM_REV - 5, @repository.changesets.count
202 assert_equal NUM_REV - 5, @repository.changesets.count
206 h2 = @repository.extra_info["heads"].dup
207 assert_equal h1, h2
208 end
203 end
209
204
210 def test_parents
205 def test_parents
@@ -251,8 +246,6 class RepositoryGitTest < ActiveSupport::TestCase
251 @project.reload
246 @project.reload
252 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
247 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
253
248
254 extra_info_heads = @repository.extra_info["heads"].dup
255 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
256 del_revs = [
249 del_revs = [
257 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
250 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
258 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
251 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
@@ -268,19 +261,18 class RepositoryGitTest < ActiveSupport::TestCase
268 cs1 = @repository.changesets
261 cs1 = @repository.changesets
269 assert_equal NUM_REV - 6, cs1.count
262 assert_equal NUM_REV - 6, cs1.count
270 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
263 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
271
264 h = @repository.extra_info.dup
272 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
265 h["branches"]["master"]["last_scmid"] =
273 h = {}
266 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
274 h["heads"] = extra_info_heads
275 @repository.merge_extra_info(h)
267 @repository.merge_extra_info(h)
276 @repository.save
268 @repository.save
277 @project.reload
269 @project.reload
278 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
270 extra_info_db_1 = @repository.extra_info["branches"]
271 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
272 extra_info_db_1["master"]["last_scmid"]
273
279 @repository.fetch_changesets
274 @repository.fetch_changesets
280 @project.reload
281 assert_equal NUM_REV, @repository.changesets.count
275 assert_equal NUM_REV, @repository.changesets.count
282 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
283
284 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
276 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
285 end
277 end
286
278
@@ -519,7 +511,7 class RepositoryGitTest < ActiveSupport::TestCase
519 @repository.fetch_changesets
511 @repository.fetch_changesets
520 @project.reload
512 @project.reload
521 assert_equal NUM_REV, @repository.changesets.count
513 assert_equal NUM_REV, @repository.changesets.count
522 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb275|.each do |r1|
514 %w|95488a44bc25f7d1f97d775a31359539ff333a63 95488a44b|.each do |r1|
523 changeset = @repository.find_changeset_by_name(r1)
515 changeset = @repository.find_changeset_by_name(r1)
524 assert_nil changeset.previous
516 assert_nil changeset.previous
525 end
517 end
@@ -543,7 +535,7 class RepositoryGitTest < ActiveSupport::TestCase
543 @repository.fetch_changesets
535 @repository.fetch_changesets
544 @project.reload
536 @project.reload
545 assert_equal NUM_REV, @repository.changesets.count
537 assert_equal NUM_REV, @repository.changesets.count
546 %w|2a682156a3b6e77a8bf9cd4590e8db757f3c6c78 2a682156a3b6e77a|.each do |r1|
538 %w|67e7792ce20ccae2e4bb73eed09bb397819c8834 67e7792ce20cca|.each do |r1|
547 changeset = @repository.find_changeset_by_name(r1)
539 changeset = @repository.find_changeset_by_name(r1)
548 assert_nil changeset.next
540 assert_nil changeset.next
549 end
541 end
General Comments 0
You need to be logged in to leave comments. Login now