README
author Matt Harbison <matt_harbison@yahoo.com>
Sat, 09 Aug 2014 19:12:16 -0400
branchstable
changeset 1106 6b0cf1b73693
parent 1104 cb36a4eb0157
child 1107 1c227ecb744d
permissions -rw-r--r--
evolve: replace each obsolete sha1 in the description with its latest successor Obsolete csets are hidden by default and don't get pushed to the parent repo. In order to avoid broken references in commit messages, it makes sense to evolve those references to the latest and greatest successor, as each cset containing them is evolved. Of course, stale references can still occur if a commit in branch 'A' references something in branch 'B', and that something in 'B' is evolved but 'A' isn't subsequently evolved. This alleviates the user that is evolving a series of commits from having to 1) recognize that there is a hash that needs updating in any one of the series 2) look up the latest successor manually 3) hg amend -e The regular expression for matching and the logic for replacing are borrowed from the convert extension [1]. It might be nice for the output to state the reason that the reference couldn't be updated (it was pruned, split or diverged), but that may be excessive for something only displayed in verbose mode. (Maybe it should be a ui.status() instead?) [1] http://selenic.com/hg/rev/45562379ce4e

=============================
Mutable History For Mercurial
=============================

This package supplies the ``evolve`` extension for Mercurial, which
provides several commands to mutate history and deal with the
resulting issues.

It also:

    - enables the "changeset obsolescence" feature of Mercurial
    - issues several warning messages when trouble appears in your repository

**This extension is experimental and not yet meant for production.**

You can enable it by adding the line below to the ``extensions``
section of your hgrc::

    evolve = PATH/TO/mutable-history/hgext/evolve.py

We recommend reading the documentation first. An online version is
available here:

    http://evolution.experimentalworks.net/doc/

Or see the ``doc/`` directory for a local copy.

Contribute
==========

