Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 3295:72d1e521da77
merge: use contexts for manifestmerge
- take ma, backwards, and copy out of update
- move findcopies call inside manifestmerge
- pass repo rather than ui
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 09 Oct 2006 16:07:19 -0500 |
parents | 764688cf51e5 |
children | 20087b4bc6f9 |
comparison
equal
deleted
inserted
replaced
3294:a2d93b186a0e | 3295:72d1e521da77 |
---|---|
172 for mf in match[of]: | 172 for mf in match[of]: |
173 checkpair(c, mf, m1) | 173 checkpair(c, mf, m1) |
174 | 174 |
175 return copy | 175 return copy |
176 | 176 |
177 def manifestmerge(ui, m1, m2, ma, copy, overwrite, backwards, partial): | 177 def manifestmerge(repo, p1, p2, pa, overwrite, partial): |
178 """ | 178 """ |
179 Merge manifest m1 with m2 using ancestor ma and generate merge action list | 179 Merge manifest m1 with m2 using ancestor ma and generate merge action list |
180 """ | 180 """ |
181 | |
182 m1 = p1.manifest() | |
183 m2 = p2.manifest() | |
184 ma = pa.manifest() | |
185 backwards = (pa == p2) | |
181 | 186 |
182 def fmerge(f, f2=None, fa=None): | 187 def fmerge(f, f2=None, fa=None): |
183 """merge executable flags""" | 188 """merge executable flags""" |
184 if not f2: | 189 if not f2: |
185 f2 = f | 190 f2 = f |
188 return ((a^b) | (a^c)) ^ a | 193 return ((a^b) | (a^c)) ^ a |
189 | 194 |
190 action = [] | 195 action = [] |
191 | 196 |
192 def act(msg, f, m, *args): | 197 def act(msg, f, m, *args): |
193 ui.debug(" %s: %s -> %s\n" % (f, msg, m)) | 198 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m)) |
194 action.append((f, m) + args) | 199 action.append((f, m) + args) |
200 | |
201 copy = {} | |
202 if not (backwards or overwrite): | |
203 copy = findcopies(repo, m1, m2, pa.rev()) | |
195 | 204 |
196 # Compare manifests | 205 # Compare manifests |
197 for f, n in m1.iteritems(): | 206 for f, n in m1.iteritems(): |
198 if partial and not partial(f): | 207 if partial and not partial(f): |
199 continue | 208 continue |
228 else: # case 4,21 A/B/B | 237 else: # case 4,21 A/B/B |
229 act("local moved", | 238 act("local moved", |
230 f, "c", f2, f, m1[f], m2[f2], fmerge(f, f2, f2), False) | 239 f, "c", f2, f, m1[f], m2[f2], fmerge(f, f2, f2), False) |
231 elif f in ma: | 240 elif f in ma: |
232 if n != ma[f] and not overwrite: | 241 if n != ma[f] and not overwrite: |
233 if ui.prompt( | 242 if repo.ui.prompt( |
234 (_(" local changed %s which remote deleted\n") % f) + | 243 (_(" local changed %s which remote deleted\n") % f) + |
235 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("d"): | 244 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("d"): |
236 act("prompt delete", f, "r") | 245 act("prompt delete", f, "r") |
237 else: | 246 else: |
238 act("other deleted", f, "r") | 247 act("other deleted", f, "r") |
255 f2, "c", f, f, m1[f2], m2[f], fmerge(f2, f, f2), False) | 264 f2, "c", f, f, m1[f2], m2[f], fmerge(f2, f, f2), False) |
256 elif f in ma: | 265 elif f in ma: |
257 if overwrite or backwards: | 266 if overwrite or backwards: |
258 act("recreating", f, "g", m2.execf(f), n) | 267 act("recreating", f, "g", m2.execf(f), n) |
259 elif n != ma[f]: | 268 elif n != ma[f]: |
260 if ui.prompt( | 269 if repo.ui.prompt( |
261 (_("remote changed %s which local deleted\n") % f) + | 270 (_("remote changed %s which local deleted\n") % f) + |
262 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"): | 271 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"): |
263 act("prompt recreating", f, "g", m2.execf(f), n) | 272 act("prompt recreating", f, "g", m2.execf(f), n) |
264 else: | 273 else: |
265 act("remote created", f, "g", m2.execf(f), n) | 274 act("remote created", f, "g", m2.execf(f), n) |
379 raise util.Abort(_("outstanding uncommitted merges")) | 388 raise util.Abort(_("outstanding uncommitted merges")) |
380 | 389 |
381 p1, p2 = pl[0], repo.changectx(node) | 390 p1, p2 = pl[0], repo.changectx(node) |
382 pa = p1.ancestor(p2) | 391 pa = p1.ancestor(p2) |
383 | 392 |
384 # are we going backwards? | |
385 backwards = (pa == p2) | |
386 | |
387 # is there a linear path from p1 to p2? | 393 # is there a linear path from p1 to p2? |
388 if pa == p1 or pa == p2: | 394 if pa == p1 or pa == p2: |
389 if branchmerge: | 395 if branchmerge: |
390 raise util.Abort(_("there is nothing to merge, just use " | 396 raise util.Abort(_("there is nothing to merge, just use " |
391 "'hg update' or look at 'hg heads'")) | 397 "'hg update' or look at 'hg heads'")) |
397 if wc.modified() or wc.added() or wc.removed(): | 403 if wc.modified() or wc.added() or wc.removed(): |
398 raise util.Abort(_("outstanding uncommitted changes")) | 404 raise util.Abort(_("outstanding uncommitted changes")) |
399 | 405 |
400 m1 = wc.manifest() | 406 m1 = wc.manifest() |
401 m2 = p2.manifest() | 407 m2 = p2.manifest() |
402 ma = pa.manifest() | |
403 | 408 |
404 # resolve the manifest to determine which files | 409 # resolve the manifest to determine which files |
405 # we care about merging | 410 # we care about merging |
406 repo.ui.note(_("resolving manifests\n")) | 411 repo.ui.note(_("resolving manifests\n")) |
407 repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") % | 412 repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") % |
408 (overwrite, branchmerge, bool(partial))) | 413 (overwrite, branchmerge, bool(partial))) |
409 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (p1, p2, pa)) | 414 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (p1, p2, pa)) |
410 | 415 |
411 action = [] | 416 action = [] |
412 copy = {} | |
413 | 417 |
414 if not force: | 418 if not force: |
415 checkunknown(repo, m2, wc) | 419 checkunknown(repo, m2, wc) |
416 if not branchmerge: | 420 if not branchmerge: |
417 action += forgetremoved(m2, wc) | 421 action += forgetremoved(m2, wc) |
418 if not (backwards or overwrite): | 422 |
419 copy = findcopies(repo, m1, m2, pa.rev()) | 423 action += manifestmerge(repo, wc, p2, pa, overwrite, partial) |
420 | |
421 action += manifestmerge(repo.ui, m1, m2, ma, copy, | |
422 overwrite, backwards, partial) | |
423 | 424 |
424 ### apply phase | 425 ### apply phase |
425 | 426 |
426 if not branchmerge: | 427 if not branchmerge: |
427 # we don't need to do any magic, just jump to the new rev | 428 # we don't need to do any magic, just jump to the new rev |