# HG changeset patch # User Greg Ward # Date 1446840285 18000 # Node ID afb0a33c4f6cd1138680c9ed5601e10d884a8146 # Parent e080d2ae265602f8f9e77e3f36b64334080c28de evolve: rewrite command help (evolve command only) diff -r e080d2ae2656 -r afb0a33c4f6c hgext/evolve.py --- a/hgext/evolve.py Fri Nov 06 18:37:16 2015 -0500 +++ b/hgext/evolve.py Fri Nov 06 15:04:45 2015 -0500 @@ -1544,38 +1544,66 @@ ] + mergetoolopts, _('[OPTIONS]...')) def evolve(ui, repo, **opts): - """solve troubles in your repository - - - rebase unstable changesets to make them stable again, - - create proper diffs from bumped changesets, - - fuse divergent changesets back together, - - update to a successor if the working directory parent is - obsolete - - If no argument are passed and the current working copy parent is obsolete, - :hg:`evolve` will update the working copy to the successors of this working - copy parent. If the working copy parent is not obsolete (and still no - argument passed) each invocation of :hg:`evolve` will evolve a single - unstable changeset, It will only select a changeset to be evolved if it - will result in a new children for the current working copy parent or its - descendants. The working copy will be updated on the result - (this last behavior will most likely to change in the future). - You can evolve all the unstable changesets that will be evolved on the - parent of the working copy and all its descendants recursively by using - :hg:`evolve` --all. - - You can decide to evolve other categories of trouble using the --divergent - and --bumped flags. If no other option are specified, this will try to - solve the specified troubles for the working copy parent. - - You can also evolve changesets affected by troubles of the selected - category using the --rev options. You can pick the next one anywhere in the - repo using --any. - - You can evolve all the changesets affected by troubles of the selected - category using --all --any. - - The working directory is updated to the newly created revision. + """solve troubled changesets in your repository + + Modifying history can lead to various types of troubled changesets: unstable, + bumped, or divergent. The evolve command resolves your troubles by executing one + of the following actions: + + - update working copy to a successor + - rebase an unstable changeset + - extract the desired changes from a bumped changeset + - fuse divergent changesets back together + + If you pass no arguments, evolve works in automatic mode: it will execute a + single action to reduce instability related to your working copy. There are two + cases for this action. First, if the parent of your working copy is obsolete, + evolve updates to the parent's successor. Second, if the working copy parent is + not obsolete but has obsolete predecessors, then evolve determines if there is an + unstable changeset that can be rebased onto the working copy parent in order to + reduce instability. If so, evolve rebases that changeset. If not, evolve refuses + to guess your intention, and gives a hint about what you might want to do next. + + Any time evolve creates a changeset, it updates the working copy to the new + changeset. (Currently, every successful evolve operation involves an update as + well; this may change in future.) + + Automatic mode only handles common use cases. For example, it avoids taking + action in the case of ambiguity, and it ignores unstable changesets that are not + related to your working copy. It also refuses to solve bumped or divergent + changesets unless you explicity request such behavior (see below). + + Eliminating all instability around your working copy may require multiple + invocations of :hg:`evolve`. Alternately, use ``--all`` to recursively select and + evolve all unstable changesets that can be rebased onto the working copy parent. + This is more powerful than successive invocations, since ``--all`` handles + ambiguous cases (e.g. unstable changesets with multiple children) by evolving all + branches. + + When your repository cannot be handled by automatic mode, you might need to use + ``--rev`` to specify a changeset to evolve. For example, if you have an unstable + changeset that is not related to the working copy parent, you could use ``--rev`` + to evolve it. Or, if some changeset has multiple unstable children, evolve in + automatic mode refuses to guess which one to evolve; you have to use ``--rev`` + in that case. + + Alternately, ``--any`` makes evolve search for the next evolvable changeset + regardless of whether it is related to the working copy parent. + + You can supply multiple revisions to evolve multiple troubled changesets in a + single invocation. In revset terms, ``--any`` is equivalent to ``--rev + first(unstable())``. ``--rev`` and ``--all`` are mutually exclusive, as are + ``--rev`` and ``--any``. + + ``hg evolve --any --all`` is useful for cleaning up instability across all + branches, letting evolve figure out the appropriate order and destination. + + When you have troubled changesets that are not unstable, :hg:`evolve` refuses to + consider them unless you specify the category of trouble you wish to resolve, + with ``--bumped`` or ``--divergent``. These options are currently mutually + exclusive with each other and with ``--unstable`` (the default). You can combine + ``--bumped`` or ``--divergent`` with ``--rev``, ``--all``, or ``--any``. + """ # Options