The simplest way to contribute is to issue a pull request on Bitbucket
(https://bitbucket.org/marmoute/mutable-history). Alternatively, you
can use the patchbomb extension to send email to mercurial
devel. Please make sure to use the evolve-ext flag when doing so. You
can use a command like this:

    hg email --to mercurial-devel@selenic.com --flag evolve-ext --rev '<your patches>'

See also
http://mercurial.selenic.com/wiki/ContributingChanges#Patch_descriptions
for guidelines on the patch description.

Please don't forget to update and run the tests when you fix a bug or
add a feature. To run the tests:

    cd tests
    python run-tests.py --with-hg=/path/to/hg

However, some cutting-edge changes may be found in a mutable repository hosted
by logilab before they are published.

    http://hg.netv6.net/marmoute-wip/evolve/

Be sure to check latest draft changeset before submitting new changesets.


Changelog
=========

4.2.0 --

- uncommit: add a --rev argument
- evolve: add a `working directory now at xxxxxxxxxx` message
- evolve: automatically translate obsolete hashes when evolving
- properly skip marker creating if patch apply cleanly
- prune: work around a massive slowdown from lazy revset
- grab: "fix" the grab alias on window

4.1.0 -- 2014-08-08

- amend: add -D/--current-date option
- amend: add -U/--current-user option
- evolve: add a --tool option
- evolve: add a --confirm option
- mark "commit -o", "graft -o" and "graft -O" as deprecated since they are
  unlikely to eventually make it into core.
- push obsmarkers and phases in the same transaction than changesets
  (when using hg >= 3.1 and bundle2-exp is enabled)
- hide message about the obsolescence marker exchange behind a
  `experimental.verbose-obsolescence-exchange` variable (default to False).

4.0.1 -- 2014-08-08

- createmarkers() accept an iterable (for compat with other extension)

4.0.0 -- 2014-06-03

- require Mercurial version 3.0.1 or above
- some compatibility fixes with future 3.1.0
- deprecated `gup` and `gdown` in favor of prev and next
- record parent of pruned parent at prune time
- added a `debugobsstorestat` command to gather data on obsmarker content.
- added a `debugrecordpruneparents` command to upgrade existing prune marker
  with parent information. Please run it once per repo after upgrading.
- improvement to obsolescence marker exchange:
  - added progress when pushing obsmarkers
  - added multiple output during obsolescence markers exchange
  - only push markers relevant to pushed subset
  - add a new experimental way to exchange marker (when server support):
    - added progress when pulling obsmarkers
    - only pull markers relevant to pulled subset
    - avoid exchanging common markers in some case
    - use bundle2 as transport when available.
 - add a hook related to the new commands

3.3.2 -- 2014-05-14

- fix a bug where evolve were creating changeset with 2 parents on windows
  (fix issues #16, #35 and #42)
- adds a --obsolete flag to import (requieres Mercurial 3.0)
- prune: update to successor rather than parent when pruning '.' with -s
- fold: add missing --message and --logfile option
- fold: add squash as an alias

3.3.1 -- 2014-04-23

- various language fix
- active bookmark now move when using prev/next (#37)
- fix some preservation of rename information on evolve (#33)
- abort when evolve tries to move a node on top of itself (will helps on the #35 front)
- fold: enable --date and --user options

3.3.0 -- 2014-03-04

- raise Mercurial's minimal requirement to 2.7
- drop `latercomer` and `conflicting` compatibility. Those old alias are
  deprecated for a long time now.
- add verbose hint about how to handle corner case by hand.
  This should help people until evolve is able to to it itself.
- removed the qsync extension. The only user I knew about (logilab) is not
  using it anymore. It not compatible with coming Mercurial version 2.9.
- add progress indicator for long evolve command
- report troubles creation from `hg import`

3.2.0 -- 2013-11-15

- conform to the Mercurial custom of lowercase messages
- added a small extension to experiment with obsolescence marker push
- amend: drop the deprecated note option
- amend: use core mechanism for amend (fix multiple bugs)
- parents command: add "working directory parent is obsolete" message
- evolve command: allow updating to the successor if the parent is
  obsolete
- gdown and gup commands: add next and previous alias, respectively
- make grab aliases compatible with Mercurial 2.8
- Tested with 2.6, 2.7 and 2.8

3.1.0 -- 2013-02-11

- amend: drop deprecated --change option for amend
- alias: add a grab aliast to be used instead of graft -O
- touch: add a --duplicate option to *not* obsolete the old version
- touch: fix touching multiple revision at the same time
- evolve: add a --all option
- prune: various minor improvements
- prune: add option to prune a specific bookmark
- prune: add -u and -d option to control metadata

3.0.0 -- 2013-02-02

- compatibility with 2.5

2.2.0 --

- make evolve smarter at picking next troubled to solved without --any

2.1.0 -- 2012-12-03

- qsync fixes
- have qfold ask for commit message

2.0.0 -- 2012-10-26

- compat with mercurial 2.4

1.1.0 -- 2012-10-26

- fix troubles creation reporting from rebase
- rename latecomer to bumped
- renamed conflicting to divergent
- smarter divergent handling

1.0.2 -- 2012-09-19

- fix hg fold bug
- fix hg pull --rebase
- fix detection of conflict with external tools
- adapt to core movement (caches and --amend)

1.0.1 -- 2012-08-31

- documentation improvement
- fix a performance bug with hgweb

1.0 -- 2012-08-29

- Align with Mercurial version 2.3 (drop 2.2 support).
- stabilize handle killed parent
- stabilize handle late comer
- stabilize handle conflicting
- stabilize get a --continue switch
- merge and update ignore extinct changeset in most case.
- new "troubled()" revset
- summary now reports troubles changesets
- new touch command
- new fold command
- new basic olog alias

- rebase refuse to work on public changeset again
- rebase explicitly state that there is nothing to rebase because everything is
  extinct() when that happen.
- amend now cleanly abort when --change switch is misused


0.7 -- 2012-08-06

- hook: work around insanely huge value in obsolete pushkey call
- pushkey: properly handle abort during obsolete markers push
- amend: wrap the whole process in a single transaction.
- evolve: tweak and add EOL to kill warning
- obsolete: fix doc, rebase no longer aborts with --keep
- obsolete/evolve: fix grammar in prerequisite messages
- evolve: avoid duplication in graft wrapper
- evolve: graft --continue is optional, test

0.6 -- 2012-07-31

- obsolete: change warning output to match mercurial core on
- qsync: ignore unexistent nodes
- make compat server both compatible with "dump" and "dump%i" version

0.5 -- 2012-07-16

- obsolete: Detect conflicting changeset!
- obsolete: adapt to core: marker are written in transaction now
- evolve: add the solve alias to obsolete
- doc: big update of terms and summary of the concept
- evolve: switch the official name for "kill" to prune


0.4.1 -- 2012-07-10

- [convert] properly exclude null successors from convertion
- Ignore buggy marker in newerversion


0.4.0 -- 2012-07-06

- obsolete: public changeset are no longer latecomer.
- obsolete: move to official binary format
- adapt for new mercurial
- obsolete: we are not compatible with 2.1 any more

0.3.0 -- 2012-06-27

- 
- obsolete:  Add "latecomer" error detection (stabilize does not handle resolution yet)
- evolve:    Introduce a new `uncommit` command to remove change from a changeset
- rebase:    allow the use of --keep again
- commit:    --amend option create obsolete marker (but still strip)
- obsolete:  fewer marker are created when collapsing revision.
- revset:    add, successors(), allsuccessors(), precursors(), allprecursors(),
             latecomer() and hidden()
- evolve:    add `prune` alias to `kill`.
- stabilize: clearly state that stabilize does nto handle conflict
- template:  add an {obsolete} keyword

0.2.0 -- 2012-06-20

- stabilize: improve choice of the next changeset to stabilize
- stabilize: improve resolution of several corner case
- rebase:    handle removing empty changesets
- rebase:    handle --collapse
- evolve:   add `obsolete` alias to `kill`
- evolve:   add `evolve` alias to `stabilize`