|
1 ============================= |
|
2 Mutable History For Mercurial |
|
3 ============================= |
|
4 |
|
5 This package supplies the ``evolve`` extension for Mercurial, which |
|
6 provides several commands to mutate history and deal with the |
|
7 resulting issues. |
|
8 |
|
9 It also: |
|
10 |
|
11 - enables the "changeset obsolescence" feature of Mercurial |
|
12 - issues several warning messages when trouble appears in your repository |
|
13 |
|
14 **This extension is experimental and not yet meant for production.** |
|
15 |
|
16 You can enable it by adding the line below to the ``extensions`` |
|
17 section of your hgrc:: |
|
18 |
|
19 evolve = PATH/TO/evolve-main/hgext/evolve.py |
|
20 |
|
21 We recommend reading the documentation first. An online version is |
|
22 available here: |
|
23 |
|
24 https://www.mercurial-scm.org/doc/evolution/ |
|
25 |
|
26 Or see the ``doc/`` directory for a local copy. |
|
27 |
|
28 topic |
|
29 ===== |
|
30 |
|
31 Topics are an experiment to see if maybe the workflow defined by git |
|
32 branches and hg bookmarks is only partially what users want - perhaps |
|
33 something that feels more like a traditional VCS branch is right, but |
|
34 that it should "dissolve" upon being finished. This extension exists |
|
35 to be a sandbox for that experimentation. |
|
36 |
|
37 # install |
|
38 |
|
39 Enable topics like any mercurial extension: download the source code to a |
|
40 local directory, and add that directory to your `.hgrc`: |
|
41 |
|
42 [extensions] |
|
43 topics=PATH/TO/evolve-main/hgext3rd/topic/ |
|
44 |
|
45 # help |
|
46 |
|
47 See 'hg help -e topic' for a generic help. |
|
48 See 'hg help topics' and 'hg help stack' for help on specific commands. |
|
49 See the 'tests/test-topic-tutorial.t' file for a quick tutorial. |
|
50 |
|
51 Contribute |
|
52 ========== |
|
53 |
|
54 Bugs are to be reported on the mercurial's bug tracker (component: evolution): |
|
55 https://bz.mercurial-scm.org/buglist.cgi?component=evolution&query_format=advanced&resolution=--- |
|
56 |
|
57 Please use the patchbomb extension to send email to mercurial devel. Please |
|
58 make sure to use the evolve-ext flag when doing so. You can use a command like |
|
59 this: |
|
60 |
|
61 hg email --to mercurial-devel@mercurial-scm.org --flag evolve-ext --rev '<your patches>' |
|
62 |
|
63 See also |
|
64 https://mercurial-scm.org/wiki/ContributingChanges#Patch_descriptions |
|
65 for guidelines on the patch description. |
|
66 |
|
67 Please don't forget to update and run the tests when you fix a bug or |
|
68 add a feature. To run the tests, you need a working copy of Mercurial, |
|
69 say in $HGSRC: |
|
70 |
|
71 cd tests |
|
72 python $HGSRC/tests/run-tests.py |
|
73 |
|
74 (evolve's stable and default branches correspond to Mercurial's stable |
|
75 and default branches. So to test evolve from default, you need |
|
76 Mercurial on default.) |
|
77 |
|
78 |
|
79 Changelog |
|
80 ========= |
|
81 |
|
82 6.0.0 -- |
|
83 |
|
84 - drop compatibility for Mercurial < 3.8 |
|
85 - removed old (unpackaged) pushexperiment extension. |
|
86 - move all extensions in the official 'hgext3rd' namespace package |
|
87 |
|
88 5.6.1 -- 2017-02-28 |
|
89 |
|
90 - fix a crash that sometime happened when evolving merges. |
|
91 |
|
92 5.6.0 -- 2017-02-01 |
|
93 |
|
94 - compatibility with Mercurial 4.1. |
|
95 - improvement of prune error message. |
|
96 - fold: require --from flag for folding revisions to working copy |
|
97 - fix crash when trying to fold an empty revision set (issue5453) |
|
98 - uncommit: preserve copy information of remaining files (issue5403) |
|
99 |
|
100 5.5.0 -- 2016-10-30 |
|
101 |
|
102 - The {obsolete} template now yield "obsolete" or "". |
|
103 - compatibility with Mercurial 4.0 |
|
104 - Fix erroneous manifest computation when solving 'bumped' changeset. |
|
105 - split: avoid crash on empty commit (issue5191), |
|
106 - next: improve locking to avoid issue with working copy parent (issue5244) |
|
107 - prev: improve locking to avoid issue with working copy parent (issue5244) |
|
108 - evolve: fix abort suggestion to include '.' in 'hg update -C .' |
|
109 |
|
110 5.4.1 -- 2016-08-01 |
|
111 |
|
112 - compat with Mercurial 3.9 |
|
113 |
|
114 5.4.0 -- 2016-05-06 |
|
115 |
|
116 - Some collaboration with the topic experimental extensions, |
|
117 - hg evolve --all with consider all troubles in your current topic, |
|
118 - preserve 'topic' during evolve, |
|
119 - 'next' and 'prev' restrict themself to the current topic by default, |
|
120 - remove the dangerous 'kill' alias for 'prune' (because 'hg kill -1' without |
|
121 the leading 'hg' will give you an hardtime) |
|
122 - during 'hg evolve' skip unsupported merge instead of aborting |
|
123 - various documentation fix and update |
|
124 - hg summary now suggest 'hg evolve --continue when appropriate` |
|
125 - compatibility with Mercurial 3.8 'hgext' namespace package. |
|
126 - small improvement to the `hg split` instruction |
|
127 - add a 'metaedit' command to rewrite changeset meta data. |
|
128 |
|
129 5.3.0 -- 2016-02-11 |
|
130 |
|
131 - split: add a new command to split changesets, |
|
132 - tests: drop our copy of 'run-tests.py' use core one instead, |
|
133 - bookmark: do all bookmark movement within a transaction. |
|
134 - evolve: compatibility with Mercurial 3.7 |
|
135 - evolve: support merge with a single obsolete parent (hg-3.7+ only) |
|
136 - evolve: prevent added file to be marked as unknown if evolve fails (issue4966) |
|
137 - evolve: stop relying on graftstate file for save evolve state |
|
138 (for `hg evolve --continue`) |
|
139 - evolve: fix divergence resolution when it result in an empty commit |
|
140 (issue4950) (hg-3.5+ only) |
|
141 - no longer lock the repository for `hg parents` (issue4895) |
|
142 - updated help for the `evolve` command |
|
143 |
|
144 5.2.1 -- 2015-11-02 |
|
145 |
|
146 - add compatibility with Mercurial 3.6 |
|
147 - prune: fixed possible issue with lock and bookmark |
|
148 - next/prev: fixed possible issue with lock and bookmark |
|
149 - add some progress data during changesets discovery |
|
150 - take advantage of dirstate/transaction collaboration |
|
151 |
|
152 5.2.0 -- 2015-06-25 |
|
153 |
|
154 - evolve: gain a --rev option to control what revisions to evolve (issue4391) |
|
155 - evolve: revision are processed in the order they stack on destination |
|
156 - evolve: properly skip unstable revision with non-evolved unstable parent |
|
157 - evolve: gain --unstable --divergent --bumped flag to select the trouble |
|
158 - evolve: issue more useful error message and hint when evolve has nothing to |
|
159 do as invocated. |
|
160 - evolve: bare `hg evolve` commands now abort when multiple changesets could be |
|
161 a target. |
|
162 - evolve: `hg evolve --all` only evolve changeset that will end up as |
|
163 descendant of the current working copy. The old behavior of `--all` |
|
164 in now in `--all --any`. |
|
165 - evolve: add a 'experimental.evolutioncommands' for fine grained commands |
|
166 enabling |
|
167 - next/prev: requires `--merge` to move with uncommitted changes |
|
168 - next: significantly reword error messages |
|
169 - next: add a --evolve flag to evolve aspiring children when on a head |
|
170 |
|
171 5.1.5 -- 2015-06-23 |
|
172 |
|
173 - minor documentation cleanup |
|
174 - support -i option for `hg amend` if commit supports it (3.4) |
|
175 - fix the `debugrecordpruneparents` utility |
|
176 - fix some possible crash during command abort (release nonexistent transaction) |
|
177 - fix simple4server bug tracker URL |
|
178 - compatibility with bookmark API change in future Mercurial 3.5 |
|
179 - prune no longer move the active bookmark for no reason (issue4559) |
|
180 - evolve: stop reporting divergence base as missing when we actually have it |
|
181 - significant performance improvement for all revsets. |
|
182 - provide a hint of how to update to the successor of an obsolete working copy |
|
183 parent. |
|
184 |
|
185 5.1.4 -- 2015-04-23 |
|
186 |
|
187 - significant documentation update |
|
188 - fix issue4616: pulling with bundle2 would crash if common marker when |
|
189 discovered on non-served changesets. |
|
190 - fix the debugobsrelsethashtree command |
|
191 |
|
192 5.1.3 -- 2015-04-20 |
|
193 |
|
194 - discovery: fix misbehaving discovery across python version |
|
195 - pull: properly install the bundle2 par generator |
|
196 (avoid sending all markers for each pull) |
|
197 - commit: avoid potential deadlock (acquires wlock before lock) |
|
198 - graft: avoid potential deadlock (acquires wlock before lock) |
|
199 |
|
200 5.1.2 -- 2015-04-01 |
|
201 |
|
202 - evolve: prevent a crash in httpclient_pushobsmarkers() when pushing |
|
203 |
|
204 5.1.1 -- 2015-03-05 |
|
205 |
|
206 - debugobsconvert: fix invalid markers during conversion |
|
207 - discovery: cache some of the obs hash computation to improve performance (issue4518) |
|
208 - revset: fix some crash with (issue4515) |
|
209 |
|
210 5.1 -- 2015-01-30 |
|
211 |
|
212 - evolve: explicitly disable bookmark on evolve (issue4432) |
|
213 - evolve: don't abort Mercurial on version mismatch |
|
214 - compatibility with mercurial 3.3 |
|
215 |
|
216 5.0.2 -- 2014-12-14 |
|
217 |
|
218 - evolve: remove dependency to the rebase extension |
|
219 |
|
220 5.0.1 -- 2014-11-25 |
|
221 |
|
222 - amend: fix --logfile argument |
|
223 - evolve: preserve branch change when evolving |
|
224 - evolve: fix potential crash while solving `bumped` changesets. |
|
225 - uncommit: abort when rev specifies the current changeset |
|
226 - evolve: various message improvement |
|
227 - evolve: fix selection of changeset to evolve from the middle of a stack (issue4434) |
|
228 - evolve: make next/prev only move bookmarks optionally |
|
229 - evolve: tell user which "base of divergent changeset" is not found |
|
230 |
|
231 |
|
232 |
|
233 5.0.0 -- 2014-10-22 |
|
234 |
|
235 - drop compat with Mercurial pre 3.2 |
|
236 - uncommit: add a --rev argument |
|
237 - evolve: add a `working directory now at xxxxxxxxxx` message |
|
238 - evolve: automatically translate obsolete hashes when evolving |
|
239 - properly skip marker creating if patch apply cleanly |
|
240 - prune: work around a massive slowdown from lazy revset |
|
241 - grab: "fix" the grab alias on window |
|
242 |
|
243 - fix an issue where prune performance were quadratic with the number of |
|
244 changesets pruned. |
|
245 - pull: use discovery to pull less obsmarkers through bundle2 |
|
246 |
|
247 |
|
248 4.1.0 -- 2014-08-08 |
|
249 |
|
250 - amend: add -D/--current-date option |
|
251 - amend: add -U/--current-user option |
|
252 - evolve: add a --tool option |
|
253 - evolve: add a --confirm option |
|
254 - mark "commit -o", "graft -o" and "graft -O" as deprecated since they are |
|
255 unlikely to eventually make it into core. |
|
256 - push obsmarkers and phases in the same transaction than changesets |
|
257 (when using hg >= 3.1 and bundle2-exp is enabled) |
|
258 - hide message about the obsolescence marker exchange behind a |
|
259 `experimental.verbose-obsolescence-exchange` variable (default to False). |
|
260 |
|
261 4.0.1 -- 2014-08-08 |
|
262 |
|
263 - createmarkers() accept an iterable (for compat with other extension) |
|
264 |
|
265 4.0.0 -- 2014-06-03 |
|
266 |
|
267 - require Mercurial version 3.0.1 or above |
|
268 - some compatibility fixes with future 3.1.0 |
|
269 - deprecated `gup` and `gdown` in favor of prev and next |
|
270 - record parent of pruned parent at prune time |
|
271 - added a `debugobsstorestat` command to gather data on obsmarker content. |
|
272 - added a `debugrecordpruneparents` command to upgrade existing prune marker |
|
273 with parent information. Please run it once per repo after upgrading. |
|
274 - improvement to obsolescence marker exchange: |
|
275 - added progress when pushing obsmarkers |
|
276 - added multiple output during obsolescence markers exchange |
|
277 - only push markers relevant to pushed subset |
|
278 - add a new experimental way to exchange marker (when server support): |
|
279 - added progress when pulling obsmarkers |
|
280 - only pull markers relevant to pulled subset |
|
281 - avoid exchanging common markers in some case |
|
282 - use bundle2 as transport when available. |
|
283 - add a hook related to the new commands |
|
284 |
|
285 3.3.2 -- 2014-05-14 |
|
286 |
|
287 - fix a bug where evolve were creating changeset with 2 parents on windows |
|
288 (fix issues #16, #35 and #42) |
|
289 - adds a --obsolete flag to import (requires Mercurial 3.0) |
|
290 - prune: update to successor rather than parent when pruning '.' with -s |
|
291 - fold: add missing --message and --logfile option |
|
292 - fold: add squash as an alias |
|
293 |
|
294 3.3.1 -- 2014-04-23 |
|
295 |
|
296 - various language fix |
|
297 - active bookmark now move when using prev/next (#37) |
|
298 - fix some preservation of rename information on evolve (#33) |
|
299 - abort when evolve tries to move a node on top of itself (will helps on the #35 front) |
|
300 - fold: enable --date and --user options |
|
301 |
|
302 3.3.0 -- 2014-03-04 |
|
303 |
|
304 - raise Mercurial's minimal requirement to 2.7 |
|
305 - drop `latercomer` and `conflicting` compatibility. Those old alias are |
|
306 deprecated for a long time now. |
|
307 - add verbose hint about how to handle corner case by hand. |
|
308 This should help people until evolve is able to to it itself. |
|
309 - removed the qsync extension. The only user I knew about (logilab) is not |
|
310 using it anymore. It not compatible with coming Mercurial version 2.9. |
|
311 - add progress indicator for long evolve command |
|
312 - report troubles creation from `hg import` |
|
313 |
|
314 3.2.0 -- 2013-11-15 |
|
315 |
|
316 - conform to the Mercurial custom of lowercase messages |
|
317 - added a small extension to experiment with obsolescence marker push |
|
318 - amend: drop the deprecated note option |
|
319 - amend: use core mechanism for amend (fix multiple bugs) |
|
320 - parents command: add "working directory parent is obsolete" message |
|
321 - evolve command: allow updating to the successor if the parent is |
|
322 obsolete |
|
323 - gdown and gup commands: add next and previous alias, respectively |
|
324 - make grab aliases compatible with Mercurial 2.8 |
|
325 - Tested with 2.6, 2.7 and 2.8 |
|
326 |
|
327 3.1.0 -- 2013-02-11 |
|
328 |
|
329 - amend: drop deprecated --change option for amend |
|
330 - alias: add a grab alias to be used instead of graft -O |
|
331 - touch: add a --duplicate option to *not* obsolete the old version |
|
332 - touch: fix touching multiple revision at the same time |
|
333 - evolve: add a --all option |
|
334 - prune: various minor improvements |
|
335 - prune: add option to prune a specific bookmark |
|
336 - prune: add -u and -d option to control metadata |
|
337 |
|
338 3.0.0 -- 2013-02-02 |
|
339 |
|
340 - compatibility with 2.5 |
|
341 |
|
342 2.2.0 -- |
|
343 |
|
344 - make evolve smarter at picking next troubled to solved without --any |
|
345 |
|
346 2.1.0 -- 2012-12-03 |
|
347 |
|
348 - qsync fixes |
|
349 - have qfold ask for commit message |
|
350 |
|
351 2.0.0 -- 2012-10-26 |
|
352 |
|
353 - compat with mercurial 2.4 |
|
354 |
|
355 1.1.0 -- 2012-10-26 |
|
356 |
|
357 - fix troubles creation reporting from rebase |
|
358 - rename latecomer to bumped |
|
359 - renamed conflicting to divergent |
|
360 - smarter divergent handling |
|
361 |
|
362 1.0.2 -- 2012-09-19 |
|
363 |
|
364 - fix hg fold bug |
|
365 - fix hg pull --rebase |
|
366 - fix detection of conflict with external tools |
|
367 - adapt to core movement (caches and --amend) |
|
368 |
|
369 1.0.1 -- 2012-08-31 |
|
370 |
|
371 - documentation improvement |
|
372 - fix a performance bug with hgweb |
|
373 |
|
374 1.0 -- 2012-08-29 |
|
375 |
|
376 - Align with Mercurial version 2.3 (drop 2.2 support). |
|
377 - stabilize handle killed parent |
|
378 - stabilize handle late comer |
|
379 - stabilize handle conflicting |
|
380 - stabilize get a --continue switch |
|
381 - merge and update ignore extinct changeset in most case. |
|
382 - new "troubled()" revset |
|
383 - summary now reports troubles changesets |
|
384 - new touch command |
|
385 - new fold command |
|
386 - new basic olog alias |
|
387 |
|
388 - rebase refuse to work on public changeset again |
|
389 - rebase explicitly state that there is nothing to rebase because everything is |
|
390 extinct() when that happen. |
|
391 - amend now cleanly abort when --change switch is misused |
|
392 |
|
393 |
|
394 0.7 -- 2012-08-06 |
|
395 |
|
396 - hook: work around insanely huge value in obsolete pushkey call |
|
397 - pushkey: properly handle abort during obsolete markers push |
|
398 - amend: wrap the whole process in a single transaction. |
|
399 - evolve: tweak and add EOL to kill warning |
|
400 - obsolete: fix doc, rebase no longer aborts with --keep |
|
401 - obsolete/evolve: fix grammar in prerequisite messages |
|
402 - evolve: avoid duplication in graft wrapper |
|
403 - evolve: graft --continue is optional, test |
|
404 |
|
405 0.6 -- 2012-07-31 |
|
406 |
|
407 - obsolete: change warning output to match mercurial core on |
|
408 - qsync: ignore nonexistent nodes |
|
409 - make compat server both compatible with "dump" and "dump%i" version |
|
410 |
|
411 0.5 -- 2012-07-16 |
|
412 |
|
413 - obsolete: Detect conflicting changeset! |
|
414 - obsolete: adapt to core: marker are written in transaction now |
|
415 - evolve: add the solve alias to obsolete |
|
416 - doc: big update of terms and summary of the concept |
|
417 - evolve: switch the official name for "kill" to prune |
|
418 |
|
419 |
|
420 0.4.1 -- 2012-07-10 |
|
421 |
|
422 - [convert] properly exclude null successors from conversion |
|
423 - Ignore buggy marker in newerversion |
|
424 |
|
425 |
|
426 0.4.0 -- 2012-07-06 |
|
427 |
|
428 - obsolete: public changeset are no longer latecomer. |
|
429 - obsolete: move to official binary format |
|
430 - adapt for new mercurial |
|
431 - obsolete: we are not compatible with 2.1 any more |
|
432 |
|
433 0.3.0 -- 2012-06-27 |
|
434 |
|
435 - obsolete: Add "latecomer" error detection (stabilize does not handle resolution yet) |
|
436 - evolve: Introduce a new `uncommit` command to remove change from a changeset |
|
437 - rebase: allow the use of --keep again |
|
438 - commit: --amend option create obsolete marker (but still strip) |
|
439 - obsolete: fewer marker are created when collapsing revision. |
|
440 - revset: add, successors(), allsuccessors(), precursors(), allprecursors(), |
|
441 latecomer() and hidden() |
|
442 - evolve: add `prune` alias to `kill`. |
|
443 - stabilize: clearly state that stabilize does not handle conflict |
|
444 - template: add an {obsolete} keyword |
|
445 |
|
446 0.2.0 -- 2012-06-20 |
|
447 |
|
448 - stabilize: improve choice of the next changeset to stabilize |
|
449 - stabilize: improve resolution of several corner case |
|
450 - rebase: handle removing empty changesets |
|
451 - rebase: handle --collapse |
|
452 - evolve: add `obsolete` alias to `kill` |
|
453 - evolve: add `evolve` alias to `stabilize` |
|
454 |
|
455 |