hgext/evolve.py
changeset 444 aedb6b8ace86
parent 443 3f8c11865ed2
child 446 9d47474d2582
equal deleted inserted replaced
443:3f8c11865ed2 444:aedb6b8ace86
   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