comparison hgext/strip.py @ 27030:cf9ed6d32ccb

strip: changing bookmark argument to be a list Currently strip works with a single bookmark, the changes in this patch modifies the strip extension to accept a list of bookmarks
author Shubhanshu Agrawal <agrawal.shubhanshu@gmail.com>
date Thu, 19 Nov 2015 12:50:10 +0530
parents 8279c5d116a0
children b9d0b45df7b2
comparison
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):