Mercurial > evolve
diff README.rst @ 5623:fe31179e1941 stable
branching: merge into stable in preparation for release
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Sat, 31 Oct 2020 17:25:32 +0800 |
parents | d77d61c9e5e9 |
children | 2068ff9ad72a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.rst Sat Oct 31 17:25:32 2020 +0800 @@ -0,0 +1,255 @@ +============================= +Mutable History For Mercurial +============================= + +Evolve Extension +================ + +This package supplies the evolve extension for Mercurial, + +**The full implementation of the changeset evolution concept is still in +progress.** Please subscribe to the `evolve-testers mailing list +<https://www.mercurial-scm.org/mailman/listinfo/evolve-testers>`_ to stay up to +date with changes. + +This extension: + +* enables the "`changeset evolution`_" feature of core Mercurial, + +* provides a set of commands to rewrite history in a distributed way, + +* issues various warning messages when "troubles" from changeset evolution + appear in your repository, + +* provides an ``hg evolve`` command to deal with such troubles, + +* improves performance of obsolescence marker exchange and discovery during + push and pull. + +.. _`changeset evolution`: https://www.mercurial-scm.org/wiki/ChangesetEvolution + +Documentation +------------- + +We recommend reading the documentation first. An online version is available +here: + + https://www.mercurial-scm.org/doc/evolution/ + +Source of the documentation can be found in ``docs/``. + +How to Install +============== + +Using Pip +--------- + +You can install the latest released version using pip:: + + $ pip install --user hg-evolve + +Then enable it in your hgrc:: + + $ hg config --edit # add these two lines: + [extensions] + evolve = + +From Source +----------- + +To install a local version from source:: + + $ hg clone https://www.mercurial-scm.org/repo/evolve/ + $ cd evolve + # optionally `hg update <target revision>` + $ pip install --user . + +Then enable it in your hgrc:: + + $ hg config --edit # add these two lines: + [extensions] + evolve = + +It's also possible to use evolve without installing it, in which case you will +need to provide the full path to ``hgext3rd/evolve/``, for example:: + + [extensions] + evolve = ~/evolve/hgext3rd/evolve + +Server-only Setup +================= + +It is possible to enable a smaller subset of the features aimed at servers that +simply serve repositories:: + + $ hg config --edit # add these two lines: + [extensions] + evolve.serveronly = + +It skips the additions of the new commands and local UI messages that might add +performance overhead. + +Extension Purpose +================= + +The goal of this extension is to provide an appropriate place for code and +concepts related to `changeset evolution`_ to mature. In this extension we +allow hackier code, unlocking quick experimentation and faster iterations. + +In addition, evolve extension supports a wide range of Mercurial versions, +allowing us to reach a larger user base for feedback. The extension is not tied +to the Mercurial release cycle and can release new features and bug fixes at a +higher rate if necessary. + +Once a concept is deemed ready, its implementation is moved into core +Mercurial. The maturation period helped us to get a clearer picture of what was +needed. During the upstreaming process, we can use this clearer picture to +clean up the code and upgrade it to an appropriate quality for core Mercurial. + +Python 3 Support +================ + +Mercurial announced official `support for Python 3`_ starting with its 5.2 +release. Since 9.3.0, evolve has official support for Python 3.6+. + +.. _`support for Python 3`: https://www.mercurial-scm.org/wiki/Python3 + +How to Contribute +================= + +Discussion happens on the #hg-evolve IRC on freenode_. + +.. _freenode: https://freenode.net/ + +Bugs are to be reported on the Mercurial's bug tracker (component: +`evolution`_). + +.. _evolution: https://bz.mercurial-scm.org/buglist.cgi?component=evolution&query_format=advanced&resolution=--- + +The recommended way to submit a patch is to create a Merge Request on +https://foss.heptapod.net/mercurial/evolve. To do so, create an account and +request access. You'll then be able to create a topic-based merge request. + +Alternatively, you can use the patchbomb extension to send email to `mercurial +devel <https://www.mercurial-scm.org/mailman/listinfo/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@mercurial-scm.org --flag evolve-ext --rev '<your patches>' + +For guidelines on the patch description, see the `official Mercurial guideline`_. + +.. _`official Mercurial guideline`: https://mercurial-scm.org/wiki/ContributingChanges#Patch_descriptions + +Please don't forget to update and run the tests when you fix a bug or add a +feature. To run the tests, you need a working copy of Mercurial, say in +$HGSRC:: + + $ cd tests + $ python $HGSRC/tests/run-tests.py + +When certain blocks of code need to cope with API changes in core Mercurial, +they should have comments in the ``hg <= x.y (commit hash)`` format. For +example, if a function needs another code path because of changes introduced in +02802fa87b74 that was first included in Mercurial 5.3, then the comment should +be:: + + # hg <= 5.2 (02802fa87b74) + +See also tests/test-check-compat-strings.t. + +Branch policy +------------- + +The evolve tests are highly impacted by changes in core Mercurial. To deal with +this, we use named branches. + +There are two main branches: "stable" and "default". Tests on these branches +are supposed to pass with the corresponding "default" and "stable" branch from +core Mercurial. The documentation is built from the tip of stable. + +In addition, we have compatibility branches to check tests on older versions of +Mercurial. They are the "mercurial-x.y" branches. They are used to apply +expected test changes only, no code changes should happen there. + +Test output changes from a changeset in core should add the following line to +their patch description:: + + CORE-TEST-OUTPUT-UPDATE: <changeset hash> + +Format-source config +==================== + +Format-source helps smooth out the pain of merging after auto-formatting. +Follow the installation instructions at the `format-source`_ repo. + +.. _`format-source`: https://foss.heptapod.net/mercurial/format-source + +Then update your per-repo config file:: + + $ hg config --local --edit # add these lines: + [extensions] + formatsource = + + [format-source] + byteify-strings = python3 ~/hg/contrib/byteify-strings.py --dictiter --treat-as-kwargs kwargs opts commitopts TROUBLES --allow-attr-methods + byteify-strings:mode.input = file + byteify-strings:mode.output = pipe + +Release Checklist +================= + +* make sure the tests are happy on all supported versions, + + You can use the `contrib/merge-test-compat.sh` to merge with the test + compatibility branches. + +* make sure there is no code difference between the compat branches and stable + (no diff within `hgext3rd/`), + +* update the `testedwith` variable for all extensions (remove '.dev'): + + - hgext3rd/evolve/metadata.py + - hgext3rd/topic/__init__.py + - hgext3rd/pullbundle.py + +* make sure the changelog is up to date, + +* add a date to the changelog entry for the target version, + +* update the `__version__` field of all relevant extensions: + + - hgext3rd/evolve/metadata.py + - hgext3rd/topic/__init__.py + - hgext3rd/pullbundle.py (if touched) + +* create a new Debian entry: + + - debchange --newversion x.y.z-1 "new upstream release" + - debchange --release + +* sanity check install and sdist targets of setup.py: + + - python setup.py install --home=$(mktemp -d) + - python setup.py sdist + +* tag the commit, + +* push and publish the tag, + +* upload the tarball to PyPI, + +* make an announcement on evolve-testers@mercurial-scm.org (possibly on + mercurial@mercurial-scm.org too), + +* bump versions of all extensions and add '.dev' (see existing commits as an + example): + + - hgext3rd/evolve/metadata.py + - hgext3rd/topic/__init__.py + - hgext3rd/pullbundle.py + + The version we use on the stable branch during development should be + `x.y.z+1.dev`. The version of the default branch should be `x.y+1.0.dev`. + +* merge stable into default.