mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
phases: add a phases command to display and manipulate phases
This commit is contained in:
parent
029e0ada33
commit
a2fe028df9
@ -18,6 +18,7 @@ import merge as mergemod
|
||||
import minirst, revset, fileset
|
||||
import dagparser, context, simplemerge
|
||||
import random, setdiscovery, treediscovery, dagutil
|
||||
import phases as phasesmod
|
||||
|
||||
table = {}
|
||||
|
||||
@ -4214,6 +4215,58 @@ def paths(ui, repo, search=None):
|
||||
else:
|
||||
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):
|
||||
if modheads == 0:
|
||||
return
|
||||
|
@ -334,6 +334,7 @@ invalid global arguments for normal commands, aliases, and shell aliases
|
||||
init create a new repository in the given directory
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
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
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
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
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
remove remove the specified files on the next commit
|
||||
|
@ -26,6 +26,7 @@ basic commands:
|
||||
init create a new repository in the given directory
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
remove remove the specified files on the next commit
|
||||
|
@ -32,6 +32,7 @@ Show all commands except debug commands
|
||||
outgoing
|
||||
parents
|
||||
paths
|
||||
phase
|
||||
pull
|
||||
push
|
||||
recover
|
||||
@ -198,6 +199,7 @@ Show all commands + options
|
||||
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
|
||||
merge: force, rev, preview, tool
|
||||
phase: public, draft, secret, force, rev
|
||||
pull: update, force, rev, bookmark, branch, ssh, remotecmd, insecure
|
||||
push: force, rev, bookmark, branch, new-branch, ssh, remotecmd, insecure
|
||||
remove: after, force, include, exclude
|
||||
|
@ -311,6 +311,7 @@ Testing -h/--help:
|
||||
outgoing show changesets not found in the destination
|
||||
parents show the parents of the working directory or revision
|
||||
paths show aliases for remote repositories
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
recover roll back an interrupted transaction
|
||||
@ -393,6 +394,7 @@ Testing -h/--help:
|
||||
outgoing show changesets not found in the destination
|
||||
parents show the parents of the working directory or revision
|
||||
paths show aliases for remote repositories
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
recover roll back an interrupted transaction
|
||||
|
@ -15,6 +15,7 @@ Short help:
|
||||
init create a new repository in the given directory
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
remove remove the specified files on the next commit
|
||||
@ -36,6 +37,7 @@ Short help:
|
||||
init create a new repository in the given directory
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
remove remove the specified files on the next commit
|
||||
@ -81,6 +83,7 @@ Short help:
|
||||
outgoing show changesets not found in the destination
|
||||
parents show the parents of the working directory or revision
|
||||
paths show aliases for remote repositories
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
recover roll back an interrupted transaction
|
||||
@ -157,6 +160,7 @@ Short help:
|
||||
outgoing show changesets not found in the destination
|
||||
parents show the parents of the working directory or revision
|
||||
paths show aliases for remote repositories
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
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
|
||||
merge:
|
||||
merge working directory with another revision
|
||||
phase:
|
||||
set or show the current phase name
|
||||
pull:
|
||||
pull changes from the specified source
|
||||
push:
|
||||
@ -541,6 +547,7 @@ Test command without options
|
||||
init create a new repository in the given directory
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
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
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
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
|
||||
parents show the parents of the working directory or revision
|
||||
paths show aliases for remote repositories
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
recover roll back an interrupted transaction
|
||||
|
@ -26,7 +26,7 @@ Following commit are draft too
|
||||
|
||||
Draft commit are properly created over public one:
|
||||
|
||||
$ hg pull -q . # XXX use the dedicated phase command once available
|
||||
$ hg phase --public .
|
||||
$ hglog
|
||||
1 0 B
|
||||
0 0 A
|
||||
@ -154,3 +154,109 @@ Test revset
|
||||
4 2 E
|
||||
5 2 H
|
||||
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
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
init create a new repository in the given directory
|
||||
log show revision history of entire repository or files
|
||||
merge merge working directory with another revision
|
||||
phase set or show the current phase name
|
||||
pull pull changes from the specified source
|
||||
push push changes to the specified destination
|
||||
remove remove the specified files on the next commit
|
||||
|
Loading…
Reference in New Issue
Block a user