phases: add a phases command to display and manipulate phases

This commit is contained in:
Pierre-Yves David 2012-01-10 19:45:35 +01:00
parent 029e0ada33
commit a2fe028df9
8 changed files with 178 additions and 1 deletions

View File

@ -18,6 +18,7 @@ import merge as mergemod
import minirst, revset, fileset import minirst, revset, fileset
import dagparser, context, simplemerge import dagparser, context, simplemerge
import random, setdiscovery, treediscovery, dagutil import random, setdiscovery, treediscovery, dagutil
import phases as phasesmod
table = {} table = {}
@ -4214,6 +4215,58 @@ def paths(ui, repo, search=None):
else: else:
ui.write("%s = %s\n" % (name, util.hidepassword(path))) ui.write("%s = %s\n" % (name, util.hidepassword(path)))
@command('^phase',
[('p', 'public', False, _('Set changeset to public')),
('d', 'draft', False, _('Set changeset to draft')),
('s', 'secret', False, _('Set changeset to secret')),
('f', 'force', False, _('allow to move boundary backward')),
('r', 'rev', [], _('target revision')),
],
_('[-p|-d|-s] [-f] [-C] [-r] REV'))
def phase(ui, repo, *revs, **opts):
"""set or show the current phase name
With no argument, show the phase name of specified revisions.
With on one of `--public`, `--draft` or `--secret`, change the phase value.
Unless -f/--force is specified, :hg:`phase` won't move changeset from a
lower phase to an higher phase. Phase are ordered as follow:
public < draft < secret.
"""
# search for a unique phase argument
targetphase = None
for idx, name in enumerate(phasesmod.phasenames):
if opts[name]:
if targetphase is not None:
raise util.Abort('only one phase can be specified')
targetphase = idx
# look for specified revision
revs = list(revs)
revs.extend(opts['rev'])
if not revs:
raise NotImplementedError('working directory phase not implemented '
'yet')
lock = None
if targetphase is None:
# display
for ctx in repo.set('%lr', revs):
ui.write('%i: %s\n' % (ctx.rev(), ctx.phasestr()))
else:
lock = repo.lock()
try:
# set phase
nodes = [ctx.node() for ctx in repo.set('%lr', revs)]
if not nodes:
raise util.Abort(_('empty revision set'))
phasesmod.advanceboundary(repo, targetphase, nodes)
if opts['force']:
phasesmod.retractboundary(repo, targetphase, nodes)
finally:
lock.release()
def postincoming(ui, repo, modheads, optupdate, checkout): def postincoming(ui, repo, modheads, optupdate, checkout):
if modheads == 0: if modheads == 0:
return return

View File

@ -334,6 +334,7 @@ invalid global arguments for normal commands, aliases, and shell aliases
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit
@ -360,6 +361,7 @@ invalid global arguments for normal commands, aliases, and shell aliases
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit
@ -386,6 +388,7 @@ invalid global arguments for normal commands, aliases, and shell aliases
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit

View File

@ -26,6 +26,7 @@ basic commands:
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit

View File

@ -32,6 +32,7 @@ Show all commands except debug commands
outgoing outgoing
parents parents
paths paths
phase
pull pull
push push
recover recover
@ -198,6 +199,7 @@ Show all commands + options
init: ssh, remotecmd, insecure init: ssh, remotecmd, insecure
log: follow, follow-first, date, copies, keyword, rev, removed, only-merges, user, only-branch, branch, prune, hidden, patch, git, limit, no-merges, stat, style, template, include, exclude log: follow, follow-first, date, copies, keyword, rev, removed, only-merges, user, only-branch, branch, prune, hidden, patch, git, limit, no-merges, stat, style, template, include, exclude
merge: force, rev, preview, tool merge: force, rev, preview, tool
phase: public, draft, secret, force, rev
pull: update, force, rev, bookmark, branch, ssh, remotecmd, insecure pull: update, force, rev, bookmark, branch, ssh, remotecmd, insecure
push: force, rev, bookmark, branch, new-branch, ssh, remotecmd, insecure push: force, rev, bookmark, branch, new-branch, ssh, remotecmd, insecure
remove: after, force, include, exclude remove: after, force, include, exclude

View File

