Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 15830:8ed112ed774a
phases: add a phases command to display and manipulate phases
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Tue, 10 Jan 2012 19:45:35 +0100 |
parents | 2c480532f36e |
children | 0ecaf1e72609 |
comparison
equal
deleted
inserted
replaced
15829:2c480532f36e | 15830:8ed112ed774a |
---|---|
16 import match as matchmod | 16 import match as matchmod |
17 import merge as mergemod | 17 import merge as mergemod |
18 import minirst, revset, fileset | 18 import minirst, revset, fileset |
19 import dagparser, context, simplemerge | 19 import dagparser, context, simplemerge |
20 import random, setdiscovery, treediscovery, dagutil | 20 import random, setdiscovery, treediscovery, dagutil |
21 import phases as phasesmod | |
21 | 22 |
22 table = {} | 23 table = {} |
23 | 24 |
24 command = cmdutil.command(table) | 25 command = cmdutil.command(table) |
25 | 26 |
4211 for name, path in ui.configitems("paths"): | 4212 for name, path in ui.configitems("paths"): |
4212 if ui.quiet: | 4213 if ui.quiet: |
4213 ui.write("%s\n" % name) | 4214 ui.write("%s\n" % name) |
4214 else: | 4215 else: |
4215 ui.write("%s = %s\n" % (name, util.hidepassword(path))) | 4216 ui.write("%s = %s\n" % (name, util.hidepassword(path))) |
4217 | |
4218 @command('^phase', | |
4219 [('p', 'public', False, _('Set changeset to public')), | |
4220 ('d', 'draft', False, _('Set changeset to draft')), | |
4221 ('s', 'secret', False, _('Set changeset to secret')), | |
4222 ('f', 'force', False, _('allow to move boundary backward')), | |
4223 ('r', 'rev', [], _('target revision')), | |
4224 ], | |
4225 _('[-p|-d|-s] [-f] [-C] [-r] REV')) | |
4226 def phase(ui, repo, *revs, **opts): | |
4227 """set or show the current phase name | |
4228 | |
4229 With no argument, show the phase name of specified revisions. | |
4230 | |
4231 With on one of `--public`, `--draft` or `--secret`, change the phase value. | |
4232 | |
4233 Unless -f/--force is specified, :hg:`phase` won't move changeset from a | |
4234 lower phase to an higher phase. Phase are ordered as follow: | |
4235 | |
4236 public < draft < secret. | |
4237 """ | |
4238 # search for a unique phase argument | |
4239 targetphase = None | |
4240 for idx, name in enumerate(phasesmod.phasenames): | |
4241 if opts[name]: | |
4242 if targetphase is not None: | |
4243 raise util.Abort('only one phase can be specified') | |
4244 targetphase = idx | |
4245 | |
4246 # look for specified revision | |
4247 revs = list(revs) | |
4248 revs.extend(opts['rev']) | |
4249 if not revs: | |
4250 raise NotImplementedError('working directory phase not implemented ' | |
4251 'yet') | |
4252 lock = None | |
4253 if targetphase is None: | |
4254 # display | |
4255 for ctx in repo.set('%lr', revs): | |
4256 ui.write('%i: %s\n' % (ctx.rev(), ctx.phasestr())) | |
4257 else: | |
4258 lock = repo.lock() | |
4259 try: | |
4260 # set phase | |
4261 nodes = [ctx.node() for ctx in repo.set('%lr', revs)] | |
4262 if not nodes: | |
4263 raise util.Abort(_('empty revision set')) | |
4264 phasesmod.advanceboundary(repo, targetphase, nodes) | |
4265 if opts['force']: | |
4266 phasesmod.retractboundary(repo, targetphase, nodes) | |
4267 finally: | |
4268 lock.release() | |
4216 | 4269 |
4217 def postincoming(ui, repo, modheads, optupdate, checkout): | 4270 def postincoming(ui, repo, modheads, optupdate, checkout): |
4218 if modheads == 0: | 4271 if modheads == 0: |
4219 return | 4272 return |
4220 if optupdate: | 4273 if optupdate: |