85 ('', 'no-backup', None, _('no backups')), |
85 ('', 'no-backup', None, _('no backups')), |
86 ('', 'nobackup', None, _('no backups (DEPRECATED)')), |
86 ('', 'nobackup', None, _('no backups (DEPRECATED)')), |
87 ('n', '', None, _('ignored (DEPRECATED)')), |
87 ('n', '', None, _('ignored (DEPRECATED)')), |
88 ('k', 'keep', None, _("do not modify working directory during " |
88 ('k', 'keep', None, _("do not modify working directory during " |
89 "strip")), |
89 "strip")), |
90 ('B', 'bookmark', '', _("remove revs only reachable from given" |
90 ('B', 'bookmark', [], _("remove revs only reachable from given" |
91 " bookmark"))], |
91 " bookmark"))], |
92 _('hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...')) |
92 _('hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...')) |
93 def stripcmd(ui, repo, *revs, **opts): |
93 def stripcmd(ui, repo, *revs, **opts): |
94 """strip changesets and all their descendants from the repository |
94 """strip changesets and all their descendants from the repository |
95 |
95 |
127 revs = list(revs) + opts.get('rev') |
127 revs = list(revs) + opts.get('rev') |
128 revs = set(scmutil.revrange(repo, revs)) |
128 revs = set(scmutil.revrange(repo, revs)) |
129 |
129 |
130 wlock = repo.wlock() |
130 wlock = repo.wlock() |
131 try: |
131 try: |
132 bookmarks = None |
132 bookmarks = set(opts.get('bookmark')) |
133 if opts.get('bookmark'): |
|
134 bookmarks = set([opts.get('bookmark')]) |
|
135 if bookmarks: |
133 if bookmarks: |
136 repomarks = repo._bookmarks |
134 repomarks = repo._bookmarks |
137 if not bookmarks.issubset(repomarks): |
135 if not bookmarks.issubset(repomarks): |
138 raise error.Abort(_("bookmark '%s' not found") % |
136 raise error.Abort(_("bookmark '%s' not found") % |
139 ','.join(sorted(bookmarks - set(repomarks.keys())))) |
137 ','.join(sorted(bookmarks - set(repomarks.keys())))) |
144 nodetobookmarks = {} |
142 nodetobookmarks = {} |
145 for mark, node in repomarks.iteritems(): |
143 for mark, node in repomarks.iteritems(): |
146 nodetobookmarks.setdefault(node, []).append(mark) |
144 nodetobookmarks.setdefault(node, []).append(mark) |
147 for marks in nodetobookmarks.values(): |
145 for marks in nodetobookmarks.values(): |
148 if bookmarks.issuperset(marks): |
146 if bookmarks.issuperset(marks): |
149 rsrevs = repair.stripbmrevset(repo, marks[0]) |
147 rsrevs = repair.stripbmrevset(repo, marks[0]) |
150 revs.update(set(rsrevs)) |
148 revs.update(set(rsrevs)) |
151 if not revs: |
149 if not revs: |
152 for bookmark in bookmarks: |
150 for bookmark in bookmarks: |
153 del repomarks[bookmark] |
151 del repomarks[bookmark] |
154 repomarks.write() |
152 repomarks.write() |
155 for bookmark in sorted(bookmarks): |
153 for bookmark in sorted(bookmarks): |