This instance will be upgraded to Heptapod 0.26.0rc1 on 2021-10-26 at 14:00 UTC+2 (a few minutes of down time)

Commit 861212ea authored by Pierre-Yves David's avatar Pierre-Yves David
Browse files

topic: merge the topic extension in the evolve repository

There is a lot of synergy between the two concepts. Topic is expected to be able
to smooth multiple of evolution sharp edge. Having them both in the same
repository will make this collaboration easier.
syntax: glob
syntax: re
6c6bb7a23bb5125bf06da73265f039dd3447dafa 0.1.0
d3f20770b86a31dba56ae7b252089e12b34702da 0.2.0
c046b083a5e0b21af69027f31cee141800cf894b 0.3.0
9bbcd274689829d9239978236e16610688978233 0.4.0
4ecbaec1d664b1e6f8ebc78292e1ced77a8e69c0 0.4.1
7ef8ab8c6feadb8a9d9e13af144a17cb23e9a38d 0.5
4a5488c01a66be4729252175cea0ea739a88a540 0.6
18a0d96ed559089edf90206c469f3f8c26681c64 0.7
1b2757c1bd918509184f6c1d06b2329a847e31b0 0.7
b18b000363550f02f413aed008f8e306318c608c 1.0.0
ca5bb72d14aeb6e6053e3a53c064a2b7dc8010e5 1.0.1
b1bdcb4506defef0e857e2710633f7686d8034a5 1.0.2
5559e5a4b656978c592d364f242edc62369d7e84 1.0.2
c062edbcaf13135d0312fd2039deca74573ff4f0 1.1.0
22cacfce2a65ab965c6179ae862b148f4abc7d8a 1.1.0
d43e80504e55db9ad4826e860e50530103a27b0f 2.0.0
f9d305deeff3dba782e65faf4ef3fd1569995859 2.1.0
862b6b71a35836e81f090ba7229c2888e8ed2f9f 3.0.0
cdb52bbbe5b8770d5e68943b7e73bee4ba136ecc 3.1.0
c3ba8a965a7a173e388d84819e936ea9bae9797f 3.2.0
83882f2fbecba0b7e7f7e5d490b57db93bd7fa22 3.3.0
fc04758ea9f549684989ee673b04d9724756dc85 3.3.1
a03ea39aca2a66ea36817512d586dcbc99dbfe9b 3.3.2
0304fc2bab158658df53a8f4edd5aa300a9497d2 4.0.0
e914884fb7210d6350d94909cb25ebc602359680 4.0.1
4d5d101e878f6d6264a8e036b11afdf922c4ef94 4.1.0
c13b408c00066af78cda88734909c6f2f3505f76 5.0.0
51e1e962172c0178394cd36652d90181319f5416 5.0.1
0f30907852831f818bd0d01141b4ab7d8d71b821 5.0.1
dbd0733e584073d6a7b6dea933767853e9cfe845 5.0.2
bfe9be352453640233371cc7deb409a09decacf9 5.1.0
9b8628e0a142e0e094e27430c388e3c12ceba513 5.1.1
e886bc501796d53e0a19e608c6e5a6071191819e 5.1.2
c52c15100fb2d85c3525d6d085b3663ec4f90fe6 5.1.3
891c3ce894fa879532299910735bcc2a968245b1 5.1.4
1377f6a7f9ecb25e9b8885fce8f6f42e0d6f3f12 5.1.5
c79bdc8563509cd4e99946593d0b39af40271a30 5.2.0
00026533ff9f52733a45df008e3d56a5d3a8e76a 5.2.0
44a9dcb3fefcf8281ebe4e359e7dbb637512cf7f 5.2.0
c15d6168412f175568dac89e6ee1cd8434fef906 5.2.1
bd59cc2ee2039c370a0343f683488cde2a106565 5.3.0
b21ce82e6f7640c2b38506545968650227d67e9b 5.4.0
2ad40d972a740a613c4c559104166a015b37cac2 5.4.1
727c7211c810d304ebf92b32db7ecf697ce46ac6 5.5.0
99ede2d775458a236a46ad25a93aca473b676eee 5.6.0
99ede2d775458a236a46ad25a93aca473b676eee 5.6.0
e7b6e9c4a5d4317f56c2862910c569723b6ea71b 5.6.0
70694b2621ba9d919bc38303f8901e84caf5da0f 5.6.1
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
......@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
......@@ -303,9 +303,10 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
......@@ -335,5 +336,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
exclude contrib/
exclude hgext3rd/evolve/hack/*.py
exclude hgext3rd/evolve/
exclude Makefile
exclude tests/test-drop.t
exclude tests/test-inhibit.t
exclude tests/test-oldconvert.t
include COPYING
include docs/figures/hgview-example.png
include docs/makefile
include docs/*.py
include docs/README
include docs/*.rst
include docs/static/*.svg
include docs/tutorials/*.t
include hgext3rd/
include hgext3rd/evolve/
include hgext3rd/evolve/
include README
include tests/*.py
include tests/*.sh
include tests/*.t
prune debian
recursive-include docs/figures *.svg
VERSION=$(shell python --version)
@echo 'Commonly used make targets:'
@echo ' deb-prepare - prepare the build of a debian package'
all: help
python sdist --dist-dir ..
mv -f ../hg-evolve-$(VERSION).tar.gz ../mercurial-evolve_$(VERSION).orig.tar.gz
tar xf ../mercurial-evolve_$(VERSION).orig.tar.gz
rm -rf ../mercurial-evolve_$(VERSION).orig
mv hg-evolve-$(VERSION) ../mercurial-evolve_$(VERSION).orig
cp -r debian/ ../mercurial-evolve_$(VERSION).orig/
@cd ../mercurial-evolve_$(VERSION).orig && echo 'debian build directory ready at' `pwd`
# test targets
ifeq ($(HGROOT),)
$(error HGROOT is not set to the root of the hg source tree)
......@@ -17,6 +37,8 @@ all: help
cd tests && $(PYTHON) $(HGTESTS)/ $(TESTFLAGS)
# /!\ run outside of the compatibility branch output test will likely fails
cd tests && $(PYTHON) $(HGTESTS)/ $(TESTFLAGS) $@
......@@ -25,6 +47,7 @@ tests-%:
(cd $(HGROOT) ; $(MAKE) clean ) && \
cd tests && $(PYTHON) $(HGTESTS)/ $(TESTFLAGS)
all-version-tests: tests-3.7 tests-@
# build a script to extract declared version
all-version-tests: tests-@
.PHONY: tests all-version-tests
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/evolve-main/hgext/
We recommend reading the documentation first. An online version is
available here:
Or see the ``doc/`` directory for a local copy.
Topics are an experiment to see if maybe the workflow defined by git
branches and hg bookmarks is only partially what users want - perhaps
something that feels more like a traditional VCS branch is right, but
that it should "dissolve" upon being finished. This extension exists
to be a sandbox for that experimentation.
# install
Enable topics like any mercurial extension: download the source code to a
local directory, and add that directory to your `.hgrc`:
# help
See 'hg help -e topic' for a generic help.
See 'hg help topics' and 'hg help stack' for help on specific commands.
See the 'tests/test-topic-tutorial.t' file for a quick tutorial.
Bugs are to be reported on the mercurial's bug tracker (component: evolution):
Please 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
hg email --to --flag evolve-ext --rev '<your patches>'
See also
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, you need a working copy of Mercurial,
say in $HGSRC:
cd tests
python $HGSRC/tests/
(evolve's stable and default branches correspond to Mercurial's stable
and default branches. So to test evolve from default, you need
Mercurial on default.)
6.0.0 --
- drop compatibility for Mercurial < 3.8
- removed old (unpackaged) pushexperiment extension.
- move all extensions in the official 'hgext3rd' namespace package
5.6.1 -- 2017-02-28
- fix a crash that sometime happened when evolving merges.
5.6.0 -- 2017-02-01
- compatibility with Mercurial 4.1.
- improvement of prune error message.
- fold: require --from flag for folding revisions to working copy
- fix crash when trying to fold an empty revision set (issue5453)
- uncommit: preserve copy information of remaining files (issue5403)
5.5.0 -- 2016-10-30
- The {obsolete} template now yield "obsolete" or "".
- compatibility with Mercurial 4.0
- Fix erroneous manifest computation when solving 'bumped' changeset.
- split: avoid crash on empty commit (issue5191),
- next: improve locking to avoid issue with working copy parent (issue5244)
- prev: improve locking to avoid issue with working copy parent (issue5244)
- evolve: fix abort suggestion to include '.' in 'hg update -C .'
5.4.1 -- 2016-08-01
- compat with Mercurial 3.9
5.4.0 -- 2016-05-06
- Some collaboration with the topic experimental extensions,
- hg evolve --all with consider all troubles in your current topic,
- preserve 'topic' during evolve,
- 'next' and 'prev' restrict themself to the current topic by default,
- remove the dangerous 'kill' alias for 'prune' (because 'hg kill -1' without
the leading 'hg' will give you an hardtime)
- during 'hg evolve' skip unsupported merge instead of aborting
- various documentation fix and update
- hg summary now suggest 'hg evolve --continue when appropriate`
- compatibility with Mercurial 3.8 'hgext' namespace package.
- small improvement to the `hg split` instruction
- add a 'metaedit' command to rewrite changeset meta data.
5.3.0 -- 2016-02-11
- split: add a new command to split changesets,
- tests: drop our copy of '' use core one instead,
- bookmark: do all bookmark movement within a transaction.
- evolve: compatibility with Mercurial 3.7
- evolve: support merge with a single obsolete parent (hg-3.7+ only)
- evolve: prevent added file to be marked as unknown if evolve fails (issue4966)
- evolve: stop relying on graftstate file for save evolve state
(for `hg evolve --continue`)
- evolve: fix divergence resolution when it result in an empty commit
(issue4950) (hg-3.5+ only)
- no longer lock the repository for `hg parents` (issue4895)
- updated help for the `evolve` command
5.2.1 -- 2015-11-02
- add compatibility with Mercurial 3.6
- prune: fixed possible issue with lock and bookmark
- next/prev: fixed possible issue with lock and bookmark
- add some progress data during changesets discovery
- take advantage of dirstate/transaction collaboration
5.2.0 -- 2015-06-25
- evolve: gain a --rev option to control what revisions to evolve (issue4391)
- evolve: revision are processed in the order they stack on destination
- evolve: properly skip unstable revision with non-evolved unstable parent
- evolve: gain --unstable --divergent --bumped flag to select the trouble
- evolve: issue more useful error message and hint when evolve has nothing to
do as invocated.
- evolve: bare `hg evolve` commands now abort when multiple changesets could be
a target.
- evolve: `hg evolve --all` only evolve changeset that will end up as
descendant of the current working copy. The old behavior of `--all`
in now in `--all --any`.
- evolve: add a 'experimental.evolutioncommands' for fine grained commands
- next/prev: requires `--merge` to move with uncommitted changes
- next: significantly reword error messages
- next: add a --evolve flag to evolve aspiring children when on a head
5.1.5 -- 2015-06-23
- minor documentation cleanup
- support -i option for `hg amend` if commit supports it (3.4)
- fix the `debugrecordpruneparents` utility
- fix some possible crash during command abort (release nonexistent transaction)
- fix simple4server bug tracker URL
- compatibility with bookmark API change in future Mercurial 3.5
- prune no longer move the active bookmark for no reason (issue4559)
- evolve: stop reporting divergence base as missing when we actually have it
- significant performance improvement for all revsets.
- provide a hint of how to update to the successor of an obsolete working copy
5.1.4 -- 2015-04-23
- significant documentation update
- fix issue4616: pulling with bundle2 would crash if common marker when
discovered on non-served changesets.
- fix the debugobsrelsethashtree command
5.1.3 -- 2015-04-20
- discovery: fix misbehaving discovery across python version
- pull: properly install the bundle2 par generator
(avoid sending all markers for each pull)
- commit: avoid potential deadlock (acquires wlock before lock)
- graft: avoid potential deadlock (acquires wlock before lock)
5.1.2 -- 2015-04-01
- evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
5.1.1 -- 2015-03-05
- debugobsconvert: fix invalid markers during conversion
- discovery: cache some of the obs hash computation to improve performance (issue4518)
- revset: fix some crash with (issue4515)
5.1 -- 2015-01-30
- evolve: explicitly disable bookmark on evolve (issue4432)
- evolve: don't abort Mercurial on version mismatch
- compatibility with mercurial 3.3
5.0.2 -- 2014-12-14
- evolve: remove dependency to the rebase extension
5.0.1 -- 2014-11-25
- amend: fix --logfile argument
- evolve: preserve branch change when evolving
- evolve: fix potential crash while solving `bumped` changesets.
- uncommit: abort when rev specifies the current changeset
- evolve: various message improvement
- evolve: fix selection of changeset to evolve from the middle of a stack (issue4434)
- evolve: make next/prev only move bookmarks optionally
- evolve: tell user which "base of divergent changeset" is not found
5.0.0 -- 2014-10-22
- drop compat with Mercurial pre 3.2
- 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
- fix an issue where prune performance were quadratic with the number of
changesets pruned.
- pull: use discovery to pull less obsmarkers through bundle2
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 (requires 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
- 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 alias 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 nonexistent 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 conversion
- 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 not 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`
# topics
Topics are an experiment to see if maybe the workflow defined by git
branches and hg bookmarks is only partially what users want - perhaps
something that feels more like a traditional VCS branch is right, but
that it should "dissolve" upon being finished. This extension exists
to be a sandbox for that experimentation.
# install
Enable topics like any mercurial extension: download the source code to a
local directory, and add that directory to your `.hgrc`:
# help
See 'hg help -e topic' for a generic help.
See 'hg help topics' and 'hg help stack' for help on specific commands.
See the 'tests/test-topic-tutorial.t' file for a quick tutorial.
# Extension which prevent changeset to be turn public by push operation
# Copyright 2011 Logilab SA <>
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.