Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 3167:e67c22bc8bba
merge: use repo.parents and parent contexts in update
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 29 Sep 2006 16:39:38 -0500 |
parents | a9e75b371315 |
children | 9e002614f2eb |
comparison
equal
deleted
inserted
replaced
3166:ebdb3f616bc0 | 3167:e67c22bc8bba |
---|---|
318 if not wlock: | 318 if not wlock: |
319 wlock = repo.wlock() | 319 wlock = repo.wlock() |
320 | 320 |
321 ### check phase | 321 ### check phase |
322 | 322 |
323 pl = repo.dirstate.parents() | 323 pl = repo.parents() |
324 if not overwrite and pl[1] != nullid: | 324 if not overwrite and len(pl) > 1: |
325 raise util.Abort(_("outstanding uncommitted merges")) | 325 raise util.Abort(_("outstanding uncommitted merges")) |
326 | 326 |
327 p1, p2 = pl[0], node | 327 p1, p2 = pl[0], repo.changectx(node) |
328 pa = repo.changelog.ancestor(p1, p2) | 328 pa = p1.ancestor(p2) |
329 | 329 |
330 # are we going backwards? | 330 # are we going backwards? |
331 backwards = (pa == p2) | 331 backwards = (pa == p2) |
332 | 332 |
333 # is there a linear path from p1 to p2? | 333 # is there a linear path from p1 to p2? |
343 modified, added, removed, deleted, unknown = status[:5] | 343 modified, added, removed, deleted, unknown = status[:5] |
344 if branchmerge and not forcemerge: | 344 if branchmerge and not forcemerge: |
345 if modified or added or removed: | 345 if modified or added or removed: |
346 raise util.Abort(_("outstanding uncommitted changes")) | 346 raise util.Abort(_("outstanding uncommitted changes")) |
347 | 347 |
348 m1 = repo.changectx(p1).manifest().copy() | 348 m1 = p1.manifest().copy() |
349 m2 = repo.changectx(p2).manifest().copy() | 349 m2 = p2.manifest().copy() |
350 ma = repo.changectx(pa).manifest() | 350 ma = pa.manifest() |
351 | 351 |
352 # resolve the manifest to determine which files | 352 # resolve the manifest to determine which files |
353 # we care about merging | 353 # we care about merging |
354 repo.ui.note(_("resolving manifests\n")) | 354 repo.ui.note(_("resolving manifests\n")) |
355 repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") % | 355 repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") % |
356 (overwrite, branchmerge, bool(partial))) | 356 (overwrite, branchmerge, bool(partial))) |
357 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % | 357 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (p1, p2, pa)) |
358 (short(p1), short(p2), short(pa))) | |
359 | 358 |
360 action = [] | 359 action = [] |
361 copy = {} | 360 copy = {} |
362 | 361 |
363 m1 = workingmanifest(repo, m1, status) | 362 m1 = workingmanifest(repo, m1, status) |
367 if not force: | 366 if not force: |
368 checkunknown(repo, m2, status) | 367 checkunknown(repo, m2, status) |
369 if not branchmerge: | 368 if not branchmerge: |
370 action += forgetremoved(m2, status) | 369 action += forgetremoved(m2, status) |
371 if not (backwards or overwrite): | 370 if not (backwards or overwrite): |
372 copy = findcopies(repo, m1, m2, repo.changelog.rev(pa)) | 371 copy = findcopies(repo, m1, m2, pa.rev()) |
373 | 372 |
374 action += manifestmerge(repo.ui, m1, m2, ma, overwrite, backwards) | 373 action += manifestmerge(repo.ui, m1, m2, ma, overwrite, backwards) |
375 del m1, m2, ma | 374 del m1, m2, ma |
376 | 375 |
377 ### apply phase | 376 ### apply phase |
378 | 377 |
379 if not branchmerge: | 378 if not branchmerge: |
380 # we don't need to do any magic, just jump to the new rev | 379 # we don't need to do any magic, just jump to the new rev |
381 p1, p2 = p2, nullid | 380 p1, p2 = p2, repo.changectx(nullid) |
382 | 381 |
383 xp1, xp2 = hex(p1), hex(p2) | 382 xp1, xp2 = str(p1), str(p2) |
384 if p2 == nullid: xp2 = '' | 383 if p2.node() == nullid: xp2 = '' |
385 | 384 |
386 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2) | 385 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2) |
387 | 386 |
388 updated, merged, removed, unresolved = applyupdates(repo, action, xp1, xp2) | 387 updated, merged, removed, unresolved = applyupdates(repo, action, xp1, xp2) |
389 | 388 |
390 # update dirstate | 389 # update dirstate |
391 if not partial: | 390 if not partial: |
392 repo.dirstate.setparents(p1, p2) | 391 repo.dirstate.setparents(p1.node(), p2.node()) |
393 recordupdates(repo, action, branchmerge) | 392 recordupdates(repo, action, branchmerge) |
394 | 393 |
395 if show_stats: | 394 if show_stats: |
396 stats = ((updated, _("updated")), | 395 stats = ((updated, _("updated")), |
397 (merged - unresolved, _("merged")), | 396 (merged - unresolved, _("merged")), |
404 if unresolved: | 403 if unresolved: |
405 repo.ui.status(_("There are unresolved merges," | 404 repo.ui.status(_("There are unresolved merges," |
406 " you can redo the full merge using:\n" | 405 " you can redo the full merge using:\n" |
407 " hg update -C %s\n" | 406 " hg update -C %s\n" |
408 " hg merge %s\n" | 407 " hg merge %s\n" |
409 % (repo.changelog.rev(p1), | 408 % (p1.rev(), p2.rev()))) |
410 repo.changelog.rev(p2)))) | |
411 elif remind: | 409 elif remind: |
412 repo.ui.status(_("(branch merge, don't forget to commit)\n")) | 410 repo.ui.status(_("(branch merge, don't forget to commit)\n")) |
413 elif unresolved: | 411 elif unresolved: |
414 repo.ui.status(_("There are unresolved merges with" | 412 repo.ui.status(_("There are unresolved merges with" |
415 " locally modified files.\n")) | 413 " locally modified files.\n")) |