hgext/evolve.py
changeset 1221 524dbc8ffeac
parent 1220 71240f696f26
child 1226 901d2f4b21a9
equal deleted inserted replaced
1220:71240f696f26 1221:524dbc8ffeac
  1739 
  1739 
  1740 @command('^prune|obsolete|kill',
  1740 @command('^prune|obsolete|kill',
  1741     [('n', 'new', [], _("successor changeset (DEPRECATED)")),
  1741     [('n', 'new', [], _("successor changeset (DEPRECATED)")),
  1742      ('s', 'succ', [], _("successor changeset")),
  1742      ('s', 'succ', [], _("successor changeset")),
  1743      ('r', 'rev', [], _("revisions to prune")),
  1743      ('r', 'rev', [], _("revisions to prune")),
       
  1744      ('k', 'keep', None, _("does not modify working copy during prune")),
  1744      ('', 'biject', False, _("do a 1-1 map between rev and successor ranges")),
  1745      ('', 'biject', False, _("do a 1-1 map between rev and successor ranges")),
  1745      ('B', 'bookmark', '', _("remove revs only reachable from given"
  1746      ('B', 'bookmark', '', _("remove revs only reachable from given"
  1746                              " bookmark"))] + metadataopts,
  1747                              " bookmark"))] + metadataopts,
  1747     _('[OPTION] [-r] REV...'))
  1748     _('[OPTION] [-r] REV...'))
  1748     # -U  --noupdate option to prevent wc update and or bookmarks update ?
  1749     # -U  --noupdate option to prevent wc update and or bookmarks update ?
  1831 
  1832 
  1832             while newnode.obsolete():
  1833             while newnode.obsolete():
  1833                 newnode = newnode.parents()[0]
  1834                 newnode = newnode.parents()[0]
  1834 
  1835 
  1835         if newnode.node() != wdp.node():
  1836         if newnode.node() != wdp.node():
  1836             commands.update(ui, repo, newnode.rev())
  1837             if opts.get('keep', False):
  1837             ui.status(_('working directory now at %s\n') % newnode)
  1838                 # This is largely the same as the implementation in
       
  1839                 # strip.stripcmd(). We might want to refactor this somewhere
       
  1840                 # common at some point.
       
  1841 
       
  1842                 # only reset the dirstate for files that would actually change
       
  1843                 # between the working context and uctx
       
  1844                 descendantrevs = repo.revs("%d::." % newnode.rev())
       
  1845                 changedfiles = []
       
  1846                 for rev in descendantrevs:
       
  1847                     # blindly reset the files, regardless of what actually changed
       
  1848                     changedfiles.extend(repo[rev].files())
       
  1849 
       
  1850                 # reset files that only changed in the dirstate too
       
  1851                 dirstate = repo.dirstate
       
  1852                 dirchanges = [f for f in dirstate if dirstate[f] != 'n']
       
  1853                 changedfiles.extend(dirchanges)
       
  1854                 repo.dirstate.rebuild(newnode.node(), newnode.manifest(), changedfiles)
       
  1855                 repo.dirstate.write()
       
  1856             else:
       
  1857                 commands.update(ui, repo, newnode.rev())
       
  1858                 ui.status(_('working directory now at %s\n') % newnode)
  1838         # update bookmarks
  1859         # update bookmarks
  1839         if bookmark:
  1860         if bookmark:
  1840             _deletebookmark(ui, marks, bookmark)
  1861             _deletebookmark(ui, marks, bookmark)
  1841         for ctx in repo.unfiltered().set('bookmark() and %ld', precs):
  1862         for ctx in repo.unfiltered().set('bookmark() and %ld', precs):
  1842             # used to be:
  1863             # used to be: