hgext/strip.py
changeset 27030 cf9ed6d32ccb
parent 27029 8279c5d116a0
child 27052 b9d0b45df7b2
equal deleted inserted replaced
27029:8279c5d116a0 27030:cf9ed6d32ccb
    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):