157 repo.ui.write_err(_('/!\\ stabilize failed /!\\\n')) |
157 repo.ui.write_err(_('/!\\ stabilize failed /!\\\n')) |
158 repo.ui.write_err(_('/!\\ Their is no "hg stabilize --continue" /!\\\n')) |
158 repo.ui.write_err(_('/!\\ Their is no "hg stabilize --continue" /!\\\n')) |
159 repo.ui.write_err(_('/!\\ use "hg up -C . ; hg stabilize --dry-run" /!\\\n')) |
159 repo.ui.write_err(_('/!\\ use "hg up -C . ; hg stabilize --dry-run" /!\\\n')) |
160 raise |
160 raise |
161 oldbookmarks = repo.nodebookmarks(nodesrc) |
161 oldbookmarks = repo.nodebookmarks(nodesrc) |
|
162 obsolete = extensions.find('obsolete') |
162 if nodenew is not None: |
163 if nodenew is not None: |
163 phases.retractboundary(repo, destphase, [nodenew]) |
164 phases.retractboundary(repo, destphase, [nodenew]) |
164 repo.addobsolete(nodenew, nodesrc) |
165 obsolete.createmarkers(repo, [(repo[nodesrc], (repo[nodenew],))]) |
165 for book in oldbookmarks: |
166 for book in oldbookmarks: |
166 repo._bookmarks[book] = nodenew |
167 repo._bookmarks[book] = nodenew |
167 else: |
168 else: |
168 repo.addobsolete(node.nullid, nodesrc) |
169 obsolete.createmarkers(repo, [(repo[nodesrc], ())]) |
169 # Behave like rebase, move bookmarks to dest |
170 # Behave like rebase, move bookmarks to dest |
170 for book in oldbookmarks: |
171 for book in oldbookmarks: |
171 repo._bookmarks[book] = dest.node() |
172 repo._bookmarks[book] = dest.node() |
172 for book in destbookmarks: # restore bookmark that rebase move |
173 for book in destbookmarks: # restore bookmark that rebase move |
173 repo._bookmarks[book] = dest.node() |
174 repo._bookmarks[book] = dest.node() |
353 XXX handle merge |
354 XXX handle merge |
354 XXX check immutable first |
355 XXX check immutable first |
355 """ |
356 """ |
356 wlock = repo.wlock() |
357 wlock = repo.wlock() |
357 try: |
358 try: |
358 new = set(noderange(repo, opts['new'])) |
359 lock = repo.lock() |
359 targetnodes = set(noderange(repo, revs)) |
360 try: |
360 if not new: |
361 new = set(noderange(repo, opts['new'])) |
361 new = [node.nullid] |
362 targetnodes = set(noderange(repo, revs)) |
362 for n in targetnodes: |
363 if new: |
363 if not repo[n].mutable(): |
364 sucs = tuple(repo[n] for n in new) |
364 ui.warn(_("cannot kill immutable changeset %s\n") % repo[n]) |
|
365 else: |
365 else: |
366 for ne in new: |
366 sucs = () |
367 repo.addobsolete(ne, n) |
367 markers = [] |
368 # update to an unkilled parent |
368 for n in targetnodes: |
369 wdp = repo['.'] |
369 markers.append((repo[n], sucs)) |
370 newnode = wdp |
370 obsolete = extensions.find('obsolete') |
371 while newnode.obsolete(): |
371 obsolete.createmarkers(repo, markers) |
372 newnode = newnode.parents()[0] |
372 |
373 if newnode.node() != wdp.node(): |
373 # update to an unkilled parent |
374 commands.update(ui, repo, newnode.rev()) |
374 wdp = repo['.'] |
375 ui.status(_('working directory now at %s\n') % newnode) |
375 newnode = wdp |
376 |
376 while newnode.obsolete(): |
|
377 newnode = newnode.parents()[0] |
|
378 if newnode.node() != wdp.node(): |
|
379 commands.update(ui, repo, newnode.rev()) |
|
380 ui.status(_('working directory now at %s\n') % newnode) |
|
381 finally: |
|
382 lock.release() |
377 finally: |
383 finally: |
378 wlock.release() |
384 wlock.release() |
379 |
385 |
380 @command('^amend|refresh', |
386 @command('^amend|refresh', |
381 [('A', 'addremove', None, |
387 [('A', 'addremove', None, |
463 else: |
469 else: |
464 # rewrite() recreated an existing revision, discard |
470 # rewrite() recreated an existing revision, discard |
465 # the intermediate revision if any. No need to update |
471 # the intermediate revision if any. No need to update |
466 # phases or parents. |
472 # phases or parents. |
467 if tempid is not None: |
473 if tempid is not None: |
468 repo.addobsolete(node.nullid, tempid) |
474 obsolete = extensions.find('obsolete') |
|
475 obsolete.createmarkers(repo, [(repo[tempid], ())]) |
469 # XXX: need another message in collapse case. |
476 # XXX: need another message in collapse case. |
470 tr.close() |
477 tr.close() |
471 raise error.Abort(_('no updates found')) |
478 raise error.Abort(_('no updates found')) |
472 tr.close() |
479 tr.close() |
473 finally: |
480 finally: |
599 match = scmutil.match(old, pats, opts) |
606 match = scmutil.match(old, pats, opts) |
600 newid = _commitfiltered(repo, old, match) |
607 newid = _commitfiltered(repo, old, match) |
601 if newid is None: |
608 if newid is None: |
602 raise util.Abort(_('nothing to uncommit')) |
609 raise util.Abort(_('nothing to uncommit')) |
603 # Move local changes on filtered changeset |
610 # Move local changes on filtered changeset |
604 repo.addobsolete(newid, old.node()) |
611 obsolete = extensions.find('obsolete') |
|
612 obsolete.createmarkers(repo, [(old, (repo[newid],))]) |
605 phases.retractboundary(repo, oldphase, [newid]) |
613 phases.retractboundary(repo, oldphase, [newid]) |
606 repo.dirstate.setparents(newid, node.nullid) |
614 repo.dirstate.setparents(newid, node.nullid) |
607 _uncommitdirstate(repo, old, match) |
615 _uncommitdirstate(repo, old, match) |
608 updatebookmarks(newid) |
616 updatebookmarks(newid) |
609 if not repo[newid].files(): |
617 if not repo[newid].files(): |
622 obsoleted = repo.set('%lr', obsoleted) |
630 obsoleted = repo.set('%lr', obsoleted) |
623 result = orig(ui, repo, *arg, **kwargs) |
631 result = orig(ui, repo, *arg, **kwargs) |
624 if not result: # commit successed |
632 if not result: # commit successed |
625 new = repo['-1'] |
633 new = repo['-1'] |
626 oldbookmarks = [] |
634 oldbookmarks = [] |
|
635 obsolete = extensions.find('obsolete') |
|
636 markers = [] |
627 for old in obsoleted: |
637 for old in obsoleted: |
628 oldbookmarks.extend(repo.nodebookmarks(old.node())) |
638 oldbookmarks.extend(repo.nodebookmarks(old.node())) |
629 repo.addobsolete(new.node(), old.node()) |
639 markers.append((old, (new,))) |
|
640 if markers: |
|
641 obsolete.createmarkers(repo, markers) |
630 for book in oldbookmarks: |
642 for book in oldbookmarks: |
631 repo._bookmarks[book] = new.node() |
643 repo._bookmarks[book] = new.node() |
632 if oldbookmarks: |
644 if oldbookmarks: |
633 bookmarks.write(repo) |
645 bookmarks.write(repo) |
634 return result |
646 return result |