@ -311,6 +311,7 @@ Testing -h/--help:
outgoing show changesets not found in the destination outgoing show changesets not found in the destination
parents show the parents of the working directory or revision parents show the parents of the working directory or revision
paths show aliases for remote repositories paths show aliases for remote repositories
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
recover roll back an interrupted transaction recover roll back an interrupted transaction
@ -393,6 +394,7 @@ Testing -h/--help:
outgoing show changesets not found in the destination outgoing show changesets not found in the destination
parents show the parents of the working directory or revision parents show the parents of the working directory or revision
paths show aliases for remote repositories paths show aliases for remote repositories
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
recover roll back an interrupted transaction recover roll back an interrupted transaction

View File

@ -15,6 +15,7 @@ Short help:
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit
@ -36,6 +37,7 @@ Short help:
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit
@ -81,6 +83,7 @@ Short help:
outgoing show changesets not found in the destination outgoing show changesets not found in the destination
parents show the parents of the working directory or revision parents show the parents of the working directory or revision
paths show aliases for remote repositories paths show aliases for remote repositories
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
recover roll back an interrupted transaction recover roll back an interrupted transaction
@ -157,6 +160,7 @@ Short help:
outgoing show changesets not found in the destination outgoing show changesets not found in the destination
parents show the parents of the working directory or revision parents show the parents of the working directory or revision
paths show aliases for remote repositories paths show aliases for remote repositories
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
recover roll back an interrupted transaction recover roll back an interrupted transaction
@ -225,6 +229,8 @@ Test short command list with verbose option
show revision history of entire repository or files show revision history of entire repository or files
merge: merge:
merge working directory with another revision merge working directory with another revision
phase:
set or show the current phase name
pull: pull:
pull changes from the specified source pull changes from the specified source
push: push:
@ -541,6 +547,7 @@ Test command without options
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit
@ -568,6 +575,7 @@ Test command without options
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit
@ -643,6 +651,7 @@ Test that default list of commands omits extension commands
outgoing show changesets not found in the destination outgoing show changesets not found in the destination
parents show the parents of the working directory or revision parents show the parents of the working directory or revision
paths show aliases for remote repositories paths show aliases for remote repositories
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
recover roll back an interrupted transaction recover roll back an interrupted transaction

View File

@ -26,7 +26,7 @@ Following commit are draft too
Draft commit are properly created over public one: Draft commit are properly created over public one:
$ hg pull -q . # XXX use the dedicated phase command once available $ hg phase --public .
$ hglog $ hglog
1 0 B 1 0 B
0 0 A 0 0 A
@ -154,3 +154,109 @@ Test revset
4 2 E 4 2 E
5 2 H 5 2 H
7 2 merge B' and E 7 2 merge B' and E
Test phase command
===================
initial picture
$ cat >> $HGRCPATH << EOF
> [extensions]
> hgext.graphlog=
> EOF
$ hg log -G --template "{rev} {phase} {desc}\n"
@ 7 secret merge B' and E
|\
| o 6 draft B'
| |
+---o 5 secret H
| |
o | 4 secret E
| |
o | 3 draft D
| |
o | 2 draft C
|/
o 1 public B
|
o 0 public A
display changesets phase
(mixing -r and plain rev specification)
$ hg phase 1::4 -r 7
1: public
2: draft
3: draft
4: secret
7: secret
move changeset forward
(with -r option)
$ hg phase --public -r 2
$ hg log -G --template "{rev} {phase} {desc}\n"
@ 7 secret merge B' and E
|\
| o 6 draft B'
| |
+---o 5 secret H
| |
o | 4 secret E
| |
o | 3 draft D
| |
o | 2 public C
|/
o 1 public B
|
o 0 public A
move changeset backward
(without -r option)
$ hg phase --draft --force 2
$ hg log -G --template "{rev} {phase} {desc}\n"
@ 7 secret merge B' and E
|\
| o 6 draft B'
| |
+---o 5 secret H
| |
o | 4 secret E
| |
o | 3 draft D
| |
o | 2 draft C
|/
o 1 public B
|
o 0 public A
move changeset forward and backward
$ hg phase --draft --force 1::4
$ hg log -G --template "{rev} {phase} {desc}\n"
@ 7 secret merge B' and E
|\
| o 6 draft B'
| |
+---o 5 secret H
| |
o | 4 draft E
| |
o | 3 draft D
| |
o | 2 draft C
|/
o 1 draft B
|
o 0 public A

View File

@ -26,6 +26,7 @@
init create a new repository in the given directory init create a new repository in the given directory
log show revision history of entire repository or files log show revision history of entire repository or files
merge merge working directory with another revision merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source pull pull changes from the specified source
push push changes to the specified destination push push changes to the specified destination
remove remove the specified files on the next commit remove remove the specified files on the next commit