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: |