Comments
Patch
@@ -403,10 +403,22 @@ def _configurecmdoptions(ui):
# This must be in the same function as the option configuration above to
# guarantee it happens after the above configuration, but before the
# extsetup functions.
+ evolvecommands = ui.configlist('experimental', 'evolutioncommands')
evolveopts = ui.configlist('experimental', 'evolution')
if evolveopts and (commandopt not in evolveopts and
'all' not in evolveopts):
- cmdtable.clear()
+ # We build whitelist containing the commands we want to enable
+ whitelist = set()
+ for cmd in evolvecommands:
+ matchingevolvecommands = [e for e in cmdtable.keys() if cmd in e]
+ if not matchingevolvecommands:
+ raise error.Abort(_('unknown command: %s') % cmd)
+ elif len(matchingevolvecommands) > 1:
+ raise error.Abort(_('ambiguous command specification: %s') % cmd)
+ else:
+ whitelist.add(matchingevolvecommands[0])
+ for disabledcmd in set(cmdtable) - whitelist:
+ del cmdtable[disabledcmd]
#####################################################################
### experimental behavior ###
@@ -1085,9 +1085,108 @@ Evolving an empty revset should do nothi
|
o 0 : a0 - test
+Enabling commands selectively, no command enabled, next and fold and unknown
+ $ cat >> $HGRCPATH <<EOF
+ > [experimental]
+ > evolution=createmarkers
+ > EOF
+ $ hg next
+ hg: unknown command 'next'
+ Mercurial Distributed SCM
+
+ basic commands:
+
+ add add the specified files on the next commit
+ annotate show changeset information by line for each file
+ clone make a copy of an existing repository
+ commit commit the specified files or all outstanding changes
+ diff diff repository (or selected files)
+ export dump the header and diffs for one or more changesets
+ forget forget the specified files on the next commit
+ init create a new repository in the given directory
+ log show revision history of entire repository or files
+ merge merge another revision into working directory
+ pull pull changes from the specified source
+ push push changes to the specified destination
+ remove remove the specified files on the next commit
+ serve start stand-alone webserver
+ status show changed files in the working directory
+ summary summarize working directory state
+ update update working directory (or switch revisions)
+
+ (use "hg help" for the full list of commands or "hg -v" for details)
+ [255]
+ $ hg fold
+ hg: unknown command 'fold'
+ Mercurial Distributed SCM
+
+ basic commands:
+
+ add add the specified files on the next commit
+ annotate show changeset information by line for each file
+ clone make a copy of an existing repository
+ commit commit the specified files or all outstanding changes
+ diff diff repository (or selected files)
+ export dump the header and diffs for one or more changesets
+ forget forget the specified files on the next commit
+ init create a new repository in the given directory
+ log show revision history of entire repository or files
+ merge merge another revision into working directory
+ pull pull changes from the specified source
+ push push changes to the specified destination
+ remove remove the specified files on the next commit
+ serve start stand-alone webserver
+ status show changed files in the working directory
+ summary summarize working directory state
+ update update working directory (or switch revisions)
+
+ (use "hg help" for the full list of commands or "hg -v" for details)
+ [255]
+Enabling commands selectively, only fold enabled, next is still unknown
+ $ cat >> $HGRCPATH <<EOF
+ > [experimental]
+ > evolution=createmarkers
+ > evolutioncommands=fold
+ > EOF
+ $ hg fold
+ abort: no revisions specified
+ [255]
+ $ hg next
+ hg: unknown command 'next'
+ Mercurial Distributed SCM
+
+ basic commands:
+
+ add add the specified files on the next commit
+ annotate show changeset information by line for each file
+ clone make a copy of an existing repository
+ commit commit the specified files or all outstanding changes
+ diff diff repository (or selected files)
+ export dump the header and diffs for one or more changesets
+ fold fold multiple revisions into a single one
+ forget forget the specified files on the next commit
+ init create a new repository in the given directory
+ log show revision history of entire repository or files
+ merge merge another revision into working directory
+ pull pull changes from the specified source
+ push push changes to the specified destination
+ remove remove the specified files on the next commit
+ serve start stand-alone webserver
+ status show changed files in the working directory
+ summary summarize working directory state
+ update update working directory (or switch revisions)
+
+ (use "hg help" for the full list of commands or "hg -v" for details)
+ [255]
+
+Restore all of the evolution features
+
+ $ cat >> $HGRCPATH <<EOF
+ > [experimental]
+ > evolution=all
+ > EOF
+
Check hg evolve --rev on singled out commit
-
-
$ hg up 19 -C
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ mkcommit j1