Mercurial > evolve
changeset 4660:b62ed7c69561
branching: merge with stable
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 04 Jun 2019 11:08:44 +0200 |
parents | 4d2f8c99f23a (current diff) 89c1b739fabe (diff) |
children | df41605bd26c 194adaeb84e8 |
files | hgext3rd/evolve/templatekw.py tests/test-evolve-orphan-corner-cases.t tests/test-evolve-public-content-divergent-corner-cases.t tests/test-evolve-public-content-divergent-discard.t tests/test-evolve-public-content-divergent-main.t tests/test-evolve-public-content-divergent.t |
diffstat | 94 files changed, 4248 insertions(+), 4226 deletions(-) [+] |
line wrap: on
line diff
--- a/CHANGELOG Sat Jun 01 02:30:14 2019 +0200 +++ b/CHANGELOG Tue Jun 04 11:08:44 2019 +0200 @@ -1,6 +1,24 @@ Changelog ========= +8.6.0 - in progress +------------------- + + * evolve: preserve the working directory after resolving instability (BC) + (use `hg next` or `hg evolve --update` to get the old behavior) + * evolve: evolve all relevant revision by default (BC) + (use --no-all to evolve only one) + * evolve: drop compatibility with 4.4 + * evolve: reinstalled compatibility with narrow repositories, + * evolve: use "unstable" instead of "troubled" + * evolve: run multiple stabilisation in the same transaction + * evolve: improve users merging during content-divergence + * obsdiscovery: drop support for deprecated discovery protocol `obshash` + (Make sure your servers are configured to use the obshashrange one. + It is available in evolve 7.2 and above.) + * topic: drop the b# alias. It conflicted with normal hashes. + * topic: add a `experimental.topic.allow-publish` option (default: True) + 8.5.1 -- 2019-04-23 -------------------
--- a/docs/concepts.rst Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/concepts.rst Tue Jun 04 11:08:44 2019 +0200 @@ -92,8 +92,8 @@ think of the traditional parent/child DAG as the first derivative of your source code, and the obsolescence DAG as the second derivative.) -Troubled changesets (unstable, bumped, divergent) -------------------------------------------------- +Unstable changesets (orphan, phase-divergent, content-divergent) +---------------------------------------------------------------- Evolving history can introduce problems that need to be solved. For example, if you prune a changeset *P* but not its descendants, those @@ -102,7 +102,7 @@ at the same time. But Mercurial does not push obsolete changesets like *P*, so it cannot push the descendants of *P*. Any non-obsolete changeset that is a descendant of an obsolete changeset is said to be -*unstable*. +an *orphan*. [diagram: obsolete cset with non-obsolete descendant] @@ -116,7 +116,7 @@ phase and therefore mutable. So Bob amends *C*, which marks it obsolete and replaces it with *C'*. When he is back online and pulls from the public repository, Mercurial learns that *C* is public, which -means it cannot be obsolete. We say that *C'* is *bumped*, since it is +means it cannot be obsolete. We say that *C'* is *phase-divergent*, since it is the successor of a public changeset. .. _`share mutable history`: sharing.html @@ -125,25 +125,25 @@ two people have bought tickets for the same seat on a plane and they both show up at the airport, only one of them gets on the plane. The passenger who is left behind in the airport terminal has been -"bumped".) +"phase-divergent".) The third sort of trouble is when Alice and Bob both amend the same changeset *C* to have different successors. When this happens, the -successors are both called *divergent* (unless one of them is in -public phase; only mutable changesets are divergent). +successors are both called *content-divergent* (unless one of them is in +public phase; only mutable changesets are content-divergent). -The collective term for unstable, bumped, and divergent changeset is -*troubled*:: +The collective term for orphan, phase-divergent, and content-divergent +changeset is *unstable*:: - troubled = unstable ∪ bumped ∪ divergent + unstable = orphan ∪ phase-divergent ∪ content-divergent -It is possible for a changeset to be in any of the troubled categories -at the same time: it might be unstable and divergent, or bumped and -divergent, or whatever. +It is possible for a changeset to be in any of the unstable categories +at the same time: it might be an orphan and content-divergent, or +phase-divergent and content-divergent, or whatever. - [diagram: Venn diagram of troubled changesets, showing overlap] + [diagram: Venn diagram of unstable changesets, showing overlap] -The presence of troubled changesets indicates the need to run ``hg +The presence of unstable changesets indicates the need to run ``hg evolve``. Hidden (and visible) changesets @@ -192,7 +192,7 @@ hidden = hideable ∖ ancestors((repo ∖ hideable) ∪ blockers) This will probably be clearer with a worked example. First, here's a -repository with some obsolete changesets, some troubled changesets, +repository with some obsolete changesets, some unstable changesets, one bookmark, a working copy, and some hidden changesets:: x-x
--- a/docs/evolve-faq.rst Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/evolve-faq.rst Tue Jun 04 11:08:44 2019 +0200 @@ -138,20 +138,20 @@ You can still use rebase to move a whole segment of the changeset graph together. .. warning:: Beware that rebasing changesets already obsolete will likely result in - divergent versions of the changesets. + content-divergent versions of the changesets. -Resolve history troubles: ``evolve`` ------------------------------------- +Resolve history instability: ``evolve`` +--------------------------------------- When you rewrite (amend) a changeset with children without rewriting -those children you create *unstable* changesets and *suspended +those children you create *orphan* changesets and *suspended obsolete* changesets. When you are finished amending a given changeset, you will want to declare it stable, in other words rebase its former descendants on its newest version. -You can also use evolve to solve `bumped` and `divergent` changeset/ +You can also use evolve to solve `phase-divergent` and `content-divergent` changeset/ Fix my history afterward: ``prune -n`` @@ -170,7 +170,7 @@ :: [alias] - odiff = diff --rev 'limit(precursors(.),1)' --rev . + odiff = diff --rev 'limit(predecessors(.),1)' --rev . View obsolete markers ---------------------
--- a/docs/figures/figure-ug01.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug01.svg Tue Jun 04 11:08:44 2019 +0200 @@ -15,7 +15,7 @@ height="150" id="svg2" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug01.svg"> <defs id="defs4"> @@ -180,8 +180,10 @@ visible="true" enabled="true" snapvisiblegridlinesonly="true" - originx="0.078084198px" - originy="-2924.5747px" /> + originx="0.078084198" + originy="-2924.5747" + spacingx="1" + spacingy="1" /> </sodipodi:namedview> <metadata id="metadata7"> @@ -211,13 +213,12 @@ id="rect2987" style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217" y="252.23067" x="390.00699" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:12px;line-height:1.25;font-family:sans-serif;stroke:none" y="252.23067" x="390.00699" id="tspan5219" @@ -235,19 +236,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8" y="13.894781" x="56.792801" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156" sodipodi:role="line" x="56.792801" - y="13.894781">1</tspan></text> + y="13.894781" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">1</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:0.99999791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" d="m 21.981735,9.6755275 38.518266,4.2e-6" id="path8263" inkscape:connector-type="polyline" @@ -258,16 +259,16 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="46.543751" y="42.826393" id="text5217-8-0" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan8594" x="46.543751" - y="42.826393">hg commit --amend</tspan></text> + y="42.826393" + style="font-size:12px;line-height:1.25;font-family:monospace">hg commit --amend</tspan></text> <path style="fill:none;stroke:#808080;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="m 36.655932,74.035228 3.649333,6.320665 3.711171,-6.427764" @@ -298,13 +299,12 @@ id="rect2987-41" style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-7" y="252.23067" x="390.00699" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:12px;line-height:1.25;font-family:sans-serif;stroke:none" y="252.23067" x="390.00699" id="tspan5219-3" @@ -322,16 +322,16 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-7" y="121.11791" x="65.68634" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="121.11791" x="65.68634" id="tspan3914" - sodipodi:role="line">1'</tspan></text> + sodipodi:role="line" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">1'</tspan></text> </g> <g id="g3969" @@ -355,20 +355,20 @@ style="fill:none;stroke:#686868;stroke-width:0.68990517;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="star" /> <text - sodipodi:linespacing="125%" id="text3957" y="84.170212" x="69.021271" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="84.170212" x="69.021271" id="tspan3959" - sodipodi:role="line">poof!</tspan></text> + sodipodi:role="line" + style="font-size:10px;line-height:1.25;font-family:sans-serif">poof!</tspan></text> </g> <path - style="fill:none;stroke:url(#linearGradient3986);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 1;stroke-dashoffset:0;marker-mid:none;marker-end:none" - d="m 21.990865,103.39791 57.925771,-0.005" + style="fill:none;stroke:url(#linearGradient3986);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1;marker-mid:none;marker-end:none" + d="m 21.990865,103.39783 57.926859,-0.006" id="path3974" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -388,13 +388,13 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="46.760448" y="58.872295" - id="text5223" - sodipodi:linespacing="125%"><tspan + id="text5223"><tspan sodipodi:role="line" id="tspan5227" x="46.760448" - y="58.872295">(destructive, not using evolve)</tspan></text> + y="58.872295" + style="font-size:10px;line-height:1.25;font-family:sans-serif">(destructive, not using evolve)</tspan></text> </svg>
--- a/docs/figures/figure-ug02.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug02.svg Tue Jun 04 11:08:44 2019 +0200 @@ -15,7 +15,7 @@ height="250" id="svg2" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug02.svg"> <defs id="defs4"> @@ -206,14 +206,14 @@ inkscape:pageshadow="2" inkscape:zoom="3.7318511" inkscape:cx="113.8845" - inkscape:cy="138.3052" + inkscape:cy="132.4403" inkscape:document-units="px" inkscape:current-layer="svg2" showgrid="false" - inkscape:window-width="974" - inkscape:window-height="1048" - inkscape:window-x="104" - inkscape:window-y="103" + inkscape:window-width="1814" + inkscape:window-height="950" + inkscape:window-x="68" + inkscape:window-y="45" inkscape:window-maximized="0" showguides="false" inkscape:snap-global="false" @@ -228,8 +228,10 @@ visible="true" enabled="true" snapvisiblegridlinesonly="true" - originx="0.078088198px" - originy="-2937.8154px" /> + originx="0.078088198" + originy="-2937.8154" + spacingx="1" + spacingy="1" /> </sodipodi:namedview> <metadata id="metadata7"> @@ -259,13 +261,12 @@ id="rect2987" style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217" y="252.23067" x="390.00699" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:12px;line-height:1.25;font-family:sans-serif;stroke:none" y="252.23067" x="390.00699" id="tspan5219" @@ -283,19 +284,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8" y="13.894781" x="56.792801" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156" sodipodi:role="line" x="56.792801" - y="13.894781">1</tspan></text> + y="13.894781" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">1</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:0.99999791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" d="m 21.981735,10.916236 38.51827,1e-6" id="path8263" inkscape:connector-type="polyline" @@ -315,13 +316,12 @@ id="rect2987-41" style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-7" y="252.23067" x="390.00699" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:12px;line-height:1.25;font-family:sans-serif;stroke:none" y="252.23067" x="390.00699" id="tspan5219-3" @@ -339,19 +339,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-7" y="144.84122" x="67.447083" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="144.84122" x="67.447083" id="tspan3914" - sodipodi:role="line">3</tspan></text> + sodipodi:role="line" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">2</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6)" d="m 18.903026,154.7407 44.684935,52.70603" id="path5012" inkscape:connector-type="polyline" @@ -365,27 +365,27 @@ transform="translate(1.9995778e-6,23.240701)"> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-0" y="42.826412" x="46.543755" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="42.826412" x="46.543755" id="tspan8594" - sodipodi:role="line">hg commit --amend</tspan></text> + sodipodi:role="line" + style="font-size:12px;line-height:1.25;font-family:monospace">hg commit --amend</tspan></text> <text - sodipodi:linespacing="125%" id="text5223" y="54.872299" x="46.760452" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="54.872299" x="46.760452" id="tspan5227" - sodipodi:role="line">(safe, using evolve)</tspan></text> + sodipodi:role="line" + style="font-size:10px;line-height:1.25;font-family:sans-serif">(safe, using evolve)</tspan></text> </g> <g id="g4022" @@ -399,19 +399,19 @@ style="fill:none;stroke:#404040;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-9" y="107.76683" x="67.426567" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#404040;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#404040;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-7" sodipodi:role="line" x="67.426567" - y="107.76683">1</tspan></text> + y="107.76683" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">1</tspan></text> </g> <path - style="fill:none;stroke:#404040;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none;marker-end:url(#Arrow2Mend);display:inline" + style="display:inline;fill:none;stroke:#404040;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94117647;marker-end:url(#Arrow2Mend)" d="m 21.991109,145.71407 38.508895,0" id="path8263-2" inkscape:connector-type="polyline" @@ -422,54 +422,18 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="122.10091" y="140.49216" - id="text4115" - sodipodi:linespacing="125%"><tspan + id="text4115"><tspan sodipodi:role="line" id="tspan4117" x="122.10091" - y="140.49216" /></text> - <g - id="g5472" - transform="translate(1.9995778e-6,1.240699)"> - <rect - y="135.44673" - x="120.5" - height="18.05327" - width="21.481739" - id="rect2987-4-0-0" - style="fill:none;stroke:#404040;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0" /> - <text - inkscape:transform-center-x="2.6044813" - transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" - id="text5217-8-9-2" - y="148.84123" - x="127.4267" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#404040;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" - xml:space="preserve"><tspan - id="tspan6156-7-4" - sodipodi:role="line" - x="127.4267" - y="148.84123">2</tspan></text> - </g> - <text - xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" - x="140.76923" - y="136.65099" - id="text4119" - sodipodi:linespacing="125%"><tspan - sodipodi:role="line" - id="tspan4121" - x="140.76923" - y="136.65099" - style="font-size:8px;font-weight:bold;-inkscape-font-specification:Sans Bold">T</tspan></text> + y="140.49216" + style="font-size:10px;line-height:1.25;font-family:sans-serif"> </tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM)" - d="m 71.240874,154.7407 0,52.70603" + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" + d="m 71.240874,154.7407 v 52.70603" id="path4123" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -479,56 +443,37 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" - x="175.07857" - y="112.16577" - id="text4787" - sodipodi:linespacing="100%"><tspan - sodipodi:role="line" - x="175.07857" - y="112.16577" - id="tspan4791">temporary</tspan><tspan - sodipodi:role="line" - x="175.07857" - y="122.16577" - id="tspan4795">amend</tspan><tspan - sodipodi:role="line" - x="175.07857" - y="132.16577" - id="tspan4797">commit</tspan></text> - <text - xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="51.716301" y="112.74194" - id="text4799" - sodipodi:linespacing="125%"><tspan + id="text4799"><tspan sodipodi:role="line" id="tspan4801" x="51.716301" - y="112.74194">obsolete (and hidden)</tspan></text> + y="112.74194" + style="font-size:10px;line-height:1.25;font-family:sans-serif">obsolete (and hidden)</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="94.602974" y="171.26965" - id="text4803" - sodipodi:linespacing="125%"><tspan + id="text4803"><tspan sodipodi:role="line" id="tspan4805" x="94.602974" - y="171.26965">precursor</tspan></text> + y="171.26965" + style="font-size:10px;line-height:1.25;font-family:sans-serif">predecessor</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="94.461372" y="189.68568" - id="text4807" - sodipodi:linespacing="125%"><tspan + id="text4807"><tspan sodipodi:role="line" id="tspan4809" x="94.461372" - y="189.68568">successor</tspan></text> + y="189.68568" + style="font-size:10px;line-height:1.25;font-family:sans-serif">successor</tspan></text> <path style="fill:none;stroke:#7d7d7d;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="M 92.837054,168.99918 C 80.990247,168.9329 79.499863,165.60079 77.196029,156.38545" @@ -540,20 +485,10 @@ id="path5263" inkscape:connector-curvature="0" /> <path - style="fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" - d="m 173.06037,115.51697 c -10.90807,9.681 -3.90454,20.30854 -25.22746,18.66832" - id="path5689" - inkscape:connector-curvature="0" /> - <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend-2);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 97.377997,116.02152 c 1.765752,12.09244 -25.911587,2.23195 -29.768403,17.65922" id="path5893" inkscape:connector-curvature="0" /> - <path - style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend-2);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - d="m 99.093394,115.78744 c -1.76575,12.09244 25.911586,2.23195 29.768406,17.65922" - id="path5893-7" - inkscape:connector-curvature="0" /> <g id="g6493" transform="translate(1.9995778e-6,1.240701)"> @@ -577,14 +512,4 @@ inkscape:connector-curvature="0" /> </g> </g> - <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Arrow2Mend-2)" - d="m 81.981743,145.71407 38.518257,0" - id="path3069" - inkscape:connector-type="polyline" - inkscape:connector-curvature="0" - inkscape:connection-start="#g4022" - inkscape:connection-start-point="d4" - inkscape:connection-end="#g5472" - inkscape:connection-end-point="d4" /> </svg>
--- a/docs/figures/figure-ug03.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug03.svg Tue Jun 04 11:08:44 2019 +0200 @@ -15,7 +15,7 @@ height="150" id="svg2" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug03.svg"> <defs id="defs4"> @@ -172,8 +172,10 @@ visible="true" enabled="true" snapvisiblegridlinesonly="true" - originx="0.078084198px" - originy="-2924.5747px" /> + originx="0.078084198" + originy="-2924.5747" + spacingx="1" + spacingy="1" /> </sodipodi:namedview> <metadata id="metadata7"> @@ -206,17 +208,16 @@ y="0.64889121" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="7.4264359" y="14.043668" id="text5217" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan5219" x="7.4264359" y="14.043668" - style="stroke:none">3</tspan></text> + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif;stroke:none">3</tspan></text> </g> <g id="g6612"> @@ -229,39 +230,39 @@ y="0.64889765" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="67.426567" y="14.043674" id="text5217-8" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan y="14.043674" x="67.426567" sodipodi:role="line" - id="tspan3900">4</tspan></text> + id="tspan3900" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">4</tspan></text> </g> <path inkscape:connector-curvature="0" inkscape:connector-type="polyline" id="path8263" d="m 21.981735,9.6755275 38.518266,4.2e-6" - style="fill:none;stroke:#000000;stroke-width:0.99999791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);display:inline" /> + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" /> </g> <g id="g6397" transform="translate(1.2139669,17.353636)"> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-0" y="53.910118" x="46.543751" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="53.910118" x="46.543751" id="tspan8594" - sodipodi:role="line">hg prune .</tspan></text> + sodipodi:role="line" + style="font-size:12px;line-height:1.25;font-family:monospace">hg prune .</tspan></text> <g id="g6372"> <path @@ -296,14 +297,13 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-9" y="115.1729" x="7.4264359" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan3904" - style="stroke:none" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif;stroke:none" y="115.1729" x="7.4264359" sodipodi:role="line">3</tspan></text> @@ -319,20 +319,20 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999791,1.99999583;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-2" y="115.1729" x="67.426567" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan3908" sodipodi:role="line" x="67.426567" - y="115.1729">4</tspan></text> + y="115.1729" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">4</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:0.99999791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);display:inline" - d="m 21.981736,110.80498 38.518268,0" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999791px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" + d="M 21.981736,110.80498 H 60.500004" id="path8263-2" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -342,48 +342,47 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="120.84515" y="108.62753" - id="text4799" - sodipodi:linespacing="100%"><tspan + id="text4799"><tspan sodipodi:role="line" id="tspan4801" x="120.84515" y="108.62753" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Sans;-inkscape-font-specification:Sans Italic">obsolete,</tspan><tspan + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;writing-mode:lr-tb;text-anchor:start">obsolete,</tspan><tspan sodipodi:role="line" x="120.84515" y="118.62753" id="tspan4155" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Sans;-inkscape-font-specification:Sans Italic">hidden,</tspan><tspan + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;writing-mode:lr-tb;text-anchor:start">hidden,</tspan><tspan sodipodi:role="line" x="120.84515" y="128.62753" id="tspan4157" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Sans;-inkscape-font-specification:Sans Italic">no successors</tspan></text> + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;writing-mode:lr-tb;text-anchor:start">no successors</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="87.810272" y="8.7751856" - id="text4353" - sodipodi:linespacing="125%"><tspan + id="text4353"><tspan sodipodi:role="line" id="tspan4355" x="87.810272" - y="8.7751856">working dir</tspan></text> + y="8.7751856" + style="font-size:10px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="20.528839" y="144.07831" - id="text4353-8" - sodipodi:linespacing="125%"><tspan + id="text4353-8"><tspan sodipodi:role="line" id="tspan4355-6" x="20.528839" - y="144.07831">working dir</tspan></text> + y="144.07831" + style="font-size:10px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;marker-end:url(#Arrow2Mend-7)" d="m 20.030453,140.89525 c -8.427525,-2.11036 -7.688456,-10.62543 -7.688456,-18.00718"
--- a/docs/figures/figure-ug04.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug04.svg Tue Jun 04 11:08:44 2019 +0200 @@ -15,7 +15,7 @@ height="205" id="svg2" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug04.svg"> <defs id="defs4"> @@ -228,8 +228,10 @@ visible="true" enabled="true" snapvisiblegridlinesonly="true" - originx="0.078090195px" - originy="-3032.6372px" /> + originx="0.078090195" + originy="-3032.6372" + spacingx="1" + spacingy="1" /> </sodipodi:namedview> <metadata id="metadata7"> @@ -260,13 +262,12 @@ style="fill:none;stroke:#000000;stroke-width:0.99999779;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999978,1.0000022)" - sodipodi:linespacing="125%" id="text5217" y="14.714343" x="7.426435" - style="font-size:11.9999733px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:11.9999733px;line-height:1.25;font-family:sans-serif;stroke:none" y="14.714343" x="7.426435" id="tspan5219" @@ -284,19 +285,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999779;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999978,1.0000022)" - sodipodi:linespacing="125%" id="text5217-8" y="14.714343" x="67.426567" - style="font-size:11.9999733px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156" sodipodi:role="line" x="67.426567" - y="14.714343">5</tspan></text> + y="14.714343" + style="font-size:11.9999733px;line-height:1.25;font-family:sans-serif">5</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:0.99999779px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999779px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" d="m 21.981731,10.168036 38.518259,10e-7" id="path8263" inkscape:connector-type="polyline" @@ -316,16 +317,15 @@ y="238.83586" /> <text xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="390.00699" y="252.23067" - id="text5217-7" - sodipodi:linespacing="125%"><tspan + id="text5217-7"><tspan sodipodi:role="line" id="tspan5219-3" x="390.00699" y="252.23067" - style="stroke:none">3</tspan></text> + style="font-size:12px;line-height:1.25;font-family:sans-serif;stroke:none">3</tspan></text> </g> </g> <g @@ -343,20 +343,20 @@ y="131.44673" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="67.447083" y="144.84122" id="text5217-8-7" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan3914" x="67.447083" - y="144.84122">6</tspan></text> + y="144.84122" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">6</tspan></text> </g> </g> <path - style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6)" d="m 18.903021,117.9925 44.684942,52.70603" id="path5012" inkscape:connector-type="polyline" @@ -380,74 +380,74 @@ y="94.372253" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#404040;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#404040;fill-opacity:1;stroke:none" x="67.426567" y="107.76683" id="text5217-8-9" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan y="107.76683" x="67.426567" sodipodi:role="line" - id="tspan6156-7">5</tspan></text> + id="tspan6156-7" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">5</tspan></text> </g> </g> <path - style="fill:none;stroke:#404040;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.94117647;stroke-dasharray:none;marker-end:url(#Arrow2Mend);display:inline" - d="m 21.991099,108.96587 38.508907,0" + style="display:inline;fill:none;stroke:#404040;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94117647;marker-end:url(#Arrow2Mend)" + d="M 21.991099,108.96587 H 60.500006" id="path8263-2" inkscape:connector-type="polyline" inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="122.10089" y="139.74393" - id="text4115" - sodipodi:linespacing="125%"><tspan + id="text4115"><tspan sodipodi:role="line" id="tspan4117" x="122.10089" - y="139.74393" /></text> + y="139.74393" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif"> </tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;marker-start:url(#DotM)" - d="m 71.240876,117.9925 0,52.70603" + style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" + d="m 71.240876,117.9925 v 52.70603" id="path4123" inkscape:connector-type="polyline" inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="131.67636" y="97.973274" - id="text4799" - sodipodi:linespacing="125%"><tspan + id="text4799"><tspan sodipodi:role="line" id="tspan4801" x="131.67636" - y="97.973274">obsolete, hidden</tspan></text> + y="97.973274" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">obsolete, hidden</tspan></text> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="94.602959" y="134.52141" - id="text4803" - sodipodi:linespacing="125%"><tspan + id="text4803"><tspan sodipodi:role="line" id="tspan4805" x="94.602959" - y="134.52141">precursor</tspan></text> + y="134.52141" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">predecessor</tspan></text> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="94.461357" y="152.93744" - id="text4807" - sodipodi:linespacing="125%"><tspan + id="text4807"><tspan sodipodi:role="line" id="tspan4809" x="94.461357" - y="152.93744">successor</tspan></text> + y="152.93744" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">successor</tspan></text> <path style="fill:none;stroke:#7d7d7d;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="M 92.83703,132.25098 C 80.990226,132.18468 79.499843,128.85259 77.19601,119.63725" @@ -460,34 +460,36 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="131.8273" y="14.09236" - id="text4799-8" - sodipodi:linespacing="125%"><tspan + id="text4799-8"><tspan sodipodi:role="line" id="tspan4801-4" x="131.8273" - y="14.09236">working dir (clean)</tspan></text> + y="14.09236" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir (clean)</tspan></text> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="133.3548" y="177.91992" - id="text4799-8-1" - sodipodi:linespacing="125%"><tspan + id="text4799-8-1"><tspan sodipodi:role="line" x="133.3548" y="177.91992" - id="tspan3129">working dir</tspan><tspan + id="tspan3129" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan><tspan sodipodi:role="line" x="133.3548" y="190.41992" - id="tspan3137">(with uncommitted</tspan><tspan + id="tspan3137" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">(with uncommitted</tspan><tspan sodipodi:role="line" x="133.3548" y="202.91992" - id="tspan3135">changes to f1 f2 ...)</tspan></text> + id="tspan3135" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">changes to f1 f2 ...)</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend-2);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M 127.70873,11.814007 C 109.60365,21.89832 105.56713,4.2966494 86.402349,8.4033887" @@ -503,18 +505,18 @@ transform="translate(1.9967556e-6,-0.17817035)"> <text transform="scale(0.9999978,1.0000022)" - sodipodi:linespacing="125%" id="text5217-8-0" y="58.841717" x="46.92271" - style="font-size:11.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="58.841717" x="46.92271" id="tspan8594" - sodipodi:role="line">hg uncommit <tspan + sodipodi:role="line" + style="font-size:11.99999809px;line-height:1.25;font-family:monospace">hg uncommit <tspan id="tspan3131" - style="font-style:italic">f1 f2 ...</tspan></tspan></text> + style="font-style:italic;font-family:monospace">f1 f2 ...</tspan></tspan></text> <g transform="translate(-0.59241834,4.9316169)" id="g6372">
--- a/docs/figures/figure-ug05.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug05.svg Tue Jun 04 11:08:44 2019 +0200 @@ -15,7 +15,7 @@ height="250" id="svg2" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug05.svg"> <defs id="defs4"> @@ -284,8 +284,10 @@ visible="true" enabled="true" snapvisiblegridlinesonly="true" - originx="0.078088198px" - originy="-2937.8154px" /> + originx="0.078088198" + originy="-2937.8154" + spacingx="1" + spacingy="1" /> </sodipodi:namedview> <metadata id="metadata7"> @@ -314,13 +316,12 @@ id="rect2987" style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217" y="14.841532" x="7.4264469" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif;stroke:none" y="14.841532" x="7.4264469" id="tspan5219" @@ -340,20 +341,20 @@ y="1.8896017" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="67.426575" y="15.284375" id="text5217-8" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan y="15.284375" x="67.426575" sodipodi:role="line" - id="tspan6156">7</tspan></text> + id="tspan6156" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">7</tspan></text> </g> </g> <path - style="fill:none;stroke:#000000;stroke-width:0.99999946px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999946px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" d="m 21.981805,10.473365 38.518392,1e-6" id="path8263" inkscape:connector-type="polyline" @@ -370,13 +371,12 @@ style="fill:none;stroke:#000000;stroke-width:1.0000037;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(1.0000037,0.99999628)" - sodipodi:linespacing="125%" id="text5217-7" y="150.08279" x="7.3916588" - style="font-size:12.00004482px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:12.00004482px;line-height:1.25;font-family:sans-serif;stroke:none" y="150.08279" x="7.3916588" id="tspan5219-3" @@ -394,19 +394,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-7" y="232.20978" x="112.22823" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="232.20978" x="112.22823" id="tspan3914" - sodipodi:role="line">10</tspan></text> + sodipodi:role="line" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">10</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6)" d="m 18.241201,159.5 45.999463,59.31546" id="path5012" inkscape:connector-type="polyline" @@ -417,18 +417,18 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="122.10091" y="140.49216" - id="text4115" - sodipodi:linespacing="125%"><tspan + id="text4115"><tspan sodipodi:role="line" id="tspan4117" x="122.10091" - y="140.49216" /></text> + y="140.49216" + style="font-size:10px;line-height:1.25;font-family:sans-serif"> </tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" - d="m 71.240899,159.5 -2.6e-5,59.31546" + style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" + d="m 71.305628,159.5 -0.05621,59.31546" id="path4123" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -438,41 +438,41 @@ inkscape:connection-start-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="145.71631" y="120.74194" - id="text4799" - sodipodi:linespacing="125%"><tspan + id="text4799"><tspan sodipodi:role="line" x="145.71631" y="120.74194" - id="tspan4866">obsolete, hidden precursors</tspan></text> + id="tspan4866" + style="font-size:10px;line-height:1.25;font-family:sans-serif">obsolete, hidden predecessors</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="140.08366" y="221.99774" - id="text4807" - sodipodi:linespacing="125%"><tspan + id="text4807"><tspan sodipodi:role="line" id="tspan4809" x="140.08366" - y="221.99774">successor, working dir</tspan></text> + y="221.99774" + style="font-size:10px;line-height:1.25;font-family:sans-serif">successor, working dir</tspan></text> <g id="g4748" transform="translate(66,4)"> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-0" y="75.774689" x="46.543758" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="75.774689" x="46.543758" id="tspan8594" - sodipodi:role="line">hg fold 7</tspan></text> + sodipodi:role="line" + style="font-size:12px;line-height:1.25;font-family:monospace">hg fold 7</tspan></text> <g transform="translate(1.9995778e-6,1.240701)" id="g6493"> @@ -511,16 +511,16 @@ y="1.8896017" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="67.426575" y="15.284375" id="text5217-8-72" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan y="15.284375" x="67.426575" sodipodi:role="line" - id="tspan6156-9">8</tspan></text> + id="tspan6156-9" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">8</tspan></text> </g> </g> <g @@ -537,16 +537,16 @@ y="1.8896017" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="67.426575" y="15.284375" id="text5217-8-3" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan y="15.284375" x="67.426575" sodipodi:role="line" - id="tspan6156-0">9</tspan></text> + id="tspan6156-0" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">9</tspan></text> </g> </g> <path @@ -561,7 +561,7 @@ inkscape:connection-end-point="d4" /> <path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" - d="m 141.98174,10.473366 38.51826,0" + d="M 141.98174,10.473366 H 180.5" id="path3180" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -579,16 +579,16 @@ id="rect2987-4-7" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.9999994, 2.99999821;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-1" y="154.84146" x="67.426483" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-7" sodipodi:role="line" x="67.426483" - y="154.84146">7</tspan></text> + y="154.84146" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">7</tspan></text> </g> <g id="g4842"> @@ -601,16 +601,16 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999791, 2.99999374;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72-7" y="154.84122" x="127.42651" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-5" sodipodi:role="line" x="127.42651" - y="154.84122">8</tspan></text> + y="154.84122" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">8</tspan></text> </g> <g id="g4847"> @@ -623,19 +623,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999791, 2.99999374;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3-2" y="154.84122" x="187.42664" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-8" sodipodi:role="line" x="187.42664" - y="154.84122">9</tspan></text> + y="154.84122" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">9</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981806,150.47337 38.518004,0" id="path3178-7" inkscape:connector-type="polyline" @@ -645,8 +645,8 @@ inkscape:connection-end="#g4842" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" - d="m 141.98155,150.47337 38.51827,0" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" + d="m 141.98155,150.47337 h 38.51827" id="path3180-3" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -655,7 +655,7 @@ inkscape:connection-end="#g4847" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448)" d="M 21.981991,150.47336 60.5,150.47337" id="path4542" inkscape:connector-type="polyline" @@ -665,7 +665,7 @@ inkscape:connection-end="#g4837" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="M 124.24048,159.5 78.241066,218.81546" id="path4123-2" inkscape:connector-type="polyline" @@ -675,7 +675,7 @@ inkscape:connection-end="#g4533" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="M 180.49982,157.39844 81.981738,220.91702" id="path4123-2-7" inkscape:connector-type="polyline" @@ -706,15 +706,15 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="219.76105" y="45.381439" - id="text4799-8" - sodipodi:linespacing="125%"><tspan + id="text4799-8"><tspan sodipodi:role="line" id="tspan4801-4" x="219.76105" - y="45.381439">working dir</tspan></text> + y="45.381439" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;marker-end:url(#marker4448)" d="m 216.5322,43.418725 c -17.12038,-3.247846 -32.15429,-0.004 -25.47437,-18.707746"
--- a/docs/figures/figure-ug06.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug06.svg Tue Jun 04 11:08:44 2019 +0200 @@ -15,7 +15,7 @@ height="310" id="svg2" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug06.svg"> <defs id="defs4"> @@ -331,15 +331,15 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="2" - inkscape:cx="124.00649" + inkscape:cx="126.00649" inkscape:cy="153.46969" inkscape:document-units="px" inkscape:current-layer="svg2" showgrid="false" - inkscape:window-width="974" - inkscape:window-height="1048" - inkscape:window-x="48" - inkscape:window-y="61" + inkscape:window-width="1814" + inkscape:window-height="950" + inkscape:window-x="77" + inkscape:window-y="62" inkscape:window-maximized="0" showguides="false" inkscape:snap-global="false" @@ -354,8 +354,10 @@ visible="true" enabled="true" snapvisiblegridlinesonly="true" - originx="0.078088198px" - originy="-2937.8154px" /> + originx="0.078088198" + originy="-2937.8154" + spacingx="1" + spacingy="1" /> </sodipodi:namedview> <metadata id="metadata7"> @@ -371,16 +373,16 @@ </metadata> <text xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="112.5439" y="113.7746" id="text5217-8-0" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan8594" x="112.5439" - y="113.7746">hg amend</tspan></text> + y="113.7746" + style="font-size:12px;line-height:1.25;font-family:monospace">hg amend</tspan></text> <g id="g6493" transform="translate(63.844066,39.240701)"> @@ -418,16 +420,15 @@ y="35.446732" /> <text xml:space="preserve" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="3.3424675" y="48.84153" - id="text5217" - sodipodi:linespacing="125%"><tspan + id="text5217"><tspan sodipodi:role="line" id="tspan5219" x="3.3424675" y="48.84153" - style="stroke:none">10</tspan></text> + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif;stroke:none">10</tspan></text> <rect style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="rect2987-4" @@ -437,17 +438,17 @@ y="35.446732" /> <text xml:space="preserve" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="63.497932" y="48.84153" - id="text5217-8" - sodipodi:linespacing="125%"><tspan + id="text5217-8"><tspan y="48.84153" x="63.497932" sodipodi:role="line" - id="tspan6156">11</tspan></text> + id="tspan6156" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">11</tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:0.99999946px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999946px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" d="m 21.981805,44.473365 38.518386,10e-7" id="path8263" inkscape:connector-type="polyline" @@ -466,13 +467,12 @@ style="fill:none;stroke:#000000;stroke-width:1.0000037;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(1.0000037,0.9999963)" - sodipodi:linespacing="125%" id="text5217-7" y="154.84212" x="3.3424876" - style="font-size:12.00004482px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:12.00004482px;line-height:1.25;font-family:sans-serif;stroke:none" y="154.84212" x="3.3424876" id="tspan5219-3" @@ -487,18 +487,18 @@ y="252.81546" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="63.342594" y="266.20969" id="text5217-8-7" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan3914" x="63.342594" - y="266.20969">15</tspan></text> + y="266.20969" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">14</tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6)" d="m 18.241201,193.5 45.999463,59.31546" id="path5012" inkscape:connector-type="polyline" @@ -509,15 +509,15 @@ inkscape:connection-start-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="122.10091" y="174.49216" - id="text4115" - sodipodi:linespacing="125%"><tspan + id="text4115"><tspan sodipodi:role="line" id="tspan4117" x="122.10091" - y="174.49216" /></text> + y="174.49216" + style="font-size:10px;line-height:1.25;font-family:sans-serif"> </tspan></text> <g id="g3118" transform="translate(0,34)"> @@ -530,16 +530,16 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9" sodipodi:role="line" x="123.54487" - y="14.841505">12</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">12</tspan></text> </g> <g id="g3126" @@ -553,19 +553,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0" sodipodi:role="line" x="183.42488" - y="14.841505">13</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">13</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981997,44.473366 38.518003,0" id="path3178" inkscape:connector-type="polyline" @@ -575,7 +575,7 @@ inkscape:connection-end="#g3118" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 141.98174,44.473366 38.51826,0" id="path3180" inkscape:connector-type="polyline" @@ -585,7 +585,7 @@ inkscape:connection-end="#g3126" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448)" d="M 21.981991,184.65238 60.5,185.29435" id="path4542" inkscape:connector-type="polyline" @@ -594,27 +594,30 @@ inkscape:connection-start-point="d4" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="86.768402" y="12.367264" - id="text4799-8" - sodipodi:linespacing="125%"><tspan + id="text4799-8"><tspan sodipodi:role="line" id="tspan4801-4" x="86.768402" - y="12.367264">working dir</tspan></text> + y="12.367264" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <flowRoot xml:space="preserve" id="flowRoot3104" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" transform="translate(0,34)"><flowRegion - id="flowRegion3106"><rect + id="flowRegion3106" + style="font-family:sans-serif"><rect id="rect3108" width="60.309383" height="49.300529" x="-25.368233" - y="-22.34952" /></flowRegion><flowPara - id="flowPara3110"></flowPara></flowRoot> <g + y="-22.34952" + style="font-family:sans-serif" /></flowRegion><flowPara + id="flowPara3110" + style="font-size:10px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> <g id="g5560" transform="translate(0,34)"> <rect @@ -625,16 +628,16 @@ id="rect2987-4-8" style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-4" y="154.84152" x="63.497734" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-4" sodipodi:role="line" x="63.497734" - y="154.84152">11</tspan></text> + y="154.84152" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">11</tspan></text> </g> <g transform="translate(-2.0371355e-4,174)" @@ -648,16 +651,16 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72-7" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-7" sodipodi:role="line" x="123.54487" - y="14.841505">12</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">12</tspan></text> </g> <g transform="translate(-2.0371355e-4,174)" @@ -671,19 +674,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3-9" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-0" sodipodi:role="line" x="183.42488" - y="14.841505">13</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">13</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981806,184.47337 38.517994,0" id="path3178-0" inkscape:connector-type="polyline" @@ -691,8 +694,8 @@ inkscape:connection-end="#g3118-0" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" - d="m 141.98154,184.47337 38.51826,0" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" + d="M 141.98154,184.47337 H 180.4998" id="path3180-2" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -701,7 +704,7 @@ inkscape:connection-end="#g3126-3" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 71.240899,193.5 -2.6e-5,59.31546" id="path4123" inkscape:connector-type="polyline" @@ -710,30 +713,31 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="18.790892" y="142.23888" - id="text4799-8-6" - sodipodi:linespacing="100%"><tspan + id="text4799-8-6"><tspan sodipodi:role="line" id="tspan4801-4-0" x="18.790892" - y="142.23888">obsolete</tspan><tspan + y="142.23888" + style="font-size:9.99999905px;line-height:1;font-family:sans-serif">obsolete</tspan><tspan sodipodi:role="line" x="18.790892" y="152.23888" - id="tspan4452">but visible</tspan></text> + id="tspan4452" + style="font-size:9.99999905px;line-height:1;font-family:sans-serif">but visible</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="150.66776" y="148.39902" - id="text4454" - sodipodi:linespacing="125%"><tspan + id="text4454"><tspan sodipodi:role="line" id="tspan4456" x="150.66776" - y="148.39902">unstable</tspan></text> + y="148.39902" + style="font-size:10px;line-height:1.25;font-family:sans-serif">orphan</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#marker3230);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 41.433633,155.93241 c 4.445697,11.92656 24.017716,1.13391 25.948336,14.64825" @@ -749,90 +753,17 @@ d="m 174.94201,152.58423 c 1.6786,11.87585 15.90381,0.83843 15.90381,15.90382" id="path5104" inkscape:connector-curvature="0" /> - <g - id="g5631" - transform="translate(-27.905601,-5.4032307)"> - <rect - y="211.84996" - x="118.4056" - height="18.05327" - width="21.481739" - id="rect2987-4-0-0" - style="fill:none;stroke:#404040;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0" /> - <text - inkscape:transform-center-x="2.6044813" - transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" - id="text5217-8-9-2" - y="225.24431" - x="121.1868" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#404040;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" - xml:space="preserve"><tspan - id="tspan6156-7-4" - sodipodi:role="line" - x="121.1868" - y="225.24431">14</tspan></text> - </g> <text xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" - x="108.67482" - y="206.41029" - id="text4119" - sodipodi:linespacing="125%"><tspan - sodipodi:role="line" - id="tspan4121" - x="108.67482" - y="206.41029" - style="font-size:8px;font-weight:bold;-inkscape-font-specification:Sans Bold">T</tspan></text> - <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3230)" - d="m 79.976346,193.5 12.52908,12.94673" - id="path5636" - inkscape:connector-type="polyline" - inkscape:connector-curvature="0" - inkscape:connection-start="#g5560" - inkscape:connection-start-point="d4" - inkscape:connection-end="#g5631" - inkscape:connection-end-point="d4" /> - <text - xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" - x="143.52129" - y="224.8358" - id="text4787" - sodipodi:linespacing="100%"><tspan - sodipodi:role="line" - x="143.52129" - y="224.8358" - id="tspan4791">temporary</tspan><tspan - sodipodi:role="line" - x="143.52129" - y="234.8358" - id="tspan4795">amend</tspan><tspan - sodipodi:role="line" - x="143.52129" - y="244.8358" - id="tspan4797">commit;</tspan><tspan - sodipodi:role="line" - x="143.52129" - y="254.8358" - id="tspan6283">obsolete and</tspan><tspan - sodipodi:role="line" - x="143.52129" - y="264.83582" - id="tspan6285">hidden</tspan></text> - <text - xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="95.495201" y="291.81802" - id="text4799-8-7" - sodipodi:linespacing="125%"><tspan + id="text4799-8-7"><tspan sodipodi:role="line" id="tspan4801-4-8" x="95.495201" - y="291.81802">working dir</tspan></text> + y="291.81802" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#marker3230);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M 114.6749,14.053603 C 108.77815,29.370318 80.769041,12.646358 73.241271,33.724116" @@ -843,9 +774,4 @@ d="m 92.984542,288.7868 c -17.463809,1.31107 -20.109707,1.30681 -21.213204,-14.14214" id="path7860" inkscape:connector-curvature="0" /> - <path - style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;marker-end:url(#marker3230)" - d="m 139.5,223.5 c -16.33548,3.61997 -8.82833,-10 -24.5,-10" - id="path8482" - inkscape:connector-curvature="0" /> </svg>
--- a/docs/figures/figure-ug07.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug07.svg Tue Jun 04 11:08:44 2019 +0200 @@ -13,7 +13,7 @@ height="220" id="svg8082" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug07.svg"> <defs id="defs8084"> @@ -199,10 +199,10 @@ inkscape:current-layer="layer1" inkscape:document-units="px" showgrid="false" - inkscape:window-width="887" - inkscape:window-height="875" - inkscape:window-x="342" - inkscape:window-y="160" + inkscape:window-width="1814" + inkscape:window-height="950" + inkscape:window-x="51" + inkscape:window-y="82" inkscape:window-maximized="0" fit-margin-top="0" fit-margin-left="0" @@ -227,16 +227,16 @@ transform="translate(0,18.65699)"> <text xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="113.19138" y="21.624107" id="text5217-8-0" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan8594" x="113.19138" - y="21.624107">hg evolve --all</tspan></text> + y="21.624107" + style="font-size:12px;line-height:1.25;font-family:monospace">hg evolve --all</tspan></text> <g id="g6372" transform="translate(63.844068,-32.28608)"> @@ -272,13 +272,12 @@ style="fill:none;stroke:#000000;stroke-width:1.0000037;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(1.0000037,0.9999963)" - sodipodi:linespacing="125%" id="text5217-7" y="154.84212" x="3.3424876" - style="font-size:12.00004482px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan - style="stroke:none" + style="font-size:12.00004482px;line-height:1.25;font-family:sans-serif;stroke:none" y="154.84212" x="3.3424876" id="tspan5219-3" @@ -293,18 +292,18 @@ y="136.78973" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="63.342571" y="150.18422" id="text5217-8-7" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan3914" x="63.342571" - y="150.18422">15</tspan></text> + y="150.18422" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">14</tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-6)" d="M 18.241201,77.474272 64.240665,136.78973" id="path5012" inkscape:connector-type="polyline" @@ -314,7 +313,7 @@ inkscape:connection-start="#g3291" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448)" d="M 21.981991,68.626653 60.499999,69.26862" id="path4542" inkscape:connector-type="polyline" @@ -332,16 +331,16 @@ id="rect2987-4-8" style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-4" y="154.84152" x="63.497734" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-4" sodipodi:role="line" x="63.497734" - y="154.84152">11</tspan></text> + y="154.84152" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">11</tspan></text> </g> <g id="g8702" @@ -355,16 +354,16 @@ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72-7" y="88.815628" x="123.54466" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-7" sodipodi:role="line" x="123.54466" - y="88.815628">12</tspan></text> + y="88.815628" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">12</tspan></text> </g> <g id="g8707" @@ -378,19 +377,19 @@ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3-9" y="88.815628" x="183.42468" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-0" sodipodi:role="line" x="183.42468" - y="88.815628">13</tspan></text> + y="88.815628" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">13</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981809,68.44765 38.517981,-2e-6" id="path3178-0" inkscape:connector-type="polyline" @@ -398,8 +397,8 @@ inkscape:connection-end="#g8702" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" - d="m 141.98153,68.447648 38.51827,0" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" + d="M 141.98153,68.447648 H 180.4998" id="path3180-2" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -408,71 +407,28 @@ inkscape:connection-end="#g8707" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 71.240899,77.47427 -2.6e-5,59.31546" id="path4123" inkscape:connector-type="polyline" inkscape:connector-curvature="0" inkscape:connection-end="#rect2987-4-4" inkscape:connection-end-point="d4" /> - <g - id="g5631" - transform="translate(-27.905602,-122.06022)"> - <rect - y="211.84996" - x="118.4056" - height="18.05327" - width="21.481739" - id="rect2987-4-0-0" - style="fill:none;stroke:#404040;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0" /> - <text - inkscape:transform-center-x="2.6044813" - transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" - id="text5217-8-9-2" - y="225.24431" - x="121.1868" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#404040;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" - xml:space="preserve"><tspan - id="tspan6156-7-4" - sodipodi:role="line" - x="121.1868" - y="225.24431">14</tspan></text> - </g> - <text - xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" - x="108.67482" - y="89.753288" - id="text4119" - sodipodi:linespacing="125%"><tspan - sodipodi:role="line" - id="tspan4121" - x="108.67482" - y="89.753288" - style="font-size:8px;font-weight:bold;-inkscape-font-specification:Sans Bold">T</tspan></text> - <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3230)" - d="M 80.157925,77.47427 92.323846,89.78974" - id="path5636" - inkscape:connector-type="polyline" - inkscape:connector-curvature="0" - inkscape:connection-start="#g5560" - inkscape:connection-start-point="d4" - inkscape:connection-end="#g5631" - inkscape:connection-end-point="d4" /> <flowRoot xml:space="preserve" id="flowRoot8394" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" transform="translate(0,-36)"><flowRegion - id="flowRegion8396"><rect + id="flowRegion8396" + style="font-family:sans-serif"><rect id="rect8398" width="311.2373" height="172.50397" x="13.690791" - y="268.24911" /></flowRegion><flowPara - id="flowPara8400" /></flowRoot> <g + y="268.24911" + style="font-family:sans-serif" /></flowRegion><flowPara + id="flowPara8400" + style="font-size:10px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> <g id="g8798" transform="translate(28.427001,-38.337945)"> <rect @@ -484,16 +440,16 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-7-4" y="188.52202" x="94.915642" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="188.52202" x="94.915642" id="tspan3914-6" - sodipodi:role="line">16</tspan></text> + sodipodi:role="line" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">15</tspan></text> </g> <g id="g8803" @@ -507,19 +463,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-7-46" y="188.52202" x="174.91582" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="188.52202" x="174.91582" id="tspan3914-1" - sodipodi:role="line">17</tspan></text> + sodipodi:role="line" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">16</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448)" d="m 81.981739,145.81637 38.518261,0" id="path4542-5" inkscape:connector-type="polyline" @@ -529,7 +485,7 @@ inkscape:connection-end="#g8798" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4448)" d="M 141.98174,145.77795 180.5,145.64016" id="path4542-1" inkscape:connector-type="polyline" @@ -537,7 +493,7 @@ inkscape:connection-start="#g8798" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 131.24068,77.474283 1.6e-4,59.315457" id="path4123-1" inkscape:connector-type="polyline" @@ -547,7 +503,7 @@ inkscape:connection-end="#g8798" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 191.24069,77.474283 1.6e-4,59.315457" id="path4123-14" inkscape:connector-type="polyline" @@ -558,37 +514,37 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="226.23938" y="81.810745" - id="text3058" - sodipodi:linespacing="125%"><tspan + id="text3058"><tspan sodipodi:role="line" id="tspan3060" x="226.23938" - y="81.810745">obsolete, hidden</tspan></text> + y="81.810745" + style="font-size:10px;line-height:1.25;font-family:sans-serif">obsolete, hidden</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="243.1927" y="151.52931" - id="text6402" - sodipodi:linespacing="125%"><tspan + id="text6402"><tspan sodipodi:role="line" id="tspan6404" x="243.1927" - y="151.52931">working dir</tspan></text> + y="151.52931" + style="font-size:10px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="102" y="184.34302" - id="text7020" - sodipodi:linespacing="125%"><tspan + id="text7020"><tspan sodipodi:role="line" id="tspan7022" x="102" - y="184.34302">successors</tspan></text> + y="184.34302" + style="font-size:10px;line-height:1.25;font-family:sans-serif">successors</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 214.5,51.843009 c 2.26039,0.588947 4.4416,0.9416 5.5,2 2.95364,2.953636 2.98797,53.512031 0.5,56.000001 -3.15839,3.15839 -5.49327,6.33109 -9,7.5"
--- a/docs/figures/figure-ug08.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug08.svg Tue Jun 04 11:08:44 2019 +0200 @@ -13,7 +13,7 @@ height="190" id="svg8392" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug08.svg"> <defs id="defs8394"> @@ -132,7 +132,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> + <dc:title /> </cc:Work> </rdf:RDF> </metadata> @@ -152,16 +152,16 @@ id="rect2987-4" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156" sodipodi:role="line" x="3.4977415" - y="807.20361">18</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">18</tspan></text> </g> <g id="g3118" @@ -175,16 +175,16 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9" sodipodi:role="line" x="123.54487" - y="14.841505">19</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">19</tspan></text> </g> <g id="g3126" @@ -198,19 +198,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0" sodipodi:role="line" x="183.42488" - y="14.841505">20</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">20</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981806,796.83549 38.518193,4e-5" id="path3178" inkscape:connector-type="polyline" @@ -220,8 +220,8 @@ inkscape:connection-start="#g8678" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" - d="m 81.981738,796.83555 38.518072,0" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" + d="M 81.981738,796.83555 H 120.49981" id="path3180" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -231,27 +231,27 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="192.95625" y="783.27075" - id="text4799-8" - sodipodi:linespacing="125%"><tspan + id="text4799-8"><tspan sodipodi:role="line" id="tspan4801-4" x="192.95625" - y="783.27075">working dir</tspan></text> + y="783.27075" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <text xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="80.662636" y="851.4538" id="text5217-8-0" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan8594" x="80.662636" - y="851.4538">hg prune 19</tspan></text> + y="851.4538" + style="font-size:12px;line-height:1.25;font-family:monospace">hg prune 19</tspan></text> <g id="g6372" transform="translate(31.315375,797.54535)"> @@ -286,16 +286,16 @@ id="rect2987-4-9" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-32" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-8" sodipodi:role="line" x="3.4977415" - y="807.20361">18</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">18</tspan></text> </g> <rect style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999946, 3.99999785;stroke-dashoffset:0" @@ -306,15 +306,15 @@ y="892.8089" /> <text xml:space="preserve" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="63.544647" y="906.20331" - id="text5217-8-72-1" - sodipodi:linespacing="125%"><tspan + id="text5217-8-72-1"><tspan y="906.20331" x="63.544647" sodipodi:role="line" - id="tspan6156-9-8">19</tspan></text> + id="tspan6156-9-8" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">19</tspan></text> <g id="g3126-8" transform="matrix(1.0000032,0,0,0.99999991,-60.000385,891.36218)"> @@ -327,19 +327,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3-8" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-9" sodipodi:role="line" x="183.42488" - y="14.841505">20</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">20</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981875,901.83548 38.518126,5e-5" id="path3178-9" inkscape:connector-type="polyline" @@ -347,7 +347,7 @@ inkscape:connection-start="#g8678-6" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981808,901.83554 38.518382,0" id="path3180-1" inkscape:connector-type="polyline" @@ -356,41 +356,42 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="33.872818" y="941.35645" - id="text9295" - sodipodi:linespacing="125%"><tspan + id="text9295"><tspan sodipodi:role="line" id="tspan9297" x="33.872818" - y="941.35645">obsolete</tspan><tspan + y="941.35645" + style="font-size:10px;line-height:1.25;font-family:sans-serif">obsolete</tspan><tspan sodipodi:role="line" x="33.872818" y="953.85645" - id="tspan9299">but visible</tspan></text> + id="tspan9299" + style="font-size:10px;line-height:1.25;font-family:sans-serif">but visible</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="125.75282" y="939.66284" - id="text9301" - sodipodi:linespacing="125%"><tspan + id="text9301"><tspan sodipodi:role="line" id="tspan9303" x="125.75282" - y="939.66284">unstable</tspan></text> + y="939.66284" + style="font-size:10px;line-height:1.25;font-family:sans-serif">orphan</tspan></text> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="192.95625" y="920.7381" - id="text4799-8-4" - sodipodi:linespacing="125%"><tspan + id="text4799-8-4"><tspan sodipodi:role="line" id="tspan4801-4-2" x="192.95625" - y="920.7381">working dir</tspan></text> + y="920.7381" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#marker8695);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 188.0904,779.78292 c -26.25288,3.51598 -8.22083,22.5684 -39.59798,18.38478"
--- a/docs/figures/figure-ug09.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug09.svg Tue Jun 04 11:08:44 2019 +0200 @@ -13,7 +13,7 @@ height="150" id="svg10360" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug09.svg"> <defs id="defs10362"> @@ -90,7 +90,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> + <dc:title /> </cc:Work> </rdf:RDF> </metadata> @@ -101,16 +101,16 @@ transform="translate(-52.986766,123.22995)"> <text xml:space="preserve" - style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="132.17838" y="-88.939552" id="text5217-8-0" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan sodipodi:role="line" id="tspan8594" x="132.17838" - y="-88.939552">hg evolve --all</tspan></text> + y="-88.939552" + style="font-size:12px;line-height:1.25;font-family:monospace">hg evolve --all</tspan></text> <g id="g6372" transform="translate(82.830913,-142.84994)"> @@ -145,16 +145,16 @@ id="rect2987-4-9" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-32" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-8" sodipodi:role="line" x="3.4977415" - y="807.20361">18</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">18</tspan></text> </g> <g id="g11168" @@ -167,16 +167,16 @@ id="rect2987-4-02-6" style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999946, 3.99999783;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-72-1" y="-149.15291" x="116.53148" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-8" sodipodi:role="line" x="116.53148" - y="-149.15291">19</tspan></text> + y="-149.15291" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">19</tspan></text> </g> <g id="g11163" @@ -189,19 +189,19 @@ id="rect2987-4-026-7" style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-3-8" y="-149.15244" x="176.41162" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-9" sodipodi:role="line" x="176.41162" - y="-149.15244">20</tspan></text> + y="-149.15244" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">20</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 74.96872,-41.52073 38.51813,3.7e-5" id="path3178-9" inkscape:connector-type="polyline" @@ -211,7 +211,7 @@ inkscape:connection-start="#g8678-6" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 134.96865,-41.520681 38.5184,1e-5" id="path3180-1" inkscape:connector-type="polyline" @@ -231,16 +231,16 @@ id="rect2987-4-9-5" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-32-6" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-8-9" sodipodi:role="line" x="3.4977415" - y="807.20361">21</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">21</tspan></text> </g> <path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10584)" @@ -253,7 +253,7 @@ inkscape:connection-end="#g8678-6-4" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 184.22792,-32.494034 -1.1e-4,31.0082104" id="path4123-2" inkscape:connector-type="polyline" @@ -264,30 +264,31 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="188.27898" y="-68.730186" - id="text11674" - sodipodi:linespacing="125%"><tspan + id="text11674"><tspan sodipodi:role="line" id="tspan11676" x="188.27898" - y="-68.730186">obsolete, hidden</tspan></text> + y="-68.730186" + style="font-size:10px;line-height:1.25;font-family:sans-serif">obsolete, hidden</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="229.09592" y="4.1899796" - id="text11678" - sodipodi:linespacing="125%"><tspan + id="text11678"><tspan sodipodi:role="line" id="tspan11680" x="229.09592" - y="4.1899796">successor,</tspan><tspan + y="4.1899796" + style="font-size:10px;line-height:1.25;font-family:sans-serif">successor,</tspan><tspan sodipodi:role="line" x="229.09592" y="16.68998" - id="tspan11682">working dir</tspan></text> + id="tspan11682" + style="font-size:10px;line-height:1.25;font-family:sans-serif">working dir</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#marker10584);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 224.96835,6.48307 c -14.81489,-0.42162 -8.84647,9.26545 -25.22395,4.58617"
--- a/docs/figures/figure-ug10.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug10.svg Tue Jun 04 11:08:44 2019 +0200 @@ -13,7 +13,7 @@ height="400" id="svg8392" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug10.svg"> <defs id="defs8394"> @@ -264,16 +264,16 @@ id="rect2987-4" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156" sodipodi:role="line" x="3.4977415" - y="807.20361">21</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">21</tspan></text> </g> <g id="g3118" @@ -287,16 +287,16 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9" sodipodi:role="line" x="123.54487" - y="14.841505">22</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">22</tspan></text> </g> <g id="g3126" @@ -310,19 +310,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0" sodipodi:role="line" x="183.42488" - y="14.841505">23</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">23</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981806,588.83549 38.518193,4e-5" id="path3178" inkscape:connector-type="polyline" @@ -332,8 +332,8 @@ inkscape:connection-start="#g8678" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" - d="m 81.981738,588.83555 38.518072,0" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" + d="M 81.981738,588.83555 H 120.49981" id="path3180" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -352,16 +352,16 @@ id="rect2987-4-9" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-32" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-8" sodipodi:role="line" x="3.4977415" - y="807.20361">21</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">21</tspan></text> </g> <rect style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999946, 3.99999785;stroke-dashoffset:0" @@ -372,15 +372,15 @@ y="684.8089" /> <text xml:space="preserve" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="63.544647" y="698.20331" - id="text5217-8-72-1" - sodipodi:linespacing="125%"><tspan + id="text5217-8-72-1"><tspan y="698.20331" x="63.544647" sodipodi:role="line" - id="tspan6156-9-8">22</tspan></text> + id="tspan6156-9-8" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">22</tspan></text> <g id="g3126-8" transform="matrix(1.0000032,0,0,0.99999991,-60.000385,683.36218)"> @@ -393,19 +393,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3-8" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-9" sodipodi:role="line" x="183.42488" - y="14.841505">23</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">23</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981875,693.83548 38.518126,5e-5" id="path3178-9" inkscape:connector-type="polyline" @@ -413,7 +413,7 @@ inkscape:connection-start="#g8678-6" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981808,693.83554 38.518382,0" id="path3180-1" inkscape:connector-type="polyline" @@ -422,47 +422,48 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="7.5114212" y="652.66315" - id="text9295" - sodipodi:linespacing="100%"><tspan + id="text9295"><tspan sodipodi:role="line" id="tspan9297" x="7.5114212" - y="652.66315">obsolete</tspan><tspan + y="652.66315" + style="font-size:10px;line-height:1;font-family:sans-serif">obsolete</tspan><tspan sodipodi:role="line" x="7.5114212" y="662.66315" - id="tspan9299">but visible</tspan></text> + id="tspan9299" + style="font-size:10px;line-height:1;font-family:sans-serif">but visible</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="155.24913" y="668.43335" - id="text9301" - sodipodi:linespacing="125%"><tspan + id="text9301"><tspan sodipodi:role="line" id="tspan9303" x="155.24913" - y="668.43335">unstable</tspan></text> + y="668.43335" + style="font-size:10px;line-height:1.25;font-family:sans-serif">orphan</tspan></text> <g id="g5433" transform="translate(32.476727,584.47248)"> <text transform="scale(0.9999978,1.0000022)" - sodipodi:linespacing="125%" id="text5217-8-0" y="58.841717" x="46.92271" - style="font-size:11.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="58.841717" x="46.92271" id="tspan8594" - sodipodi:role="line">hg uncommit <tspan + sodipodi:role="line" + style="font-size:11.99999809px;line-height:1.25;font-family:monospace">hg uncommit <tspan id="tspan3131" - style="font-style:italic">f1 f2 ...</tspan></tspan></text> + style="font-style:italic;font-family:monospace">f1 f2 ...</tspan></tspan></text> <g transform="translate(-0.59241834,4.9316169)" id="g6372-4"> @@ -499,38 +500,40 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72-3" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-3" sodipodi:role="line" x="123.54487" - y="14.841505">24</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">24</tspan></text> </g> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="187.68906" y="740.26349" - id="text3218" - sodipodi:linespacing="100%"><tspan + id="text3218"><tspan sodipodi:role="line" id="tspan3220" x="187.68906" - y="740.26349">working dir</tspan><tspan + y="740.26349" + style="font-size:10px;line-height:1;font-family:sans-serif">working dir</tspan><tspan sodipodi:role="line" x="187.68906" y="750.26349" - id="tspan4379">(with uncommitted</tspan><tspan + id="tspan4379" + style="font-size:10px;line-height:1;font-family:sans-serif">(with uncommitted</tspan><tspan sodipodi:role="line" x="187.68906" y="760.26349" - id="tspan4381">changes to f1 f2 ...)</tspan></text> + id="tspan4381" + style="font-size:10px;line-height:1;font-family:sans-serif">changes to f1 f2 ...)</tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981875,702.7739 38.518124,32.05414" id="path3178-9-5" inkscape:connector-type="polyline" @@ -540,7 +543,7 @@ inkscape:connection-end="#g3118-2" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 71.240897,702.86217 -2.2e-5,31.87761" id="path4123" inkscape:connector-type="polyline" @@ -551,22 +554,23 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:11.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="79.694885" y="791.03015" id="text5217-8-0-7" - sodipodi:linespacing="125%" transform="scale(0.9999978,1.0000022)"><tspan id="tspan3316" sodipodi:role="line" x="79.694885" - y="791.03015">hg revert <tspan + y="791.03015" + style="font-size:11.99999809px;line-height:1.25;font-family:monospace">hg revert <tspan id="tspan3314" - style="font-style:italic">f1 f2 ...</tspan></tspan><tspan + style="font-style:italic;font-family:monospace">f1 f2 ...</tspan></tspan><tspan id="tspan3322" sodipodi:role="line" x="79.694885" - y="806.03015">hg evolve --all</tspan></text> + y="806.03015" + style="font-size:11.99999809px;line-height:1.25;font-family:monospace">hg evolve --all</tspan></text> <g id="g6372-4-2" transform="translate(32.179684,745.12164)"> @@ -602,15 +606,15 @@ y="793.80884" /> <text xml:space="preserve" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="3.4977415" y="807.20361" - id="text5217-8-32-6" - sodipodi:linespacing="125%"><tspan + id="text5217-8-32-6"><tspan y="807.20361" x="3.4977415" sodipodi:role="line" - id="tspan6156-8-5">21</tspan></text> + id="tspan6156-8-5" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">21</tspan></text> </g> <rect y="839.21106" @@ -620,16 +624,16 @@ id="rect2987-4-02-6-9" style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999946, 3.99999785;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-72-1-2" y="852.60547" x="63.544647" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-8-1" sodipodi:role="line" x="63.544647" - y="852.60547">22</tspan></text> + y="852.60547" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">22</tspan></text> <g id="g4295"> <rect @@ -641,15 +645,15 @@ y="839.21106" /> <text xml:space="preserve" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="123.42475" y="852.60547" - id="text5217-8-3-8-6" - sodipodi:linespacing="125%"><tspan + id="text5217-8-3-8-6"><tspan y="852.60547" x="123.42475" sodipodi:role="line" - id="tspan6156-0-9-3">23</tspan></text> + id="tspan6156-0-9-3" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">23</tspan></text> </g> <path inkscape:connection-start-point="d4" @@ -658,13 +662,13 @@ inkscape:connector-type="polyline" id="path3178-9-1" d="m 21.981875,848.23763 38.518124,2e-5" - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" /> + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" /> <path inkscape:connector-curvature="0" inkscape:connector-type="polyline" id="path3180-1-7" d="m 81.981809,848.23766 38.518381,3e-5" - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" inkscape:connection-end="#g4295" inkscape:connection-end-point="d4" /> <g @@ -679,16 +683,16 @@ y="1.4467307" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="123.54487" y="14.841505" id="text5217-8-72-3-4" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan y="14.841505" x="123.54487" sodipodi:role="line" - id="tspan6156-9-3-9">24</tspan></text> + id="tspan6156-9-3-9" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">24</tspan></text> </g> <path inkscape:connection-end-point="d4" @@ -699,7 +703,7 @@ inkscape:connector-type="polyline" id="path3178-9-5-1" d="m 21.981875,857.17605 38.518124,32.05412" - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" /> + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" /> <path inkscape:connection-end-point="d4" inkscape:connection-end="#g3118-2-6" @@ -709,7 +713,7 @@ inkscape:connector-type="polyline" id="path4123-8" d="m 71.240897,857.26433 -2.2e-5,31.87757" - style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" /> + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" /> <g transform="translate(-1.0430814e-6,887.87361)" id="g3118-2-6-6"> @@ -722,23 +726,23 @@ y="1.4467307" /> <text xml:space="preserve" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="123.54487" y="14.841505" id="text5217-8-72-3-4-9" - sodipodi:linespacing="125%" transform="scale(0.9999979,1.0000021)"><tspan y="14.841505" x="123.54487" sodipodi:role="line" - id="tspan6156-9-3-9-1">25</tspan></text> + id="tspan6156-9-3-9-1" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">25</tspan></text> </g> <path inkscape:connector-curvature="0" inkscape:connector-type="polyline" id="path4123-8-2" d="m 131.24105,857.26433 -1.4e-4,32.05601" - style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" inkscape:connection-start="#g4295" inkscape:connection-start-point="d4" inkscape:connection-end="#g3118-2-6-6" @@ -748,72 +752,76 @@ inkscape:connector-type="polyline" id="path3178-9-1-1" d="M 81.981738,898.20048 120.5,898.31503" - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" inkscape:connection-start="#g3118-2-6" inkscape:connection-start-point="d4" inkscape:connection-end="#g3118-2-6-6" inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="187.37656" y="909.57391" - id="text4799-8-0" - sodipodi:linespacing="125%"><tspan + id="text4799-8-0"><tspan sodipodi:role="line" x="187.37656" y="909.57391" - id="tspan4416">working dir</tspan><tspan + id="tspan4416" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan><tspan sodipodi:role="line" x="187.37656" y="922.07391" - id="tspan4420">(clean)</tspan></text> + id="tspan4420" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">(clean)</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="175.91385" y="840.83063" - id="text4404" - sodipodi:linespacing="100%"><tspan + id="text4404"><tspan sodipodi:role="line" id="tspan4406" x="175.91385" - y="840.83063">obsolete,</tspan><tspan + y="840.83063" + style="font-size:10px;line-height:1;font-family:sans-serif">obsolete,</tspan><tspan sodipodi:role="line" x="175.91385" y="850.83063" - id="tspan4408">hidden,</tspan><tspan + id="tspan4408" + style="font-size:10px;line-height:1;font-family:sans-serif">hidden,</tspan><tspan sodipodi:role="line" x="175.91385" y="860.83063" - id="tspan4410">precursors</tspan></text> + id="tspan4410" + style="font-size:10px;line-height:1;font-family:sans-serif">predecessors</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="53.690826" y="380.35703" id="text4412" - sodipodi:linespacing="100%" transform="translate(0,559.99805)"><tspan sodipodi:role="line" id="tspan4414" x="53.690826" - y="380.35703">successors</tspan></text> + y="380.35703" + style="font-size:10px;line-height:1;font-family:sans-serif">successors</tspan></text> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="187.37656" y="571.41107" - id="text4799-8-0-8" - sodipodi:linespacing="125%"><tspan + id="text4799-8-0-8"><tspan sodipodi:role="line" x="187.37656" y="571.41107" - id="tspan4416-9">working dir</tspan><tspan + id="tspan4416-9" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan><tspan sodipodi:role="line" x="187.37656" y="583.91107" - id="tspan4420-1">(clean)</tspan></text> + id="tspan4420-1" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">(clean)</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;marker-end:url(#Arrow2Mend-2-0)" d="M 182.62097,9.6751729 C 149.31312,5.6732792 109.12827,-5.7223311 84.489703,18.916234"
--- a/docs/figures/figure-ug11.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug11.svg Tue Jun 04 11:08:44 2019 +0200 @@ -13,7 +13,7 @@ height="260" id="svg8392" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug11.svg"> <defs id="defs8394"> @@ -306,16 +306,16 @@ id="rect2987-4" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156" sodipodi:role="line" x="3.4977415" - y="807.20361">25</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">25</tspan></text> </g> <g id="g3118" @@ -329,16 +329,16 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9" sodipodi:role="line" x="123.54487" - y="14.841505">26</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">26</tspan></text> </g> <g id="g3126" @@ -352,19 +352,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0" sodipodi:role="line" x="183.42488" - y="14.841505">27</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">27</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981806,580.83549 38.518193,4e-5" id="path3178" inkscape:connector-type="polyline" @@ -374,8 +374,8 @@ inkscape:connection-start="#g8678" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" - d="m 81.981738,580.83555 38.518072,0" + style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" + d="M 81.981738,580.83555 H 120.49981" id="path3180" inkscape:connector-type="polyline" inkscape:connector-curvature="0" @@ -394,16 +394,16 @@ id="rect2987-4-9" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-32" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-8" sodipodi:role="line" x="3.4977415" - y="807.20361">25</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">25</tspan></text> </g> <rect style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999946, 3.99999785;stroke-dashoffset:0" @@ -414,15 +414,15 @@ y="685.14484" /> <text xml:space="preserve" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="63.544647" y="698.53925" - id="text5217-8-72-1" - sodipodi:linespacing="125%"><tspan + id="text5217-8-72-1"><tspan y="698.53925" x="63.544647" sodipodi:role="line" - id="tspan6156-9-8">26</tspan></text> + id="tspan6156-9-8" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">26</tspan></text> <g id="g3126-8" transform="matrix(1.0000032,0,0,0.99999991,-60.000385,683.69805)"> @@ -435,19 +435,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3-8" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-9" sodipodi:role="line" x="183.42488" - y="14.841505">27</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">27</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981875,694.17135 38.518126,5e-5" id="path3178-9" inkscape:connector-type="polyline" @@ -455,7 +455,7 @@ inkscape:connection-start="#g8678-6" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981808,694.17141 38.518382,0" id="path3180-1" inkscape:connector-type="polyline" @@ -464,48 +464,50 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="6.5114212" y="652.66315" - id="text9295" - sodipodi:linespacing="100%"><tspan + id="text9295"><tspan sodipodi:role="line" id="tspan9297" x="6.5114212" - y="652.66315">obsolete</tspan><tspan + y="652.66315" + style="font-size:10px;line-height:1;font-family:sans-serif">obsolete</tspan><tspan sodipodi:role="line" x="6.5114212" y="662.66315" - id="tspan9299">but visible</tspan></text> + id="tspan9299" + style="font-size:10px;line-height:1;font-family:sans-serif">but visible</tspan></text> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="159.24913" y="668.43335" - id="text9301" - sodipodi:linespacing="125%"><tspan + id="text9301"><tspan sodipodi:role="line" id="tspan9303" x="159.24913" - y="668.43335">unstable</tspan></text> + y="668.43335" + style="font-size:10px;line-height:1.25;font-family:sans-serif">orphan</tspan></text> <text xml:space="preserve" - style="font-size:11.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="79.399506" y="627.31293" id="text5217-8-0" - sodipodi:linespacing="125%" transform="scale(0.9999978,1.0000022)"><tspan sodipodi:role="line" id="tspan8594" x="79.399506" - y="627.31293">hg uncommit <tspan - style="font-style:italic" + y="627.31293" + style="font-size:11.99999809px;line-height:1.25;font-family:monospace">hg uncommit <tspan + style="font-style:italic;font-family:monospace" id="tspan3131">f1 f2 ...</tspan></tspan><tspan sodipodi:role="line" x="79.399506" y="642.31293" - id="tspan3124">hg commit</tspan></text> + id="tspan3124" + style="font-size:11.99999809px;line-height:1.25;font-family:monospace">hg commit</tspan></text> <g id="g6372-4" transform="translate(31.884309,581.4041)"> @@ -541,34 +543,35 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72-3" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-3" sodipodi:role="line" x="123.54487" - y="14.841505">28</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">28</tspan></text> </g> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="187.37656" y="781.10907" - id="text3218" - sodipodi:linespacing="100%"><tspan + id="text3218"><tspan sodipodi:role="line" x="187.37656" y="781.10907" - id="tspan4381">working dir</tspan><tspan + id="tspan4381" + style="font-size:10px;line-height:1;font-family:sans-serif">working dir</tspan><tspan sodipodi:role="line" x="187.37656" y="791.10907" - id="tspan3635">(clean)</tspan></text> + id="tspan3635" + style="font-size:10px;line-height:1;font-family:sans-serif">(clean)</tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981875,703.12214 38.518124,32.09853" id="path3178-9-5" inkscape:connector-type="polyline" @@ -578,7 +581,7 @@ inkscape:connection-end="#g3118-2" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 71.240897,703.1981 -2.2e-5,31.94668" id="path4123" inkscape:connector-type="polyline" @@ -589,19 +592,20 @@ inkscape:connection-end-point="d4" /> <text xml:space="preserve" - style="font-size:9.99999905px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="187.37656" y="563.41107" - id="text4799-8-0-8" - sodipodi:linespacing="125%"><tspan + id="text4799-8-0-8"><tspan sodipodi:role="line" x="187.37656" y="563.41107" - id="tspan4416-9">working dir</tspan><tspan + id="tspan4416-9" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">working dir</tspan><tspan sodipodi:role="line" x="187.37656" y="575.91107" - id="tspan4420-1">(clean)</tspan></text> + id="tspan4420-1" + style="font-size:9.99999905px;line-height:1.25;font-family:sans-serif">(clean)</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend-2-0);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 182.62097,561.67322 c -33.30785,-4.00189 -73.4927,-15.3975 -98.131267,9.24106" @@ -619,19 +623,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72-3-7" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-3-0" sodipodi:role="line" x="123.54487" - y="14.841505">29</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">29</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="M 81.981738,753.12214 120.5,785.22069" id="path3180-1-6" inkscape:connector-type="polyline"
--- a/docs/figures/figure-ug12.svg Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/figures/figure-ug12.svg Tue Jun 04 11:08:44 2019 +0200 @@ -13,7 +13,7 @@ height="200" id="svg3183" version="1.1" - inkscape:version="0.48.4 r9939" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="figure-ug12.svg"> <defs id="defs3185"> @@ -324,16 +324,16 @@ transform="translate(2,-8)"> <text transform="scale(0.9999978,1.0000022)" - sodipodi:linespacing="125%" id="text5217-8-0-7" y="900.3703" x="76.696045" - style="font-size:11.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan y="900.3703" x="76.696045" sodipodi:role="line" - id="tspan3322">hg evolve --all</tspan></text> + id="tspan3322" + style="font-size:11.99999809px;line-height:1.25;font-family:monospace">hg evolve --all</tspan></text> <g transform="translate(29.180861,844.4619)" id="g6372-4-2"> @@ -369,16 +369,16 @@ id="rect2987-4-9" style="fill:none;stroke:#000000;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-32" y="807.20361" x="3.4977415" - style="font-size:11.99999332px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-8" sodipodi:role="line" x="3.4977415" - y="807.20361">25</tspan></text> + y="807.20361" + style="font-size:11.99999332px;line-height:1.25;font-family:sans-serif">25</tspan></text> </g> <rect style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999946, 3.99999785;stroke-dashoffset:0" @@ -389,15 +389,15 @@ y="923.8089" /> <text xml:space="preserve" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="63.544647" y="937.20331" - id="text5217-8-72-1" - sodipodi:linespacing="125%"><tspan + id="text5217-8-72-1"><tspan y="937.20331" x="63.544647" sodipodi:role="line" - id="tspan6156-9-8">26</tspan></text> + id="tspan6156-9-8" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">26</tspan></text> <g id="g4904"> <rect @@ -408,19 +408,19 @@ id="rect2987-4-026-7" style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" /> <text - sodipodi:linespacing="125%" id="text5217-8-3-8" y="937.20325" x="123.42475" - style="font-size:11.99999428px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-9" sodipodi:role="line" x="123.42475" - y="937.20325">27</tspan></text> + y="937.20325" + style="font-size:11.99999428px;line-height:1.25;font-family:sans-serif">27</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981875,932.83543 38.518126,5e-5" id="path3178-9" inkscape:connector-type="polyline" @@ -428,7 +428,7 @@ inkscape:connection-start="#g8678-6" inkscape:connection-start-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981805,932.83549 38.518385,-1e-5" id="path3180-1" inkscape:connector-type="polyline" @@ -447,34 +447,35 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72-3" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-3" sodipodi:role="line" x="123.54487" - y="14.841505">28</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">28</tspan></text> </g> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="188.87656" y="965.77319" - id="text3218" - sodipodi:linespacing="100%"><tspan + id="text3218"><tspan sodipodi:role="line" x="188.87656" y="965.77319" - id="tspan4381">working dir</tspan><tspan + id="tspan4381" + style="font-size:10px;line-height:1;font-family:sans-serif">working dir</tspan><tspan sodipodi:role="line" x="188.87656" y="975.77319" - id="tspan3635">(clean)</tspan></text> + id="tspan3635" + style="font-size:10px;line-height:1;font-family:sans-serif">(clean)</tspan></text> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 21.981875,941.78622 38.518124,32.09853" id="path3178-9-5" inkscape:connector-type="polyline" @@ -484,7 +485,7 @@ inkscape:connection-end="#g3118-2" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 71.240897,941.86217 -2.2e-5,31.94669" id="path4123" inkscape:connector-type="polyline" @@ -505,19 +506,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-72-3-7" y="14.841505" x="123.54487" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-9-3-0" sodipodi:role="line" x="123.54487" - y="14.841505">29</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">29</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="M 81.981738,991.78623 120.5,1023.8848" id="path3180-1-6" inkscape:connector-type="polyline" @@ -538,19 +539,19 @@ style="fill:none;stroke:#000000;stroke-width:0.99999791;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <text transform="scale(0.9999979,1.0000021)" - sodipodi:linespacing="125%" id="text5217-8-3-8-6" y="14.841505" x="183.42488" - style="font-size:11.9999752px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"><tspan id="tspan6156-0-9-7" sodipodi:role="line" x="183.42488" - y="14.841505">30</tspan></text> + y="14.841505" + style="font-size:11.9999752px;line-height:1.25;font-family:sans-serif">30</tspan></text> </g> <path - style="fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:1.00000155px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend-2)" d="m 81.981738,982.8355 38.518272,4e-5" id="path3180-1-4" inkscape:connector-type="polyline" @@ -560,7 +561,7 @@ inkscape:connection-end="#g3126-8-4" inkscape:connection-end-point="d4" /> <path - style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;marker-start:url(#DotM);display:inline" + style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99999986, 2.99999958;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#DotM)" d="m 131.24108,941.86211 -5e-5,31.9468" id="path4123-8" inkscape:connector-type="polyline" @@ -576,20 +577,21 @@ inkscape:connector-curvature="0" /> <text xml:space="preserve" - style="font-size:10px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" x="175" y="154.5" id="text5013" - sodipodi:linespacing="100%" transform="translate(0,852.36218)"><tspan sodipodi:role="line" id="tspan5015" x="175" - y="154.5">two heads!</tspan><tspan + y="154.5" + style="font-size:10px;line-height:1;font-family:sans-serif">two heads!</tspan><tspan sodipodi:role="line" x="175" y="164.5" - id="tspan5019">(merge or rebase)</tspan></text> + id="tspan5019" + style="font-size:10px;line-height:1;font-family:sans-serif">(merge or rebase)</tspan></text> <path style="color:#000000;fill:none;stroke:#707070;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend-2-0-5);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 170,152.5 c -16.09308,-9.35441 4.39162,-25.49226 -23.5,-23.5"
--- a/docs/from-mq.rst Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/from-mq.rst Tue Jun 04 11:08:44 2019 +0200 @@ -115,10 +115,10 @@ ```````` When you rewrite changesets, descendants of rewritten changesets are marked as -"unstable". You need to rewrite them on top of the new version of their +"orphan". You need to rewrite them on top of the new version of their ancestor. -The evolution extension adds a command to rewrite "unstable" +The evolution extension adds a command to rewrite "orphan" changesets::: $ hg evolve
--- a/docs/obs-terms.rst Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/obs-terms.rst Tue Jun 04 11:08:44 2019 +0200 @@ -12,39 +12,39 @@ marker registers a relation between an old obsoleted changeset and its newer version. -Old changesets are called **precursors** while their new versions are called -**successors**. A marker always registers a single *precursor* and: +Old changesets are called **predecessors** while their new versions are called +**successors**. A marker always registers a single *predecessor* and: -- no *successor*: the *precursor* is just discarded. -- one *successor*: the *precursor* has been rewritten -- multiple *successors*: the *precursor* were splits in multiple +- no *successor*: the *predecessor* is just discarded. +- one *successor*: the *predecessor* has been rewritten +- multiple *successors*: the *predecessor* were splits in multiple changesets. -.. The *precursors* and *successors* terms can be used on changeset directly: +.. The *predecessors* and *successors* terms can be used on changeset directly: -.. :precursors: of a changeset `A` are changesets used as *precursors* by +.. :predecessors: of a changeset `A` are changesets used as *predecessors* by .. obsolete marker using changeset `A` as *successors* .. :successors: of a changeset `B` are changesets used as *successors* by -.. obsolete marker using changeset `B` as *precursors* +.. obsolete marker using changeset `B` as *predecessors* Chaining obsolete markers is allowed to rewrite a changeset that is already a *successor*. This is a kind of *second order version control*. -To clarify ambiguous situations one can use **direct precursors** or +To clarify ambiguous situations one can use **direct predecessors** or **direct successors** to name changesets that are directly related. The set of all *obsolete markers* forms a direct acyclic graph the same way standard *parents*/*children* relation does. In this graph we have: -:any precursors: are transitive precursors of a changeset: *direct precursors* - and *precursors* of *precursors*. +:any predecessors: are transitive predecessors of a changeset: *direct predecessors* + and *predecessors* of *predecessors*. :any successors: are transitive successors of a changeset: *direct successors* and *successors* of *successors*) Obsolete markers may refer changesets that are not known locally. -So, *direct precursors* of a changeset may be unknown locally. -This is why we usually focus on the **first known precursors** of the rewritten +So, *direct predecessors* of a changeset may be unknown locally. +This is why we usually focus on the **first known predecessors** of the rewritten changeset. The same apply for *successors*. Changeset in *any successors* which are not **obsolete** are called @@ -66,13 +66,13 @@ | | | | | Changeset in either | Obsolete changeset is | *extinct* changeset is | | *draft* or *secret* | *mutable* used as a | *obsolete* which has only | -| phase. | *precursor*. | *obsolete* descendants. | +| phase. | *predecessor*. | *obsolete* descendants. | | | | | | | A changeset is used as | They can safely be: | -| | a *precursor* when at | | +| | a *predecessor* when at | | | | least one obsolete | - hidden in the UI, | | | marker refers to it | - silently excluded from | -| | as precursors. | pull and push operations | +| | as predecessors. | pull and push operations | | | | - mostly ignored | | | | - garbage collected | | | | | @@ -92,30 +92,31 @@ | | | | | +--------------------------+-----------------------------+ | | | | -| | **troubled** | **unstable** | +| | **unstable** | **orphan** | | | | | -| | *troubled* has | *unstable* is a changeset | +| | *unstable* has | *orphan* is a changeset | | | unresolved issue caused | with obsolete ancestors. | | | by *obsolete* relations. | | | | | | | | Possible issues are | It must be rebased on a | -| | listed in the next | non *troubled* base to | +| | listed in the next | non *unstable* base to | | | column. It is possible | solve the problem. | -| | for *troubled* | | +| | for *unstable* | | | | changeset to combine | (possible alternative name: | | | multiple issue at once. | precarious) | -| | (a.k.a. divergent and | | -| | unstable) +-----------------------------+ +| | (a.k.a. content-divergent| | +| | and orphan) +-----------------------------+ | | | | -| | (possible alternative | **bumped** | +| | (possible alternative | **phase-divergent** | | | names: unsettled, | | -| | troublesome | *bumped* is a changeset | -| | | that tries to be successor | -| | | of public changesets. | +| | troublesome | *phase-divergent* is a | +| | | changeset that tries to be | +| | | successor of a public | +| | | changeset. | | | | | | | | Public changeset can't | | | | be deleted and replace | -| | | *bumped* | +| | | *phase-divergent* | | | | need to be converted into | | | | an overlay to this public | | | | changeset. | @@ -125,17 +126,18 @@ | | | mindless, disenchanting) | | | | | | | +-----------------------------+ -| | | **divergent** | +| | | **content-divergent** | | | | | -| | | *divergent* is changeset | -| | | that appears when multiple | -| | | changesets are successors | -| | | of the same precursor. | +| | | *content-divergent* is a | +| | | changeset that appears when | +| | | multiple changesets are | +| | | successors of the same | +| | | predecessor. | | | | | -| | | *divergent* are solved | -| | | through a three ways merge | -| | | between the two | -| | | *divergent* , | +| | | *content-divergent* are | +| | | solved through a three way | +| | | merge between the two | +| | | *content-divergent* , | | | | using the last "obsolete- | | | | -common-ancestor" as the | | | | base. | @@ -151,7 +153,7 @@ | +--------------------------+-----------------------------+ | | | | | Mutable changesets which are neither *obsolete* or | -| | *troubled* are *"ok"*. | +| | *unstable* are *"ok"*. | | | | | | Do we really need a name for it ? *"ok"* is a pretty | | | crappy name :-/ other possibilities are: | @@ -168,8 +170,8 @@ | | | Rewriting operation refuse to work on immutable changeset. | | | -| Obsolete markers that refer an immutable changeset as precursors have | -| no effect on the precursors but may have effect on the successors. | +| Obsolete markers that refer an immutable changeset as predecessors have | +| no effect on the predecessors but may have effect on the successors. | | | | When a *mutable* changeset becomes *immutable* (changing its phase from draft| | to public) it is just *immutable* and loose any property of it's former | @@ -226,7 +228,7 @@ `````` Automatically resolve *troublesome* changesets -(*unstable*, *bumped* and *divergent*) +(*orphan*, *phase-divergent* and *content-divergent*) This is an important name as hg pull/push will suggest it the same way it suggest merging when you add heads.
--- a/docs/sharing.rst Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/sharing.rst Tue Jun 04 11:08:44 2019 +0200 @@ -433,7 +433,7 @@ It's not enough just to update ``public``, though! Other people also use the ``review`` repository, and right now it doesn't have Bob's latest amendment ("v3", revision 6:540b), nor does it know that the -precursor of that changeset ("v2", revision 5:0eb7) is obsolete. Thus, +predecessor of that changeset ("v2", revision 5:0eb7) is obsolete. Thus, Bob pushes to ``review`` as well:: $ hg push ../review @@ -508,12 +508,12 @@ but every competent chef keeps several around. Ever try to chop onions with a spoon?) -In the user guide, we saw examples of *unstbale* changesets, which are -the most common type of troubled changeset. (Recall that a +In the user guide, we saw examples of *orphan* changesets, which are +the most common type of unstable changeset. (Recall that a non-obsolete changeset with obsolete ancestors is an orphan.) -Two other types of troubles can happen: *divergent* and -*bumped* changesets. Both are more likely with shared mutable +Two other types of instability can happen: *content-divergent* and +*phase-divergent* changesets. Both are more likely with shared mutable history, especially mutable history shared by multiple developers. Setting up @@ -556,11 +556,11 @@ and add the same text. -Example 6: Divergent changesets -=============================== +Example 6: Content-divergent changesets +======================================= When an obsolete changeset has two successors, those successors are -*divergent*. One way to get into such a situation is by failing +*content-divergent*. One way to get into such a situation is by failing to communicate with your teammates. Let's see how that might happen. First, we'll have Bob commit a bug fix that could still be improved:: @@ -596,11 +596,11 @@ [...] added 1 changesets with 1 changes to 2 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) - 2 new divergent changesets + 2 new content-divergent changesets Figure 9 shows the situation in Bob's repository. - [figure SG09: Bob's repo with 2 heads for the 2 divergent changesets, 6:a360 and 7:e3f9; wc is at 6:a360; both are successors of obsolete 4:2fe6, hence divergence] + [figure SG09: Bob's repo with 2 heads for the 2 content-divergent changesets, 6:a360 and 7:e3f9; wc is at 6:a360; both are successors of obsolete 4:2fe6, hence divergence] Now we need to get out of trouble. As usual, the answer is to evolve history. :: @@ -619,7 +619,7 @@ (``internal:other``) that will take Alice's changes over Bob's. (You might wonder why Bob wouldn't prefer his own changes by using ``internal:local``. He's avoiding a `bug`_ in ``evolve`` that occurs -when evolving divergent changesets using ``internal:local``.) +when evolving content-divergent changesets using ``internal:local``.) # XXX this link does not work .. _`bug`: https://bitbucket.org/marmoute/mutable-history/issue/48/ @@ -685,25 +685,25 @@ 2:e011 is now public, so it can't be obsolete. When that changeset was obsolete, it made perfect sense for it to have a successor, namely Bob's amendment of Alice's fix (changeset 4:fe88). But it's illogical -for a public changeset to have a successor, so 4:fe88 is troubled: -it has become *bumped*. +for a public changeset to have a successor, so 4:fe88 is unstable: +it has become *phase-divergent*. - [figure SG07: 2:e011 now public not obsolete, 4:fe88 now bumped] + [figure SG07: 2:e011 now public not obsolete, 4:fe88 now phase-divergent] As usual when there's trouble in your repository, the solution is to evolve it:: $ hg evolve --all -Figure 8 illustrates Bob's repository after evolving away the bumped +Figure 8 illustrates Bob's repository after evolving away the phase-divergent changeset. Ignoring the obsolete changesets, Bob now has a nice, clean, simple history. His amendment of Alice's bug fix lives on, as changeset 5:227d—albeit with a software-generated commit message. (Bob should probably amend that changeset to improve the commit message.) But the important thing is that his repository no longer has any -troubled changesets, thanks to ``evolve``. +unstable changesets, thanks to ``evolve``. - [figure SG08: 5:227d is new, formerly bumped changeset 4:fe88 now hidden] + [figure SG08: 5:227d is new, formerly phase-divergent changeset 4:fe88 now hidden] Conclusion ---------- @@ -713,7 +713,7 @@ dull knife (never mind a rusty spoon). At the same time, an inattentive or careless user can do harm to himself or others. Mercurial with ``evolve`` goes to great lengths to limit the harm you -can do by trying to handle all possible types of “troubled” +can do by trying to handle all possible types of “unstable” changesets. Nevertheless, having a first-aid kit nearby does not mean you should stop being careful with sharp knives.
--- a/docs/tutorial/draft.md Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/tutorial/draft.md Tue Jun 04 11:08:44 2019 +0200 @@ -527,7 +527,7 @@ } ~~~ -## Unstable +## Orphan ~~~graphviz digraph G { @@ -538,21 +538,21 @@ node[group=main]; Root -> New; node[group=obsolete]; - Root -> Obsolete -> Unstable; + Root -> Obsolete -> Orphan; // Obsolescence links edge[dir=back, style=dotted, arrowtail=dot]; Obsolete -> New; Obsolete [fillcolor="#DFDFFF"]; - Unstable [fillcolor="#FF3535"]; + Orphan [fillcolor="#FF3535"]; Root[shape="circle"]; } ~~~ -## Bumped +## Phase-divergent -## Divergent +## Content-divergent ~~~graphviz digraph G { @@ -561,17 +561,17 @@ node[fixedsize=true, style="filled", width=1, height=1, fillcolor="#7F7FFF", shape="pentagon"]; Root -> Base; - Root -> Divergent1; - Root -> Divergent2; + Root -> Content-divergent1; + Root -> Content-divergent2; // Obsolescence links edge[dir=back, style=dotted, arrowtail=dot]; - Base -> Divergent1; - Base -> Divergent2; + Base -> Content-divergent1; + Base -> Content-divergent2; Base [shape="pentagon", fillcolor="#DFDFFF"]; - Divergent1 [fillcolor="#FF3535"]; - Divergent2 [fillcolor="#FF3535"]; + Content-divergent1 [fillcolor="#FF3535"]; + Content-divergent2 [fillcolor="#FF3535"]; Root[shape="circle"]; } ~~~
--- a/docs/tutorial/slides.md Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/tutorial/slides.md Tue Jun 04 11:08:44 2019 +0200 @@ -275,7 +275,7 @@ Notice the `x` in the log output which shows that a changeset is hidden. -In addition to hiding the original changeset, we are also storing additional information which is recording the relation between a changeset, the **precursor** and its **successor**. It basically stores the information that the commit **X** was rewritten into the commit **Y** by the user **U** at the date **D**. This piece of information is stored in something called an **obsolescence marker**. It will be displayed like this: +In addition to hiding the original changeset, we are also storing additional information which is recording the relation between a changeset, the **predecessor** and its **successor**. It basically stores the information that the commit **X** was rewritten into the commit **Y** by the user **U** at the date **D**. This piece of information is stored in something called an **obsolescence marker**. It will be displayed like this: ~~~graphviz-file graphs/fix-bug-3.dot @@ -285,7 +285,7 @@ ##### Rebase -**Successors** don't need to share anything with their **precursor**. They could have a different description message, user, date or even parents. +**Successors** don't need to share anything with their **predecessor**. They could have a different description message, user, date or even parents. Let's look at our earlier rebase example. The status before the rebase was: @@ -345,7 +345,7 @@ output/under-the-hood-amend-after-obslog-patch.log ~~~ -Obslog works both ways, as it can display **precursors** and **successors** with the `--all` option: +Obslog works both ways, as it can display **predecessors** and **successors** with the `--all` option: ```raw-file output/under-the-hood-amend-after-obslog-no-all.log @@ -852,13 +852,13 @@ output/edit-mid-stack.log ``` -The message `1 new orphan changesets` means that, by amending a changeset having a child, this child is now **unstable**, as we can see with the `hg stack` command: +The message `1 new orphan changesets` means that, by amending a changeset having a child, this child is now **orphan**, as we can see with the `hg stack` command: ```raw-file output/edit-mid-stack-after-stack.log ``` -`hg stack` tries to simplify the view for you. We have amended **b2**, and **b3**'s parent is the precursor version of **b2**, so it is not stable any more. It is now **orphan**. +`hg stack` tries to simplify the view for you. We have amended **b2**, and **b3**'s parent is the predecessor version of **b2**, so it is not stable any more. It is now **orphan**. For once, let's use log to see in detail in which situation we are: @@ -909,7 +909,7 @@ output/basic-stabilize-before-log-obsolete.log ``` -A changeset can also be **unstable**, meaning that it could be subject to one or more **instabilities**: +A changeset can also be **orphan**, meaning that it could be subject to one or more **instabilities**: * **orphan**, a changeset whose an ancestor is **obsolete**. * **content-divergent**, a changeset which has been rewritten in two different versions. @@ -1130,9 +1130,9 @@ À deux: -- troubles, divergence, orphan -- troubles visualization -- troubles resolution +- instability, divergence, orphan +- instability visualization +- instability resolution - collaboration workflow Parler du happy path d'abord --> @@ -1501,7 +1501,7 @@ $> hg update --rev t1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $> hg commit --amend -m "Step1" -<span style="color:gold;">3 new unstable changesets</span> +<span style="color:gold;">3 new orphan changesets</span> </pre> #### What have we done? @@ -1510,11 +1510,11 @@ $> hg log -G -T compact @ <span style="color:olive;">9</span>[tip] 1aa1be5ada40 Step1 | -| o <span style="color:olive;">8</span> cf90b2de7e65 Step4 <span style="color:red;">(unstable)</span> +| o <span style="color:olive;">8</span> cf90b2de7e65 Step4 <span style="color:red;">(orphan)</span> | | -| o <span style="color:olive;">7</span> e208d4205c8e Step3 <span style="color:red;">(unstable)</span> +| o <span style="color:olive;">7</span> e208d4205c8e Step3 <span style="color:red;">(orphan)</span> | | -| o <span style="color:olive;">6</span> 673ff300cf3a Step2 <span style="color:red;">(unstable)</span> +| o <span style="color:olive;">6</span> 673ff300cf3a Step2 <span style="color:red;">(orphan)</span> | | | <span style="color:grey;">x 5 8bb88a31dd28 Step</span> |/ @@ -1528,9 +1528,9 @@ $> hg stack ###### topic: <span style="color:green;">myfeature</span> ###### branch: feature -<span style="color:olive;">t4</span><span style="color:red;">$</span> Step4<span style="color:red;"> (unstable)</span> -<span style="color:olive;">t3</span><span style="color:red;">$</span> Step3<span style="color:red;"> (unstable)</span> -<span style="color:olive;">t2</span><span style="color:red;">$</span> Step2<span style="color:red;"> (unstable)</span> +<span style="color:olive;">t4</span><span style="color:red;">$</span> Step4<span style="color:red;"> (orphan)</span> +<span style="color:olive;">t3</span><span style="color:red;">$</span> Step3<span style="color:red;"> (orphan)</span> +<span style="color:olive;">t2</span><span style="color:red;">$</span> Step2<span style="color:red;"> (orphan)</span> <span style="color:teal;">t1</span><span style="color:teal;font-weight:bold;">@</span> <span style="color:teal;">Step1</span><span style="color:teal;font-weight:bold;"> (current)</span> <span style="color:grey;">t0^ Trunk</span> </pre> @@ -1545,8 +1545,8 @@ $> hg stack ###### topic: <span style="color:green;">myfeature</span> ###### branch: feature -<span style="color:olive;">t4</span><span style="color:red;">$</span> Step4<span style="color:red;"> (unstable)</span> -<span style="color:olive;">t3</span><span style="color:red;">$</span> Step3<span style="color:red;"> (unstable)</span> +<span style="color:olive;">t4</span><span style="color:red;">$</span> Step4<span style="color:red;"> (orphan)</span> +<span style="color:olive;">t3</span><span style="color:red;">$</span> Step3<span style="color:red;"> (orphan)</span> <span style="color:teal;">t2</span><span style="color:teal;font-weight:bold;">@</span> <span style="color:teal;">Step2</span><span style="color:teal;font-weight:bold;"> (current)</span> <span style="color:olive;">t1</span><span style="color:green;">:</span> Step1 <span style="color:grey;">t0^ Trunk</span> @@ -1566,7 +1566,7 @@ $> hg stack ###### topic: <span style="color:green;">myfeature</span> ###### branch: feature -<span style="color:olive;">t4</span><span style="color:red;">$</span> Step4<span style="color:red;"> (unstable)</span> +<span style="color:olive;">t4</span><span style="color:red;">$</span> Step4<span style="color:red;"> (orphan)</span> <span style="color:teal;">t3</span><span style="color:teal;font-weight:bold;">@</span> <span style="color:teal;">Step3</span><span style="color:teal;font-weight:bold;"> (current)</span> <span style="color:olive;">t2</span><span style="color:green;">:</span> Step2 <span style="color:olive;">t1</span><span style="color:green;">:</span> Step1 @@ -1838,13 +1838,13 @@ <pre> $> hg summary -<span style="color:olive;">parent: 10:890ac95deb83 </span>tip (unstable) +<span style="color:olive;">parent: 10:890ac95deb83 </span>tip (orphan) Head branch: feature commit: (clean) update: (current) phases: 9 draft -unstable: <span style="color:red;">1 changesets</span> +orphan: <span style="color:red;">1 changesets</span> topic: <span style="color:green;">myfeature</span> </pre> @@ -1864,7 +1864,7 @@ packaging prev-next split - stack_unstable_bug + stack_orphan_bug tutorial * tutorialtypos </pre> @@ -1883,7 +1883,7 @@ obscache (2 months ago) evolvecolor (2 months ago) obsrangecacheiterative (2 months ago) - stack_unstable_bug (2 months ago) + stack_orphan_bug (2 months ago) doc (3 months ago) split (3 months ago) import-checker (4 months ago) @@ -1906,9 +1906,9 @@ packaging (on branch: default, 1 changesets, <span style="color:teal;">2521 behind</span>) prev-next (on branch: default, 4 changesets, <span style="color:teal;">72 behind</span>) split (on branch: default, 1 changesets, <span style="color:teal;">492 behind</span>) - stack_unstable_bug (on branch: default, 1 changesets, <span style="color:teal;">474 behind</span>) + stack_orphan_bug (on branch: default, 1 changesets, <span style="color:teal;">474 behind</span>) tutorial (on branch: default, 2 changesets, <span style="color:teal;">492 behind</span>) -<span style="color:green;"> * </span><span style="color:green;">tutorialtypos </span> (on branch: default, 3 changesets, <span style="color:red;">1 troubled</span>, <span style="color:olive;">2 heads</span>, <span style="color:teal;">2 behind</span>) +<span style="color:green;"> * </span><span style="color:green;">tutorialtypos </span> (on branch: default, 3 changesets, <span style="color:red;">1 unstable</span>, <span style="color:olive;">2 heads</span>, <span style="color:teal;">2 behind</span>) </pre> #### Log @@ -1919,7 +1919,7 @@ | o 23abfc79b7ce | -| o 4302274177b9 <span style="color:red;">(unstable)</span> +| o 4302274177b9 <span style="color:red;">(orphan)</span> | | | <span style="color:grey;">x fba593aaaa10</span> |/ rewritten as c55cb2ee8a91; @@ -1931,10 +1931,10 @@ <pre> $> hg evolve --list <span style="color:gold;">9ac0d376e01c</span>: changelog: introduce a 'tiprev' method - <span style="color:red;">unstable</span>: <span style="color:grey;">52ec3072fe46</span> (obsolete parent) + <span style="color:red;">orphan</span>: <span style="color:grey;">52ec3072fe46</span> (obsolete parent) <span style="color:gold;">3efd3eab9860</span>: changelog: use 'tiprev()' in 'tip()' - <span style="color:red;">unstable</span>: <span style="color:red;">9ac0d376e01c</span> (unstable parent) + <span style="color:red;">orphan</span>: <span style="color:red;">9ac0d376e01c</span> (orphan parent) </pre> (see also `hg evolve --list --rev`) @@ -2025,7 +2025,7 @@ </table> -## Troubles +## Instability #### Evolution @@ -2033,7 +2033,7 @@ * Hide **most** of the complexity -* Help with unstable situations +* Help with orphan situations - Automatic detection @@ -2041,7 +2041,7 @@ #### instability -(currently: *troubles*) +(currently: *instability*) * **Orphans:** ancestors were rewritten @@ -2091,7 +2091,7 @@ <img src="https://media.giphy.com/media/46vrhWWOJ4wHC/giphy.gif"> -## extra - Troubles +## extra - Instability #### Obsolete @@ -2116,7 +2116,7 @@ } ~~~ -#### Unstable +#### Orphan Now called `orphan` @@ -2129,19 +2129,19 @@ node[group=main]; Root -> New; node[group=obsolete]; - Root -> Obsolete -> Unstable; + Root -> Obsolete -> Orphan; // Obsolescence links edge[dir=back, style=dotted, arrowtail=dot]; Obsolete -> New; Obsolete [fillcolor="#DFDFFF"]; - Unstable [fillcolor="#FF3535"]; + Orphan [fillcolor="#FF3535"]; Root[shape="circle"]; } ~~~ -#### Bumped +#### Phase-divergent Now called `Phase-divergent` @@ -2155,22 +2155,22 @@ Root -> New; node[group=obsolete]; Root -> Obsolete; - node[group=bumped]; - Root -> Bumped; + node[group=phase-divergent]; + Root -> Phase-divergent; // Obsolescence links edge[dir=back, style=dotted, arrowtail=dot]; Obsolete -> New; - Obsolete -> Bumped; + Obsolete -> Phase-divergent; New [shape="circle"]; Obsolete [fillcolor="#DFDFFF"]; - Bumped [fillcolor="#FF3535"]; + Phase-divergent [fillcolor="#FF3535"]; Root[shape="circle"]; } ~~~ -#### Divergent +#### Content-divergent Now called `Content-divergent` @@ -2181,17 +2181,17 @@ node[fixedsize=true, style="filled", width=1, height=1, fillcolor="#7F7FFF", shape="pentagon"]; Root -> Base; - Root -> Divergent1; - Root -> Divergent2; + Root -> Content-divergent1; + Root -> Content-divergent2; // Obsolescence links edge[dir=back, style=dotted, arrowtail=dot]; - Base -> Divergent1; - Base -> Divergent2; + Base -> Content-divergent1; + Base -> Content-divergent2; Base [shape="pentagon", fillcolor="#DFDFFF"]; - Divergent1 [fillcolor="#FF3535"]; - Divergent2 [fillcolor="#FF3535"]; + Content-divergent1 [fillcolor="#FF3535"]; + Content-divergent2 [fillcolor="#FF3535"]; Root[shape="circle"]; } ~~~
--- a/docs/tutorial/test-training.t Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/tutorial/test-training.t Tue Jun 04 11:08:44 2019 +0200 @@ -550,7 +550,7 @@ +Fix bug - $ html_output $TESTDIR/output/amend-obslog-all-after.log obslog --all -G -r "precursors(typo)" --hidden + $ html_output $TESTDIR/output/amend-obslog-all-after.log obslog --all -G -r "predecessors(typo)" --hidden @ <span style="color:olive;">708369dc1bfe</span> <span style="color:blue;">(17)</span> Fix bug | x <span style="color:olive;">5d48a444aba7</span> <span style="color:blue;">(1)</span> Fx bug @@ -1002,7 +1002,7 @@ Amend - $ html_output $TESTDIR/output/behind-the-hood-amend-before-hash-hidden.log log -G -r "::precursors(typo)" --hidden + $ html_output $TESTDIR/output/behind-the-hood-amend-before-hash-hidden.log log -G -r "::predecessors(typo)" --hidden x <span style="color:olive;">changeset: 1:5d48a444aba7</span> | branch: typo | user: Boris Feld <boris.feld@octobus.net> @@ -1016,7 +1016,7 @@ summary: ROOT -XXX Remove the command line to avoid showing precursors and hidden revset +XXX Remove the command line to avoid showing predecessors and hidden revset $ tail -n +2 $TESTDIR/output/behind-the-hood-amend-before-hash-hidden.log | tee $TESTDIR/output/behind-the-hood-amend-before-hash-hidden.log x <span style="color:olive;">changeset: 1:5d48a444aba7</span> @@ -1121,7 +1121,7 @@ Rebase - $ html_output $TESTDIR/output/behind-the-hood-rebase-before-hash-hidden.log log -G -r "::branch(build/v2) or ::precursors('build/linuxsupport-v2')" --hidden + $ html_output $TESTDIR/output/behind-the-hood-rebase-before-hash-hidden.log log -G -r "::branch(build/v2) or ::predecessors('build/linuxsupport-v2')" --hidden o <span style="color:olive;">changeset: 6:0e694460372e</span> | branch: build/v2 | parent: 2:f3bd0ab4ee87 @@ -2455,7 +2455,7 @@ $ html_output $TESTDIR/output/edit-mid-stack-after-stack.log stack ### target: build/linuxsupport-v2 (branch) - <span style="color:olive;">b3</span><span style="color:red;">$</span> Third commit on build/linuxsupport-v2<span style="color:red;"> (unstable)</span> + <span style="color:olive;">b3</span><span style="color:red;">$</span> Third commit on build/linuxsupport-v2<span style="color:red;"> (orphan)</span> <span style="color:teal;">b2</span><span style="color:teal;font-weight:bold;">@</span> <span style="color:teal;">Second commit on build/linuxsupport-v2</span><span style="color:teal;font-weight:bold;"> (current)</span> <span style="color:olive;">b1</span><span style="color:green;">:</span> First commit on build/linuxsupport-v2 b0^ New commit on build/v2 (base) @@ -2550,7 +2550,7 @@ 19 -> 20 [penwidth=2.0]; } -Basic troubles + stabilization +Basic instability + stabilization ------------------------------ $ cp -R $TESTTMP/evolve_training_repo $TESTDIR/base-repos/edit-mid-stack/ @@ -2579,7 +2579,7 @@ $ html_output $TESTDIR/output/basic-stabilize-before-evolve-list.log evolve --list 3d2c8a2356a2: Third commit on build/linuxsupport-v2 - unstable: 4686378320d7 (obsolete parent) + orphan: 4686378320d7 (obsolete parent) $ html_output $TESTDIR/output/basic-stabilize-next-evolve.log next --evolve move:[<span style="color:blue;">20</span>] Third commit on build/linuxsupport-v2 @@ -2593,7 +2593,7 @@ <span style="color:olive;">b1</span><span style="color:green;">:</span> First commit on build/linuxsupport-v2 b0^ New commit on build/v2 (base) - $ graph $TESTDIR/graphs/basic-stabilize-after-stack.dot -T "{shortest(node, 8)}" -r "(::. + ::precursors(.)) and branch(build/linuxsupport-v2)" --hidden --public=yes + $ graph $TESTDIR/graphs/basic-stabilize-after-stack.dot -T "{shortest(node, 8)}" -r "(::. + ::predecessors(.)) and branch(build/linuxsupport-v2)" --hidden --public=yes Wrote */graphs/basic-stabilize-after-stack.dot (glob) .. graphviz::
--- a/docs/user-guide.rst Sat Jun 01 02:30:14 2019 +0200 +++ b/docs/user-guide.rst Tue Jun 04 11:08:44 2019 +0200 @@ -239,10 +239,7 @@ .. figure:: figures/figure-ug02.svg Figure 2: safe history modification using ``evolve``: the original - revision 1 is preserved as an obsolete changeset. (The "temporary - amend commit", marked with T, is an implementation detail stemming - from limitations in Mercurial's current merge machinery. Future - versions of Mercurial will not create them.) + revision 1 is preserved as an obsolete changeset. In this case, the obsolete changesets are also *hidden*. That is the usual end state for obsolete changesets. However, many scenarios result @@ -256,21 +253,19 @@ As the name implies, hidden changesets are normally not visible. If you run ``hg log`` on the repository from Figure 2, Mercurial will -show revisions 0 and 3, but not 1 and 2. That's something you don't +show revisions 0 and 2, but not 1. That's something you don't see with plain vanilla Mercurial—normally, revision *N* is always followed by revision *N* + 1. This is just the visible manifestation of hidden changesets. If -revision 0 is followed by revision 3, that means there are two hidden -changesets, 1 and 2, in between. +revision 0 is followed by revision 2, that means there is a hidden +changeset, (1) in between. To see those hidden changesets, use the ``--hidden`` option:: $ hg --hidden log --graph --template '{rev}:{node|short} {desc|firstline}\n' - @ 3:934359450037 implement feature Y + @ 2:934359450037 implement feature Y | - | x 2:6c5f78d5d467 temporary amend commit for fe0ecd3bd2a4 - | | | x 1:fe0ecd3bd2a4 implement feature Y |/ o 0:08c4b6f4efc8 init @@ -288,7 +283,7 @@ ``prune`` (example 4 above) is the simplest history modification command provided by ``evolve``. All it does is mark the specified -changeset(s) obsolete, with no successor/precursor relationships +changeset(s) obsolete, with no successor/predecessor relationships involved. (If the working directory parent was one of the obsoleted changesets, ``prune`` updates back to a suitable ancestor.) @@ -336,7 +331,7 @@ So far, every obsolete changeset we have seen is also hidden. However, these are *not* the same thing—that's why they have different names. It's entirely possible to have obsolete changesets that are not -hidden. We'll see examples of that soon, when we create *unstable* +hidden. We'll see examples of that soon, when we create *orphan* changesets. Note that all hidden changesets are obsolete: hidden is a subset of @@ -349,15 +344,15 @@ Now that you've got a solid understanding of how ``evolve`` works in concert with changeset obsolescence, let's explore some more advanced -scenarios. All of these scenarios will involve *unstable* changesets, +scenarios. All of these scenarios will involve *orphan* changesets, which is an unavoidable consequence of obsolescence. What really sets ``evolve`` apart from other history modification mechanisms is the -fact that it recognizes troubles like unstable changesets and provides +fact that it recognizes instability like orphan changesets and provides a consistent way for you to get back to a stable repository. -(Incidentally, there are two other types of troubles that changesets -can get into with ``evolve``: they may be *divergent* or -*bumped*. Both of those states are more likely to occur when +(Incidentally, there are two other types of instability that changesets +can get into with ``evolve``: they may be *content-divergent* or +*phase-divergent*. Both of those states are more likely to occur when `sharing mutable history`_, so we won't cover them in this user guide.) .. _`sharing mutable history`: sharing.html @@ -393,17 +388,16 @@ $ hg amend At this point, revision 11 is *obsolete* and revisions 12 and 13—the -descendants of 11—are in a funny state: they are *unstable*. +descendants of 11—are in a funny state: they are *orphan*. .. figure:: figures/figure-ug06.svg Figure 6: amending a changeset with descendants means the amended changeset is obsolete but remains visible; its non-obsolete - descendants are *unstable*. The temporary amend commit, revision - 14, is hidden because it has no non-obsolete descendants. + descendants are *orphan*. All non-obsolete descendants of an obsolete changeset are considered -unstable. An interesting consequence of this is that revision 11 is +orphans. An interesting consequence of this is that revision 11 is still visible, even though it is obsolete. Obsolete changesets with non-obsolete descendants are not hidden. @@ -420,12 +414,12 @@ The end state, after ``evolve`` finishes, is that the original revisions (11-13) are obsolete and hidden. Their successor revisions -(15-17) replace them. +(14-16) replace them. .. figure:: figures/figure-ug07.svg Figure 7: evolve your repository (``hg evolve --all``) to take care - of instability. Unstable changesets become obsolete, and are + of instability. Orphan changesets become obsolete, and are replaced by successors just like the amended changeset was. Example 8: Prune an older changeset @@ -441,19 +435,19 @@ $ hg prune 19 1 changesets pruned - 1 new unstable changesets + 1 new orphan changesets As above, this leaves your repository in a funny intermediate state: revision 20 is the non-obsolete descendant of obsolete revision 19. -That is, revision 20 is unstable. +That is, revision 20 is an orphan. .. figure:: figures/figure-ug08.svg Figure 8: ``hg prune`` marks a changeset obsolete without creating a successor. Just like with ``hg amend``, non-obsolete descendants - of the pruned changeset are now unstable. + of the pruned changeset are now orphans. -As before, the solution to unstable changesets is to evolve your +As before, the solution to orphan changesets is to evolve your repository:: $ hg evolve --all @@ -485,11 +479,11 @@ $ hg update 22 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg uncommit file2.c - 1 new unstable changesets + 1 new orphan changesets $ hg status M file2.c -Now your repository has unstable changesets, so you need to evolve it. +Now your repository has orphan changesets, so you need to evolve it. However, ``hg evolve`` requires a clean working directory to resolve merge conflicts, so you need to decide what to do with ``file2.c``. @@ -530,7 +524,7 @@ $ hg update -q 26 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg uncommit -q file2.c # obsoletes rev 26, creates rev 28 - 1 new unstable changesets + 1 new orphan changesets $ hg status M file2.c @@ -541,7 +535,7 @@ Figure 11 shows the story so far: ``uncommit`` obsoleted revision 26 and created revision 28, the successor of 26. Then we committed revision 29, a child of 28. We still have to deal with the revision 27, -which is an unstable changeset. +which is an orphan changeset. .. figure:: figures/figure-ug11.svg @@ -549,7 +543,7 @@ separately will soon result in a two-headed repository. This is where things get tricky. As usual when a repository has -unstable changesets, we want to evolve it:: +orphan changesets, we want to evolve it:: $ hg evolve --all @@ -561,7 +555,7 @@ .. figure:: figures/figure-ug12.svg - Figure 12: ``evolve`` takes care of unstable changesets; it does + Figure 12: ``evolve`` takes care of orphan changesets; it does not solve all the world's problems. As usual when faced with a two-headed repository, you can either merge @@ -594,7 +588,7 @@ change in the future. Consider the history in Figure 12, where revision 27 is obsolete and the child of 26, also obsolete. If we ``hg touch 27``, that creates a new revision which is a non-obsolete child of 26—i.e., it is an -unstable. It's also *divergent*, another type of trouble that we'll learn +orphan. It's also *content-divergent*, another type of trouble that we'll learn about in the `next section`_. .. _`next section`: sharing.html
--- a/hgext3rd/evolve/__init__.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/evolve/__init__.py Tue Jun 04 11:08:44 2019 +0200 @@ -296,6 +296,7 @@ metadata, obscache, obsexchange, + obshashtree, obshistory, rewind, rewriteutil, @@ -345,6 +346,7 @@ eh.merge(debugcmd.eh) eh.merge(evolvecmd.eh) eh.merge(obsexchange.eh) +eh.merge(obshashtree.eh) eh.merge(safeguard.eh) eh.merge(obscache.eh) eh.merge(obshistory.eh) @@ -497,16 +499,16 @@ def _installalias(ui): if ui.config('alias', 'odiff', None) is None: ui.setconfig('alias', 'odiff', - "diff --hidden --rev 'limit(precursors(.),1)' --rev .", + "diff --hidden --rev 'limit(predecessors(.),1)' --rev .", 'evolve') -### Troubled revset symbol +### Unstable revset symbol -@eh.revsetpredicate('troubled()') -def revsettroubled(repo, subset, x): - """Changesets with troubles. +@eh.revsetpredicate('unstable()') +def revsetunstable(repo, subset, x): + """Changesets with instabilities. """ - revset.getargs(x, 0, 0, 'troubled takes no arguments') + revset.getargs(x, 0, 0, 'unstable takes no arguments') troubled = set() troubled.update(getrevs(repo, 'orphan')) troubled.update(getrevs(repo, 'phasedivergent')) @@ -515,6 +517,10 @@ troubled.sort() # set is non-ordered, enforce order return subset & troubled +@eh.revsetpredicate('troubled()') # legacy name +def revsettroubled(repo, subset, x): + return revsetunstable(repo, subset, x) + ### Obsolescence graph # XXX SOME MAJOR CLEAN UP TO DO HERE XXX @@ -620,9 +626,9 @@ return subset & suspended -@eh.revsetpredicate('precursors(set)') -def revsetprecursors(repo, subset, x): - """Immediate precursors of changesets in set. +@eh.revsetpredicate('predecessors(set)') +def revsetpredecessors(repo, subset, x): + """Immediate predecessors of changesets in set. """ s = revset.getset(repo, revset.fullreposet(repo), x) s = revset.baseset(_precursors(repo, s)) @@ -630,9 +636,14 @@ return subset & s -@eh.revsetpredicate('allprecursors(set)') -def revsetallprecursors(repo, subset, x): - """Transitive precursors of changesets in set. +@eh.revsetpredicate('precursors(set)') # legacy name for predecessors +def revsetprecursors(repo, subset, x): + return revsetpredecessors(repo, subset, x) + + +@eh.revsetpredicate('allpredecessors(set)') +def revsetallpredecessors(repo, subset, x): + """Transitive predecessors of changesets in set. """ s = revset.getset(repo, revset.fullreposet(repo), x) s = revset.baseset(_allprecursors(repo, s)) @@ -640,6 +651,11 @@ return subset & s +@eh.revsetpredicate('allprecursors(set)') # legacy name for allpredecessors +def revsetallprecursors(repo, subset, x): + return revsetallpredecessors(repo, subset, x) + + @eh.revsetpredicate('successors(set)') def revsetsuccessors(repo, subset, x): """Immediate successors of changesets in set. @@ -1148,13 +1164,18 @@ cmdutil.bailifchanged(repo) evolvestate = state.cmdstate(repo, opts={'command': 'next', 'bookmarkchanges': []}) - result = evolvecmd._solveone(ui, repo, repo[aspchildren], - evolvestate, opts.get('dry_run'), False, - lambda: None, category='orphan', - stacktmplt=opts.get('stacktemplate', False)) + with repo.wlock(), repo.lock(): + tr = repo.transaction("evolve") + with util.acceptintervention(tr): + result = evolvecmd._solveone(ui, repo, repo[aspchildren], + evolvestate, opts.get('dry_run'), + False, + lambda: None, category='orphan', + stacktmplt=opts.get('stacktemplate', + False)) # making sure a next commit is formed if result[0] and result[1]: - ui.status(_('working directory now at %s\n') + ui.status(_('working directory is now at %s\n') % ui.label(str(repo['.']), 'evolve.node')) return 0
--- a/hgext3rd/evolve/cmdrewrite.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/evolve/cmdrewrite.py Tue Jun 04 11:08:44 2019 +0200 @@ -149,11 +149,7 @@ def amendpatch(ui, repo, *pats, **opts): """logic for --patch flag of `hg amend` command.""" - lock = wlock = tr = None - try: - wlock = repo.wlock() - lock = repo.lock() - tr = repo.transaction('amend') + with repo.wlock(), repo.lock(), repo.transaction('amend') as tr: cmdutil.bailifchanged(repo) # first get the patch old = repo['.'] @@ -180,11 +176,6 @@ metadata=metadata) phases.retractboundary(repo, tr, old.phase(), [newnode]) hg.updaterepo(repo, newnode, True) - tr.close() - finally: - if tr is not None: - tr.release() - lockmod.release(lock, wlock) def _editandapply(ui, repo, pats, old, p1, fp, diffopts): newnode = None @@ -866,11 +857,7 @@ raise error.Abort(_('revisions must be specified with --fold')) revs = ['.'] - wlock = lock = None - try: - wlock = repo.wlock() - lock = repo.lock() - + with repo.wlock(), repo.lock(): revs = scmutil.revrange(repo, revs) if not opts['fold'] and len(revs) > 1: # TODO: handle multiple revisions. This is somewhat tricky because @@ -950,8 +937,6 @@ ui.status('%i changesets folded\n' % len(revs)) if newp1 is not None: hg.update(repo, newp1) - finally: - lockmod.release(lock, wlock) metadataopts = [ ('d', 'date', '', @@ -1121,7 +1106,7 @@ bmchanges = [(bookactive, newnode.node())] repo._bookmarks.applychanges(repo, tr, bmchanges) commands.update(ui, repo, newnode.hex()) - ui.status(_('working directory now at %s\n') + ui.status(_('working directory is now at %s\n') % ui.label(str(newnode), 'evolve.node')) if movebookmark: bookmarksmod.activate(repo, bookactive) @@ -1348,8 +1333,6 @@ This is used to "resurrect" changesets """ _checknotesize(ui, opts) - duplicate = opts['duplicate'] - allowdivergence = opts['allowdivergence'] revs = list(revs) revs.extend(opts['rev']) if not revs: @@ -1358,71 +1341,74 @@ if not revs: ui.write_err('no revision to touch\n') return 1 + + duplicate = opts['duplicate'] if not duplicate: rewriteutil.precheck(repo, revs, 'touch') tmpl = utility.shorttemplate displayer = compat.changesetdisplayer(ui, repo, {'template': tmpl}) - wlock = lock = tr = None - try: - wlock = repo.wlock() - lock = repo.lock() + with repo.wlock(), repo.lock(): tr = repo.transaction('touch') - revs.sort() # ensure parent are run first - newmapping = {} - for r in revs: - ctx = repo[r] - extra = ctx.extra().copy() - extra['__touch-noise__'] = random.randint(0, 0xffffffff) - # search for touched parent - p1 = ctx.p1().node() - p2 = ctx.p2().node() - p1 = newmapping.get(p1, p1) - p2 = newmapping.get(p2, p2) + with util.acceptintervention(tr): + touchnodes(ui, repo, revs, displayer, **opts) + +def touchnodes(ui, repo, revs, displayer, **opts): + duplicate = opts['duplicate'] + allowdivergence = opts['allowdivergence'] + revs.sort() # ensure parent are run first + newmapping = {} + for r in revs: + ctx = repo[r] + extra = ctx.extra().copy() + extra['__touch-noise__'] = random.randint(0, 0xffffffff) + # search for touched parent + p1 = ctx.p1().node() + p2 = ctx.p2().node() + p1 = newmapping.get(p1, p1) + p2 = newmapping.get(p2, p2) - if not (duplicate or allowdivergence): - # The user hasn't yet decided what to do with the revived - # cset, let's ask - sset = obsutil.successorssets(repo, ctx.node()) - nodivergencerisk = (len(sset) == 0 - or (len(sset) == 1 - and len(sset[0]) == 1 - and repo[sset[0][0]].rev() == ctx.rev() - )) - if nodivergencerisk: + if not (duplicate or allowdivergence): + # The user hasn't yet decided what to do with the revived + # cset, let's ask + sset = obsutil.successorssets(repo, ctx.node()) + nodivergencerisk = (len(sset) == 0 + or (len(sset) == 1 + and len(sset[0]) == 1 + and repo[sset[0][0]].rev() == ctx.rev() + )) + if nodivergencerisk: + duplicate = False + else: + displayer.show(ctx) + index = ui.promptchoice( + _("reviving this changeset will create divergence" + " unless you make a duplicate.\n(a)llow divergence or" + " (d)uplicate the changeset? $$ &Allowdivergence $$ " + "&Duplicate"), 0) + choice = ['allowdivergence', 'duplicate'][index] + if choice == 'allowdivergence': duplicate = False else: - displayer.show(ctx) - index = ui.promptchoice( - _("reviving this changeset will create divergence" - " unless you make a duplicate.\n(a)llow divergence or" - " (d)uplicate the changeset? $$ &Allowdivergence $$ " - "&Duplicate"), 0) - choice = ['allowdivergence', 'duplicate'][index] - if choice == 'allowdivergence': - duplicate = False - else: - duplicate = True + duplicate = True + + extradict = {'extra': extra} + new, unusedvariable = rewriteutil.rewrite(repo, ctx, [], ctx, + [p1, p2], + commitopts=extradict) + # store touched version to help potential children + newmapping[ctx.node()] = new - extradict = {'extra': extra} - new, unusedvariable = rewriteutil.rewrite(repo, ctx, [], ctx, - [p1, p2], - commitopts=extradict) - # store touched version to help potential children - newmapping[ctx.node()] = new - - if not duplicate: - metadata = {} - if opts.get('note'): - metadata['note'] = opts['note'] - obsolete.createmarkers(repo, [(ctx, (repo[new],))], - metadata=metadata, operation="touch") - phases.retractboundary(repo, tr, ctx.phase(), [new]) - if ctx in repo[None].parents(): - with repo.dirstate.parentchange(): - repo.dirstate.setparents(new, node.nullid) - tr.close() - finally: - lockmod.release(tr, lock, wlock) + if not duplicate: + metadata = {} + if opts.get('note'): + metadata['note'] = opts['note'] + obsolete.createmarkers(repo, [(ctx, (repo[new],))], + metadata=metadata, operation="touch") + tr = repo.currenttransaction() + phases.retractboundary(repo, tr, ctx.phase(), [new]) + if ctx in repo[None].parents(): + with repo.dirstate.parentchange(): + repo.dirstate.setparents(new, node.nullid) @eh.command( 'pick|grab',
--- a/hgext3rd/evolve/evolvecmd.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/evolve/evolvecmd.py Tue Jun 04 11:08:44 2019 +0200 @@ -64,6 +64,8 @@ formed. newnode can be node, when resolution led to no new commit. If bool is False, this is ".". """ + tr = repo.currenttransaction() + assert tr is not None displayer = None if stacktmplt: displayer = compat.changesetdisplayer(ui, repo, @@ -71,21 +73,20 @@ else: displayer = compat.changesetdisplayer(ui, repo, {'template': shorttemplate}) - with repo.wlock(), repo.lock(), repo.transaction("evolve"): - if 'orphan' == category: - result = _solveunstable(ui, repo, ctx, evolvestate, displayer, - dryrun, confirm, progresscb, - lastsolved=lastsolved) - elif 'phasedivergent' == category: - result = _solvephasedivergence(ui, repo, ctx, evolvestate, - displayer, dryrun, confirm, - progresscb) - elif 'contentdivergent' == category: - result = _solvedivergent(ui, repo, ctx, evolvestate, displayer, - dryrun, confirm, progresscb) - else: - assert False, "unknown trouble category: %s" % (category) - return result + if 'orphan' == category: + result = _solveunstable(ui, repo, ctx, evolvestate, displayer, + dryrun, confirm, progresscb, + lastsolved=lastsolved) + elif 'phasedivergent' == category: + result = _solvephasedivergence(ui, repo, ctx, evolvestate, + displayer, dryrun, confirm, + progresscb) + elif 'contentdivergent' == category: + result = _solvedivergent(ui, repo, ctx, evolvestate, displayer, + dryrun, confirm, progresscb) + else: + assert False, "unknown trouble category: %s" % (category) + return result def _solveunstable(ui, repo, orig, evolvestate, displayer, dryrun=False, confirm=False, progresscb=None, lastsolved=None): @@ -166,10 +167,10 @@ displayer.show(target) if confirm and ui.prompt('perform evolve? [Ny]', 'n') != 'y': raise error.Abort(_('evolve aborted by user')) - if progresscb: - progresscb() todo = 'hg rebase -r %s -d %s\n' % (orig, target) if dryrun: + if progresscb: + progresscb() repo.ui.write(todo) return (False, ".") else: @@ -180,12 +181,11 @@ newid = relocate(repo, orig, target, evolvestate, pctx, keepbranch, 'orphan') return (True, newid) - except MergeFailure: + except error.InterventionRequired: ops = {'current': orig.node()} evolvestate.addopts(ops) evolvestate.save() - raise error.InterventionRequired(_("fix conflicts and see `hg help " - "evolve.interrupted`")) + raise def _solvephasedivergence(ui, repo, bumped, evolvestate, displayer, dryrun=False, confirm=False, progresscb=None): @@ -204,7 +204,7 @@ msg = _('skipping %s : we do not handle merge yet\n') % bumped ui.write_err(msg) return (False, ".") - prec = repo.set('last(allprecursors(%d) and public())', bumped.rev()).next() + prec = repo.set('last(allpredecessors(%d) and public())', bumped.rev()).next() # For now we deny target merge if len(prec.parents()) > 1: msg = _('skipping: %s: public version is a merge, ' @@ -249,12 +249,11 @@ operation='evolve') bumped = new evolvestate['temprevs'].append(newnode) - except MergeFailure: + except error.InterventionRequired: evolvestate['current'] = bumped.hex() evolvestate['precursor'] = prec.hex() evolvestate.save() - raise error.InterventionRequired(_("fix conflicts and see `hg help " - "evolve.interrupted`")) + raise return _resolvephasedivergent(ui, repo, prec, bumped) @@ -276,43 +275,22 @@ newid = None replacementnode = None - # Create the new commit context - files = set() - copied = copies.pathcopies(prec, bumped) - precmanifest = prec.manifest().copy() - # 3.3.2 needs a list. - # future 3.4 don't detect the size change during iteration - # this is fishy - for key, val in list(bumped.manifest().iteritems()): - precvalue = precmanifest.get(key, None) - if precvalue is not None: - del precmanifest[key] - if precvalue != val: - files.add(key) - files.update(precmanifest) # add missing files - - # commit it - if files: # something to commit! - def filectxfn(repo, ctx, path): - if path in bumped: - fctx = bumped[path] - flags = fctx.flags() - mctx = compat.memfilectx(repo, ctx, fctx, flags, copied, path) - return mctx - return None + # Create the new commit context. This is done by applying the changes from + # the precursor to the bumped node onto the precursor. This is effectively + # like reverting to the bumped node. + wctx = context.overlayworkingctx(repo) + wctx.setbase(prec) + merge.update(repo, bumped.node(), ancestor=prec, mergeancestor=True, + branchmerge=True, force=False, wc=wctx) + if not wctx.isempty(): text = '%s update to %s:\n\n' % (TROUBLES['PHASEDIVERGENT'], prec) text += bumped.description() - - new = context.memctx(repo, - parents=[prec.node(), nodemod.nullid], - text=text, - files=files, - filectxfn=filectxfn, - user=bumped.user(), - date=bumped.date(), - extra=bumped.extra()) - - newid = repo.commitctx(new) + memctx = wctx.tomemctx(text, + parents=(prec.node(), nodemod.nullid), + date=bumped.date(), + extra=bumped.extra(), + user=bumped.user()) + newid = repo.commitctx(memctx) replacementnode = newid if newid is None: repo.ui.status(_('no changes to commit\n')) @@ -535,11 +513,10 @@ try: newother = relocate(repo, other, divergent.p1(), evolvestate, keepbranch=True) - except MergeFailure: + except error.InterventionRequired: evolvestate['current'] = other.node() evolvestate.save() - raise error.InterventionRequired(_("fix conflicts and see `hg help " - "evolve.interrupted`")) + raise evolvestate['old-other'] = other.node() other = repo[newother] evolvestate['relocating'] = False @@ -554,16 +531,26 @@ if not haspubdiv: return (res, newnode) else: - # when we have content-divergence with a public cset: after completing - # content divergence resolution the resulting node will be phase - # divergent with that same public cset. - # here newnode is phase divergent, lets resolve this divergence. + # we have content-divergence with a public cset: + # after performing content divergence resolution steps, possbile cases: + # 1) merging results in a new node: + # we need to perform phase divergence resolution + # 2) merging leads to same content as public cset: + # divergence has been resolved by creating markers if not res: # resolution was not successful, return return (res, newnode) if newnode == publicdiv.node(): - # no changes were found that are different from public cset + # case 2) + pubstr = str(publicdiv) + othstr = str(other) + msg = _('content divergence resolution between %s ' + '(public) and %s has same content as %s, ' + 'discarding %s\n') + msg %= (pubstr, othstr, pubstr, othstr) + repo.ui.status(msg) return (res, newnode) + # case 1) prec = publicdiv bumped = repo[newnode] return _resolvephasedivergent(ui, repo, prec=prec, bumped=bumped) @@ -571,12 +558,12 @@ def _mergecontentdivergents(repo, progresscb, divergent, other, base, evolvestate): if divergent not in repo[None].parents(): - repo.ui.status(_("updating to \"local\" side of the conflict: %s\n") % - divergent.hex()[:12]) + repo.ui.note(_("updating to \"local\" side of the conflict: %s\n") % + divergent.hex()[:12]) hg.updaterepo(repo, divergent.node(), False) # merging the two content-divergent changesets - repo.ui.status(_("merging \"other\" %s changeset '%s'\n") % - (TROUBLES['CONTENTDIVERGENT'], other.hex()[:12])) + repo.ui.note(_("merging \"other\" %s changeset '%s'\n") % + (TROUBLES['CONTENTDIVERGENT'], other.hex()[:12])) if progresscb: progresscb() mergeancestor = repo.changelog.isancestor(divergent.node(), other.node()) @@ -590,8 +577,6 @@ # conflicts while merging content-divergent changesets if compat.hasconflict(stats): - tr = repo.currenttransaction() - tr.close() evolvestate.save() raise error.InterventionRequired(_("fix conflicts and see `hg help " "evolve.interrupted`")) @@ -626,10 +611,7 @@ s = publicdiv.status() if not (s.added or s.removed or s.deleted or s.modified): # warn user if metadata is being lost - if otherdiv.description() != publicdiv.description(): - msg = _('content-divergent changesets differ by descriptions ' - 'only, discarding %s\n') % str(otherdiv) - repo.ui.warn(msg) + warnmetadataloss(repo, publicdiv, otherdiv) # no changes, create markers to resolve divergence obsolete.createmarkers(repo, [(otherdiv, (publicdiv,))], operation='evolve') @@ -646,13 +628,14 @@ desc = mergecommitmessages(ui, base.description(), divergent.description(), other.description()) + user = utility.mergeusers(ui, base, divergent, other) # new node if any formed as the replacement newnode = None mergehook(repo, base, divergent, other) - newnode = repo.commit(text=desc, user=other.user()) + newnode = repo.commit(text=desc, user=user) if newnode == divergent.node() or newnode is None: # no changes new = divergent @@ -686,6 +669,45 @@ finally: repo.ui.restoreconfig(emtpycommitallowed) +def warnmetadataloss(repo, local, other): + """warn the user for the metadata being lost while resolving + public content-divergence""" + + # needtowarn: aspects where we need to warn user + needtowarn = ['branch', 'topic', 'close'] + aspects = set() + localextra = local.extra() + otherextra = other.extra() + + for asp in needtowarn: + otherasp = otherextra.get(asp) + localasp = localextra.get(asp) + if otherasp and otherasp != localasp: + aspects.add(asp) + + if other.description() != local.description(): + aspects.add('description') + + if aspects: + # warn user + locstr = str(local) + othstr = str(other) + if 'close' in aspects: + filteredasp = aspects - {'close'} + if filteredasp: + msg = _('other divergent changeset %s is a closed branch head ' + 'and differs from local %s by "%s" only,' % + (othstr, locstr, ', '.join(sorted(filteredasp)))) + else: + msg = _('other divergent changeset %s is a closed branch head ' + 'and has same content as local %s,' % (othstr, locstr)) + else: + msg = _('other divergent changeset %s has same content as local %s' + ' and differs by "%s" only,' % + (othstr, locstr, ', '.join(sorted(aspects)))) + msg += _(' discarding %s\n' % othstr) + repo.ui.warn(msg) + def bypassphase(repo, relation, flag=0, metadata=None, operation='evolve'): """function to create a single obsmarker relation even for public csets where relation should be a single pair (prec, succ)""" @@ -868,9 +890,6 @@ return desc -class MergeFailure(error.Abort): - pass - def _orderrevs(repo, revs): """Compute an ordering to solve instability for the given revs @@ -956,25 +975,18 @@ tr = repo.currenttransaction() assert tr is not None - try: - r = _evolvemerge(repo, orig, dest, pctx, keepbranch) - if compat.hasconflict(r): # some conflict - raise error.Abort(_('unresolved merge conflicts ' - '(see hg help resolve)')) - nodenew = _relocatecommit(repo, orig, commitmsg) - except error.Abort as exc: + r = _evolvemerge(repo, orig, dest, pctx, keepbranch) + if compat.hasconflict(r): # some conflict with repo.dirstate.parentchange(): repo.setparents(dest.node(), orig.node()) repo.dirstate.write(tr) # fix up dirstate for copies and renames - copies.duplicatecopies(repo, repo[None], dest.rev(), orig.p1().rev()) + copies.duplicatecopies(repo, repo[None], dest.rev(), + orig.p1().rev()) dirstatedance(repo, dest, orig.node(), None) - - class LocalMergeFailure(MergeFailure, exc.__class__): - pass - exc.__class__ = LocalMergeFailure - tr.close() # to keep changes in this transaction (e.g. dirstate) - raise + raise error.InterventionRequired(_("fix conflicts and see `hg help " + "evolve.interrupted`")) + nodenew = _relocatecommit(repo, orig, commitmsg) _finalizerelocate(repo, orig, dest, nodenew, tr, category, evolvestate) return nodenew @@ -1109,7 +1121,7 @@ XXX this woobly function won't survive XXX """ repo = ctx._repo.unfiltered() - for base in repo.set('reverse(allprecursors(%d))', ctx.rev()): + for base in repo.set('reverse(allpredecessors(%d))', ctx.rev()): newer = obsutil.successorssets(ctx._repo, base.node()) # drop filter and solution including the original ctx newer = [n for n in newer if n and ctx.node() not in n] @@ -1186,7 +1198,7 @@ "orphan": repo.revs("orphan()"), "contentdivergent": repo.revs("contentdivergent()"), "phasedivergent": repo.revs("phasedivergent()"), - "all": repo.revs("troubled()"), + "all": repo.revs("unstable()"), } hintmap = { @@ -1307,7 +1319,7 @@ ctx = repo[rev] unpars = _preparelistctxs(ctx.parents(), lambda p: p.orphan()) obspars = _preparelistctxs(ctx.parents(), lambda p: p.obsolete()) - imprecs = _preparelistctxs(repo.set("allprecursors(%n)", ctx.node()), + imprecs = _preparelistctxs(repo.set("allpredecessors(%n)", ctx.node()), lambda p: not p.mutable()) dsets = divergentsets(repo, ctx) @@ -1436,10 +1448,7 @@ return opts -def _cleanup(ui, repo, startnode, showprogress, shouldupdate): - if showprogress: - compat.progress(ui, _('evolve'), None) - +def _cleanup(ui, repo, startnode, shouldupdate): if not shouldupdate: # Move back to startnode, or to its successor if the start node is # obsolete (perhaps made obsolete by the current `hg evolve`) @@ -1491,9 +1500,9 @@ ('', 'content-divergent', False, _('solves only content-divergent changesets')), ('', 'unstable', False, _('solves only unstable changesets (DEPRECATED)')), ('', 'orphan', False, _('solves only orphan changesets (default)')), - ('a', 'all', False, _('evolve all troubled changesets related to the ' - 'current working directory and its descendants')), - ('', 'update', True, _('update to the head of evolved changesets')), + ('a', 'all', None, _('evolve all troubled changesets related to the current' + ' working directory and its descendants (default)')), + ('', 'update', False, _('update to the head of evolved changesets')), ('c', 'continue', False, _('continue an interrupted evolution')), ('', 'stop', False, _('stop the interrupted evolution')), ('', 'abort', False, _('abort the interrupted evolution')), @@ -1526,8 +1535,8 @@ 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.) + changeset. Using ``--update`` will make evolve perform an update after any + successful evolve operation. Automatic mode only handles common use cases. For example, it avoids taking action in the case of ambiguity, and it ignores orphan changesets that are @@ -1536,9 +1545,9 @@ unless you explicitly 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 orphan changesets that can be rebased onto the - working copy parent. + invocations of :hg:`evolve` if you use ``--rev`` or ``--no-all``. Use + ``--all`` (which is the default behavior) to recursively select and evolve + all orphan changesets that can be rebased onto the working copy parent. This is more powerful than successive invocations, since ``--all`` handles ambiguous cases (e.g. orphan changesets with multiple children) by evolving all branches. @@ -1601,6 +1610,8 @@ contopt = opts['continue'] anyopt = opts['any'] allopt = opts['all'] + if allopt is None: + allopt = True startnode = repo['.'].node() dryrunopt = opts['dry_run'] confirmopt = opts['confirm'] @@ -1630,16 +1641,6 @@ return solveobswdp(ui, repo, opts) ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), 'evolve') - troubled = set(repo.revs('troubled()')) - - # Progress handling - seen = 1 - count = allopt and len(troubled) or 1 - showprogress = allopt - - def progresscb(): - if revopt or allopt: - compat.progress(ui, _('evolve'), seen, unit=_('changesets'), total=count) evolvestate = state.cmdstate(repo) # Continuation handling @@ -1647,7 +1648,7 @@ if not evolvestate: raise error.Abort(_('no interrupted evolve to continue')) evolvestate.load() - continueevolve(ui, repo, evolvestate, progresscb) + continueevolve(ui, repo, evolvestate) if evolvestate['command'] != 'evolve': evolvestate.delete() return @@ -1693,8 +1694,16 @@ if not revs: return _handlenotrouble(ui, repo, allopt, revopt, anyopt, targetcat) - # For the progress bar to show + # Progress handling + seen = 1 + showprogress = allopt or revopt count = len(revs) + + def progresscb(): + if showprogress: + compat.progress(ui, _('evolve'), seen, unit=_('changesets'), + total=count) + # Order the revisions revs = _orderrevs(repo, revs) @@ -1711,42 +1720,60 @@ lastsolved = None activetopic = getattr(repo, 'currenttopic', '') - for rev in revs: - curctx = repo[rev] - revtopic = getattr(curctx, 'topic', lambda: '')() - topicidx = getattr(curctx, 'topicidx', lambda: None)() - stacktmplt = False - # check if revision being evolved is in active topic to make sure - # that we can use stack aliases s# in evolve msgs. - if activetopic and (activetopic == revtopic) and topicidx is not None: - stacktmplt = True - progresscb() - ret = _solveone(ui, repo, curctx, evolvestate, dryrunopt, - confirmopt, progresscb, targetcat, - lastsolved=lastsolved, stacktmplt=stacktmplt) - seen += 1 - if ret[0]: - evolvestate['replacements'][curctx.node()] = ret[1] - lastsolved = ret[1] - else: - evolvestate['skippedrevs'].append(curctx.node()) + with repo.wlock(), repo.lock(): + tr = repo.transaction("evolve") + with util.acceptintervention(tr): + for rev in revs: + lastsolved = _solveonerev(ui, repo, rev, evolvestate, + activetopic, dryrunopt, + confirmopt, progresscb, + targetcat, lastsolved) + seen += 1 + + if showprogress: + compat.progress(ui, _('evolve'), None) + + _cleanup(ui, repo, startnode, shouldupdate) + +def _solveonerev(ui, repo, rev, evolvestate, activetopic, dryrunopt, confirmopt, + progresscb, targetcat, lastsolved): + """solves one trouble, including orphan merges - if evolvestate['orphanmerge']: - # we were processing an orphan merge with both parents obsolete, - # stabilized for second parent, re-stabilize for the first parent - ret = _solveone(ui, repo, repo[ret[1]], evolvestate, dryrunopt, - confirmopt, progresscb, targetcat, - stacktmplt=stacktmplt) - if ret[0]: - evolvestate['replacements'][curctx.node()] = ret[1] - lastsolved = ret[1] - else: - evolvestate['skippedrevs'].append(curctx.node()) + Like _solveone(), this solves one trouble. Unlike _solveone(), it + stabilizes for both parents of orphan merges. + """ + curctx = repo[rev] + revtopic = getattr(curctx, 'topic', lambda: '')() + topicidx = getattr(curctx, 'topicidx', lambda: None)() + stacktmplt = False + # check if revision being evolved is in active topic to make sure + # that we can use stack aliases s# in evolve msgs. + if activetopic and (activetopic == revtopic) and topicidx is not None: + stacktmplt = True + progresscb() + ret = _solveone(ui, repo, curctx, evolvestate, dryrunopt, + confirmopt, progresscb, targetcat, + lastsolved=lastsolved, stacktmplt=stacktmplt) + if ret[0]: + evolvestate['replacements'][curctx.node()] = ret[1] + lastsolved = ret[1] + else: + evolvestate['skippedrevs'].append(curctx.node()) - evolvestate['orphanmerge'] = False + if evolvestate['orphanmerge']: + # we were processing an orphan merge with both parents obsolete, + # stabilized for second parent, re-stabilize for the first parent + ret = _solveone(ui, repo, repo[ret[1]], evolvestate, dryrunopt, + confirmopt, progresscb, targetcat, + stacktmplt=stacktmplt) + if ret[0]: + evolvestate['replacements'][curctx.node()] = ret[1] + lastsolved = ret[1] + else: + evolvestate['skippedrevs'].append(curctx.node()) - progresscb() - _cleanup(ui, repo, startnode, showprogress, shouldupdate) + evolvestate['orphanmerge'] = False + return lastsolved def solveobswdp(ui, repo, opts): """this function updates to the successor of obsolete wdir parent""" @@ -1867,16 +1894,11 @@ # no backup of evolved cset versions needed repair.strip(repo.ui, repo, strippoints, False) - tr = None - try: - tr = repo.transaction('evolve') + with repo.transaction('evolve') as tr: # restoring bookmarks at there original place bmchanges = evolvestate['bookmarkchanges'] if bmchanges: repo._bookmarks.applychanges(repo, tr, bmchanges) - tr.close() - finally: - tr.release() evolvestate.delete() ui.status(_('evolve aborted\n')) @@ -1886,7 +1908,7 @@ raise error.Abort(_("unable to abort interrupted evolve, use 'hg " "evolve --stop' to stop evolve")) -def continueevolve(ui, repo, evolvestate, progresscb): +def continueevolve(ui, repo, evolvestate): """logic for handling of `hg evolve --continue`""" with repo.wlock(), repo.lock(): @@ -1898,22 +1920,34 @@ elif evolvestate['category'] == 'phasedivergent': _completephasedivergent(ui, repo, evolvestate) elif evolvestate['category'] == 'contentdivergent': - _continuecontentdivergent(ui, repo, evolvestate, progresscb) + _continuecontentdivergent(ui, repo, evolvestate, None) else: repo.ui.status(_("continuing interrupted '%s' resolution is not yet" " supported\n") % evolvestate['category']) return # make sure we are continuing evolve and not `hg next --evolve` - if evolvestate['command'] == 'evolve': - category = evolvestate['category'] - confirm = evolvestate['confirm'] - unfi = repo.unfiltered() - # lastsolved: keep track of successor of last troubled cset we - # evolved to confirm that if atop msg should be suppressed to remove - # redundancy - lastsolved = None - activetopic = getattr(repo, 'currenttopic', '') + if evolvestate['command'] != 'evolve': + return + + # Progress handling + seen = 1 + count = len(evolvestate['revs']) + + def progresscb(): + compat.progress(ui, _('evolve'), seen, unit=_('changesets'), + total=count) + + category = evolvestate['category'] + confirm = evolvestate['confirm'] + unfi = repo.unfiltered() + # lastsolved: keep track of successor of last troubled cset we + # evolved to confirm that if atop msg should be suppressed to remove + # redundancy + lastsolved = None + activetopic = getattr(repo, 'currenttopic', '') + tr = repo.transaction("evolve") + with util.acceptintervention(tr): for rev in evolvestate['revs']: # XXX: prevent this lookup by storing nodes instead of revnums curctx = unfi[rev] @@ -1937,13 +1971,12 @@ lastsolved = newnode[1] else: evolvestate['skippedrevs'].append(curctx.node()) - return + seen += 1 def _continuecontentdivergent(ui, repo, evolvestate, progresscb): """function to continue the interrupted content-divergence resolution.""" - tr = None - try: - tr = repo.transaction('evolve') + tr = repo.transaction('evolve') + with util.acceptintervention(tr): divergent = evolvestate['divergent'] base = evolvestate['base'] repo = repo.unfiltered() @@ -1986,10 +2019,7 @@ prec = repo[publicnode] bumped = repo[newnode] ret = _resolvephasedivergent(ui, repo, prec=prec, bumped=bumped) - tr.close() return ret - finally: - tr.release() def _completephasedivergent(ui, repo, evolvestate): """function to complete the interrupted phase-divergence resolution. @@ -1997,10 +2027,8 @@ First completes the relocation of the commit and then process resolving phase-divergence""" - tr = None - try: - # need to start transaction for bookmark changes - tr = repo.transaction('evolve') + # need to start transaction for bookmark changes + with repo.transaction('evolve'): node = _completerelocation(ui, repo, evolvestate) evolvestate['temprevs'].append(node) # resolving conflicts can lead to empty wdir and node can be None in @@ -2013,9 +2041,6 @@ prec = repo[evolvestate['precursor']] retvalue = _resolvephasedivergent(ui, repo, prec, newctx) evolvestate['replacements'][ctx.node()] = retvalue[1] - tr.close() - finally: - tr.release() def _completeorphan(ui, repo, evolvestate): """function to complete the interrupted orphan resolution"""
--- a/hgext3rd/evolve/metadata.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/evolve/metadata.py Tue Jun 04 11:08:44 2019 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -__version__ = '8.5.1' -testedwith = '4.4.2 4.5.2 4.6.2 4.7 4.8 4.9 5.0' -minimumhgversion = '4.4' +__version__ = '8.6.0.dev' +testedwith = '4.5.2 4.6.2 4.7 4.8 4.9 5.0' +minimumhgversion = '4.5' buglink = 'https://bz.mercurial-scm.org/'
--- a/hgext3rd/evolve/obsdiscovery.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/evolve/obsdiscovery.py Tue Jun 04 11:08:44 2019 +0200 @@ -17,7 +17,6 @@ import hashlib import heapq -import inspect import sqlite3 import struct import weakref @@ -30,7 +29,6 @@ node, obsolete, scmutil, - setdiscovery, util, ) from mercurial.i18n import _ @@ -53,12 +51,6 @@ wireprotov1server = wireprototypes from mercurial.wireproto import wirepeer, encodelist, decodelist -try: - from mercurial import dagutil - dagutil.revlogdag -except (ImportError, AttributeError): # <= hg-4.7 - from . import dagutil - _pack = struct.pack _unpack = struct.unpack _calcsize = struct.calcsize @@ -77,81 +69,6 @@ ### Code performing discovery ### ################################## -def findcommonobsmarkers(ui, local, remote, probeset, - initialsamplesize=100, - fullsamplesize=200): - # from discovery - roundtrips = 0 - cl = local.changelog - dag = dagutil.revlogdag(cl) - missing = set() - common = set() - undecided = set(probeset) - totalnb = len(undecided) - heads = [rev for rev in cl.headrevs() if rev != node.nullrev] - compat.progress(ui, _("comparing with other"), 0, total=totalnb, - unit=_("changesets")) - if util.safehasattr(setdiscovery, '_takefullsample'): - # hg compat <= hg-4.9 (e5ece0f46b40) - _takefullsample = setdiscovery._takefullsample - else: - obsdiscov = setdiscovery.partialdiscovery(local, heads) - _takefullsample = obsdiscov.takefullsample - if remote.capable('_evoext_obshash_1'): - getremotehash = remote.evoext_obshash1 - localhash = _obsrelsethashtreefm1(local) - else: - getremotehash = remote.evoext_obshash - localhash = _obsrelsethashtreefm0(local) - - while undecided: - - ui.note(_("sampling from both directions\n")) - if len(undecided) < fullsamplesize: - sample = set(undecided) - else: - if util.safehasattr(setdiscovery, '_takefullsample'): - # compat <= hg-4.9 (e5ece0f46b40) - if len(inspect.getargspec(_takefullsample)[0]) == 4: - # Mercurial 4.8 changed calling convention. - sample = _takefullsample(local, None, undecided, - size=fullsamplesize) - else: - # hg <= 4.7 version - sample = _takefullsample(dag, undecided, - size=fullsamplesize) - else: - sample = _takefullsample(None, size=fullsamplesize) - - roundtrips += 1 - compat.progress(ui, _("comparing with other"), totalnb - len(undecided), - total=totalnb, unit=_("changesets")) - ui.debug("query %i; still undecided: %i, sample size is: %i\n" - % (roundtrips, len(undecided), len(sample))) - # indices between sample and externalized version must match - sample = list(sample) - remotehash = getremotehash(dag.externalizeall(sample)) - - yesno = [localhash[ix][1] == remotehash[si] - for si, ix in enumerate(sample)] - - commoninsample = set(n for i, n in enumerate(sample) if yesno[i]) - common.update(dag.ancestorset(commoninsample, common)) - - missinginsample = [n for i, n in enumerate(sample) if not yesno[i]] - missing.update(dag.descendantset(missinginsample, missing)) - - undecided.difference_update(missing) - undecided.difference_update(common) - - compat.progress(ui, _("comparing with other"), None) - result = dag.headsetofconnecteds(common) - ui.debug("%d total queries\n" % roundtrips) - - if not result: - return set([node.nullid]) - return dag.externalizeall(result) - def findmissingrange(ui, local, remote, probeset, initialsamplesize=100, fullsamplesize=200): @@ -824,161 +741,6 @@ return _obshashrange_capabilities(oldcap, repo, proto) wireprotov1server.commands['capabilities'] = (newcap, args) -############################# -### Tree Hash computation ### -############################# - -# Dash computed from a given changesets using all markers relevant to it and -# the obshash of its parents. This is similar to what happend for changeset -# node where the parent is used in the computation - -def _canobshashtree(repo, remote): - return remote.capable('_evoext_obshash_0') - -@eh.command( - 'debugobsrelsethashtree', - [('', 'v0', None, 'hash on marker format "0"'), - ('', 'v1', None, 'hash on marker format "1" (default)')], _('')) -def debugobsrelsethashtree(ui, repo, v0=False, v1=False): - """display Obsolete markers, Relevant Set, Hash Tree - changeset-node obsrelsethashtree-node - - It computed form the "orsht" of its parent and markers - relevant to the changeset itself.""" - if v0 and v1: - raise error.Abort('cannot only specify one format') - elif v0: - treefunc = _obsrelsethashtreefm0 - else: - treefunc = _obsrelsethashtreefm1 - - for chg, obs in treefunc(repo): - ui.status('%s %s\n' % (node.hex(chg), node.hex(obs))) - -def _obsrelsethashtreefm0(repo): - return _obsrelsethashtree(repo, obsolete._fm0encodeonemarker) - -def _obsrelsethashtreefm1(repo): - return _obsrelsethashtree(repo, obsolete._fm1encodeonemarker) - -def _obsrelsethashtree(repo, encodeonemarker): - cache = [] - unfi = repo.unfiltered() - markercache = {} - compat.progress(repo.ui, _("preparing locally"), 0, total=len(unfi), - unit=_("changesets")) - for i in unfi: - ctx = unfi[i] - entry = 0 - sha = hashlib.sha1() - # add data from p1 - for p in ctx.parents(): - p = p.rev() - if p < 0: - p = node.nullid - else: - p = cache[p][1] - if p != node.nullid: - entry += 1 - sha.update(p) - tmarkers = repo.obsstore.relevantmarkers([ctx.node()]) - if tmarkers: - bmarkers = [] - for m in tmarkers: - if m not in markercache: - markercache[m] = encodeonemarker(m) - bmarkers.append(markercache[m]) - bmarkers.sort() - for m in bmarkers: - entry += 1 - sha.update(m) - if entry: - cache.append((ctx.node(), sha.digest())) - else: - cache.append((ctx.node(), node.nullid)) - compat.progress(repo.ui, _("preparing locally"), i, total=len(unfi), - unit=_("changesets")) - compat.progress(repo.ui, _("preparing locally"), None) - return cache - -def _obshash(repo, nodes, version=0): - if version == 0: - hashs = _obsrelsethashtreefm0(repo) - elif version == 1: - hashs = _obsrelsethashtreefm1(repo) - else: - assert False - nm = repo.changelog.nodemap - revs = [nm.get(n) for n in nodes] - return [r is None and node.nullid or hashs[r][1] for r in revs] - -@eh.addattr(localrepo.localpeer, 'evoext_obshash') -def local_obshash(peer, nodes): - return _obshash(peer._repo, nodes) - -@eh.addattr(localrepo.localpeer, 'evoext_obshash1') -def local_obshash1(peer, nodes): - return _obshash(peer._repo, nodes, version=1) - -@eh.addattr(wirepeer, 'evoext_obshash') -def peer_obshash(self, nodes): - d = self._call("evoext_obshash", nodes=encodelist(nodes)) - try: - return decodelist(d) - except ValueError: - self._abort(error.ResponseError(_("unexpected response:"), d)) - -@eh.addattr(wirepeer, 'evoext_obshash1') -def peer_obshash1(self, nodes): - d = self._call("evoext_obshash1", nodes=encodelist(nodes)) - try: - return decodelist(d) - except ValueError: - self._abort(error.ResponseError(_("unexpected response:"), d)) - -@compat.wireprotocommand(eh, 'evoext_obshash', 'nodes') -def srv_obshash(repo, proto, nodes): - return encodelist(_obshash(repo, decodelist(nodes))) - -@compat.wireprotocommand(eh, 'evoext_obshash1', 'nodes') -def srv_obshash1(repo, proto, nodes): - return encodelist(_obshash(repo, decodelist(nodes), - version=1)) - -def _obshash_capabilities(orig, repo, proto): - """wrapper to advertise new capability""" - caps = orig(repo, proto) - if (obsolete.isenabled(repo, obsolete.exchangeopt) - and repo.ui.configbool('experimental', 'evolution.obsdiscovery')): - - # Compat hg 4.6+ (2f7290555c96) - bytesresponse = False - if util.safehasattr(caps, 'data'): - bytesresponse = True - caps = caps.data - - caps = caps.split() - caps.append(b'_evoext_obshash_0') - caps.append(b'_evoext_obshash_1') - caps.sort() - caps = b' '.join(caps) - - # Compat hg 4.6+ (2f7290555c96) - if bytesresponse: - caps = wireprototypes.bytesresponse(caps) - return caps - -@eh.extsetup -def obshash_extsetup(ui): - extensions.wrapfunction(wireprotov1server, 'capabilities', - _obshash_capabilities) - # wrap command content - oldcap, args = wireprotov1server.commands['capabilities'] - - def newcap(repo, proto): - return _obshash_capabilities(oldcap, repo, proto) - wireprotov1server.commands['capabilities'] = (newcap, args) - ########################################## ### trigger discovery during exchange ### ########################################## @@ -998,19 +760,10 @@ missing += pushop.outgoing.missing return missing -def _pushobshashtree(pushop, commonrevs): - repo = pushop.repo.unfiltered() - remote = pushop.remote - node = repo.changelog.node - common = findcommonobsmarkers(pushop.ui, repo, remote, commonrevs) - revs = list(repo.revs('only(%ln, %ln)', pushop.futureheads, common)) - return [node(r) for r in revs] - # available discovery method, first valid is used # tuple (canuse, perform discovery)) obsdiscoveries = [ (_canobshashrange, _pushobshashrange), - (_canobshashtree, _pushobshashtree), ] obsdiscovery_skip_message = """\ @@ -1094,10 +847,6 @@ % len(revs)) boundaries['missing'] = findmissingrange(repo.ui, unfi, pullop.remote, revs) - elif remote.capable('_evoext_obshash_0'): - obsexcmsg(repo.ui, "looking for common markers in %i nodes\n" - % len(revs)) - boundaries['common'] = findcommonobsmarkers(repo.ui, unfi, remote, revs) else: boundaries['common'] = [node.nullid] return boundaries
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hgext3rd/evolve/obshashtree.py Tue Jun 04 11:08:44 2019 +0200 @@ -0,0 +1,98 @@ +############################# +### Tree Hash computation ### +############################# + +# Status: dropable +# +# This module don't need to be upstreamed and can be dropped if its maintenance +# become a burden + +import hashlib + +from mercurial import ( + error, + node, + obsolete, +) + +from mercurial.i18n import _ + +from . import ( + compat, + exthelper, +) + +eh = exthelper.exthelper() + +# Dash computed from a given changesets using all markers relevant to it and +# the obshash of its parents. This is similar to what happend for changeset +# node where the parent is used in the computation +@eh.command( + 'debugobsrelsethashtree', + [('', 'v0', None, 'hash on marker format "0"'), + ('', 'v1', None, 'hash on marker format "1" (default)')], _('')) +def debugobsrelsethashtree(ui, repo, v0=False, v1=False): + """display Obsolete markers, Relevant Set, Hash Tree + changeset-node obsrelsethashtree-node + + It computed form the "obs-hash-tree" value of its parent and markers + relevant to the changeset itself. + + The obs-hash-tree is no longer used for any user facing logic. However the + debug command stayed as an inspection tool. It does not seem supseful to + upstream the command with the rest of evolve. We can safely drop it.""" + if v0 and v1: + raise error.Abort('cannot only specify one format') + elif v0: + treefunc = _obsrelsethashtreefm0 + else: + treefunc = _obsrelsethashtreefm1 + + for chg, obs in treefunc(repo): + ui.status('%s %s\n' % (node.hex(chg), node.hex(obs))) + +def _obsrelsethashtreefm0(repo): + return _obsrelsethashtree(repo, obsolete._fm0encodeonemarker) + +def _obsrelsethashtreefm1(repo): + return _obsrelsethashtree(repo, obsolete._fm1encodeonemarker) + +def _obsrelsethashtree(repo, encodeonemarker): + cache = [] + unfi = repo.unfiltered() + markercache = {} + compat.progress(repo.ui, _("preparing locally"), 0, total=len(unfi), + unit=_("changesets")) + for i in unfi: + ctx = unfi[i] + entry = 0 + sha = hashlib.sha1() + # add data from p1 + for p in ctx.parents(): + p = p.rev() + if p < 0: + p = node.nullid + else: + p = cache[p][1] + if p != node.nullid: + entry += 1 + sha.update(p) + tmarkers = repo.obsstore.relevantmarkers([ctx.node()]) + if tmarkers: + bmarkers = [] + for m in tmarkers: + if m not in markercache: + markercache[m] = encodeonemarker(m) + bmarkers.append(markercache[m]) + bmarkers.sort() + for m in bmarkers: + entry += 1 + sha.update(m) + if entry: + cache.append((ctx.node(), sha.digest())) + else: + cache.append((ctx.node(), node.nullid)) + compat.progress(repo.ui, _("preparing locally"), i, total=len(unfi), + unit=_("changesets")) + compat.progress(repo.ui, _("preparing locally"), None) + return cache
--- a/hgext3rd/evolve/rewind.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/evolve/rewind.py Tue Jun 04 11:08:44 2019 +0200 @@ -136,7 +136,7 @@ rewinded.update(scmutil.revrange(repo, revsto)) if revsfrom: succs = scmutil.revrange(repo, revsfrom) - rewinded.update(unfi.revs('precursors(%ld)', succs)) + rewinded.update(unfi.revs('predecessors(%ld)', succs)) if not rewinded: raise error.Abort('no revision to rewind to')
--- a/hgext3rd/evolve/templatekw.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/evolve/templatekw.py Tue Jun 04 11:08:44 2019 +0200 @@ -24,17 +24,32 @@ ### template keywords if util.safehasattr(templatekw, 'compatlist'): + @eh.templatekeyword('instabilities', requires=set(['ctx', 'templ'])) + def showinstabilities(context, mapping): + """List of strings. Evolution instabilities affecting the changeset + (zero or more of "orphan", "content-divergent" or "phase-divergent").""" + ctx = context.resource(mapping, 'ctx') + return templatekw.compatlist(context, mapping, 'instability', + ctx.instabilities(), + plural='instabilities') + @eh.templatekeyword('troubles', requires=set(['ctx', 'templ'])) - def showtroubles(context, mapping): + def showtroubles(context, mapping): # legacy name for instabilities ctx = context.resource(mapping, 'ctx') return templatekw.compatlist(context, mapping, 'trouble', ctx.instabilities(), plural='troubles') else: # older template API in hg < 4.6 + @eh.templatekeyword('instabilities') + def showinstabilities(**args): + """List of strings. Evolution instabilities affecting the changeset + (zero or more of "orphan", "content-divergent" or "phase-divergent").""" + ctx = args['ctx'] + return templatekw.showlist('instability', ctx.instabilities(), args, + plural='instabilities') + @eh.templatekeyword('troubles') def showtroubles(**args): - """List of strings. Evolution troubles affecting the changeset - (zero or more of "unstable", "divergent" or "bumped").""" ctx = args['ctx'] return templatekw.showlist('trouble', ctx.instabilities(), args, plural='troubles')
--- a/hgext3rd/evolve/utility.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/evolve/utility.py Tue Jun 04 11:08:44 2019 +0200 @@ -187,3 +187,26 @@ return None return revs[intidx - 1] + +def mergeusers(ui, base, divergent, other): + """ merges the users from two divergent changesets using three-way merge + and return the user that will be used as the author of resolved cset""" + baseuser = base.user() + divuser = divergent.user() + othuser = other.user() + + if divuser == othuser: + return divuser + else: + if baseuser == divuser: + return othuser + elif baseuser == othuser: + return divuser + else: + # all three are different, lets concatenate the two authors + # XXX: should we let the user know about concatenation of authors + # by printing some message (or maybe in verbose mode) + users = set(divuser.split(', ')) + users.update(othuser.split(', ')) + user = ', '.join(sorted(users)) + return user
--- a/hgext3rd/topic/__init__.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/topic/__init__.py Tue Jun 04 11:08:44 2019 +0200 @@ -104,6 +104,12 @@ In addition, the topic extension adds a ``--publish`` flag on :hg:`push`. When used, the pushed revisions are published if the push succeeds. It also applies to common revisions selected by the push. + +One can prevent any publishing to happens in a repository using:: + + [experimental] + topic.allow-publish = no + """ from __future__ import absolute_import @@ -154,36 +160,36 @@ cmdtable = {} command = registrar.command(cmdtable) colortable = {'topic.active': 'green', - 'topic.list.troubledcount': 'red', + 'topic.list.unstablecount': 'red', 'topic.list.headcount.multiple': 'yellow', 'topic.list.behindcount': 'cyan', 'topic.list.behinderror': 'red', - 'topic.stack.index': 'yellow', - 'topic.stack.index.base': 'none dim', - 'topic.stack.desc.base': 'none dim', - 'topic.stack.shortnode.base': 'none dim', - 'topic.stack.state.base': 'dim', - 'topic.stack.state.clean': 'green', - 'topic.stack.index.current': 'cyan', # random pick - 'topic.stack.state.current': 'cyan bold', # random pick - 'topic.stack.desc.current': 'cyan', # random pick - 'topic.stack.shortnode.current': 'cyan', # random pick - 'topic.stack.state.orphan': 'red', - 'topic.stack.state.content-divergent': 'red', - 'topic.stack.state.phase-divergent': 'red', - 'topic.stack.summary.behindcount': 'cyan', - 'topic.stack.summary.behinderror': 'red', - 'topic.stack.summary.headcount.multiple': 'yellow', + 'stack.index': 'yellow', + 'stack.index.base': 'none dim', + 'stack.desc.base': 'none dim', + 'stack.shortnode.base': 'none dim', + 'stack.state.base': 'dim', + 'stack.state.clean': 'green', + 'stack.index.current': 'cyan', # random pick + 'stack.state.current': 'cyan bold', # random pick + 'stack.desc.current': 'cyan', # random pick + 'stack.shortnode.current': 'cyan', # random pick + 'stack.state.orphan': 'red', + 'stack.state.content-divergent': 'red', + 'stack.state.phase-divergent': 'red', + 'stack.summary.behindcount': 'cyan', + 'stack.summary.behinderror': 'red', + 'stack.summary.headcount.multiple': 'yellow', # default color to help log output and thg # (first pick I could think off, update as needed 'log.topic': 'green_background', 'topic.active': 'green', } -__version__ = '0.14.1' +__version__ = '0.15.0.dev' -testedwith = '4.4.2 4.5.2 4.6.2 4.7 4.8 4.9 5.0' -minimumhgversion = '4.4' +testedwith = '4.5.2 4.6.2 4.7 4.8 4.9 5.0' +minimumhgversion = '4.5' buglink = 'https://bz.mercurial-scm.org/' if util.safehasattr(registrar, 'configitem'): @@ -205,6 +211,9 @@ configitem('experimental', 'topic.publish-bare-branch', default=False, ) + configitem('experimental', 'topic.allow-publish', + default=configitems.dynamicdefault, + ) configitem('_internal', 'keep-topic', default=False, ) @@ -256,7 +265,6 @@ stackrev = re.compile(r'^s\d+$') topicrev = re.compile(r'^t\d+$') -branchrev = re.compile(r'^b\d+$') hastopicext = common.hastopicext @@ -279,11 +287,6 @@ if not tname: raise error.Abort(_('cannot resolve "%s": no active topic') % name) revs = list(stack.stack(repo, topic=topic)) - elif branchrev.match(name): - ttype = 'branch' - idx = int(name[1:]) - tname = branch = repo[None].branch() - revs = list(stack.stack(repo, branch=branch)) if revs is not None: try: @@ -294,7 +297,7 @@ elif ttype == 'branch': msg = _('cannot resolve "%s": %s "%s" has only %d non-public changesets') raise error.Abort(msg % (name, ttype, tname, len(revs) - 1)) - # b0 or t0 or s0 can be None + # t0 or s0 can be None if r == -1 and idx == 0: msg = _('the %s "%s" has no %s') raise error.Abort(msg % (ttype, tname, name)) @@ -502,6 +505,23 @@ flow.publishbarebranch(repo, tr2) origclose() tr.close = close + allow_publish = self.ui.configbool('experimental', + 'topic.allow-publish', + True) + if not allow_publish: + if util.safehasattr(tr, 'validator'): # hg <= 4.7 + origvalidator = tr.validator + else: + origvalidator = tr._validator + + def validator(tr2): + repo = reporef() + flow.reject_publish(repo, tr2) + return origvalidator(tr2) + if util.safehasattr(tr, 'validator'): # hg <= 4.7 + tr.validator = validator + else: + tr._validator = validator # real transaction start ct = self.currenttopic @@ -575,7 +595,8 @@ self._extra[constants.extrakey] = '' def wrapadd(orig, cl, manifest, files, desc, transaction, p1, p2, user, - date=None, extra=None, p1copies=None, p2copies=None): + date=None, extra=None, p1copies=None, p2copies=None, + filesadded=None, filesremoved=None): if constants.extrakey in extra and not extra[constants.extrakey]: extra = extra.copy() del extra[constants.extrakey] @@ -585,6 +606,11 @@ kwargs['p1copies'] = p1copies if p2copies is not None: kwargs['p2copies'] = p2copies + # hg <= 5.0 (f385ba70e4af) + if filesadded is not None: + kwargs['filesadded'] = filesadded + if filesremoved is not None: + kwargs['filesremoved'] = filesremoved return orig(cl, manifest, files, desc, transaction, p1, p2, user, date=date, extra=extra, **kwargs) @@ -709,8 +735,8 @@ ct = repo.currenttopic if clear: if ct: - empty = stack.stack(repo, topic=ct).changesetcount == 0 - if empty: + st = stack.stack(repo, topic=ct) + if not st: ui.status(_('clearing empty topic "%s"\n') % ct) return _changecurrenttopic(repo, None) @@ -1024,11 +1050,11 @@ fm.write('changesetcount', '%d changesets', data.changesetcount, label='topic.list.changesetcount') - if data.troubledcount: + if data.unstablecount: fm.plain(', ') - fm.write('troubledcount', '%d troubled', - data.troubledcount, - label='topic.list.troubledcount') + fm.write('unstablecount', '%d unstable', + data.unstablecount, + label='topic.list.unstablecount') headcount = len(data.heads) if 1 < headcount: @@ -1208,8 +1234,8 @@ if t and t != ot: repo.ui.status(_("switching to topic %s\n") % t) if ot and not t: - empty = stack.stack(repo, topic=ot).changesetcount == 0 - if empty: + st = stack.stack(repo, topic=ot) + if not st: repo.ui.status(_('clearing empty topic "%s"\n') % ot) elif ist0: repo.ui.status(_("preserving the current topic '%s'\n") % ot)
--- a/hgext3rd/topic/flow.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/topic/flow.py Tue Jun 04 11:08:44 2019 +0200 @@ -55,6 +55,19 @@ else: repo.ui.warn(_("unknown 'topic-mode.server': %s\n" % mode)) +def reject_publish(repo, tr): + """prevent a transaction to be publish anything""" + published = set() + for r, (o, n) in tr.changes['phases'].items(): + if n == phases.public: + published.add(r) + if published: + r = min(published) + msg = "rejecting publishing of changeset %s" % repo[r] + if len(published) > 1: + msg += ' and %d others' % (len(published) - 1) + raise error.Abort(msg) + def wrappush(orig, repo, remote, *args, **kwargs): """interpret the --publish flag and pass it to the push operation""" newargs = kwargs.copy()
--- a/hgext3rd/topic/stack.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/topic/stack.py Tue Jun 04 11:08:44 2019 +0200 @@ -77,6 +77,11 @@ def __getitem__(self, index): return self.revs[index] + def __nonzero__(self): + return bool(self._revs) + + __bool__ = __nonzero__ + def index(self, item): return self.revs.index(item) @@ -175,7 +180,7 @@ return len(self._revs) @util.propertycache - def troubledcount(self): + def unstablecount(self): return len([r for r in self._revs if self._repo[r].isunstable()]) @util.propertycache @@ -210,11 +215,9 @@ branches = set([self._repo[None].branch()]) return branches -def labelsgen(prefix, labelssuffix): - """ Takes a label prefix and a list of suffixes. Returns a string of the prefix - formatted with each suffix separated with a space. - """ - return ' '.join(prefix % suffix.replace(' ', '-') for suffix in labelssuffix) +def labelsgen(prefix, parts): + fmt = prefix + '.%s' + return prefix + ' ' + ' '.join(fmt % p.replace(' ', '-') for p in parts) def showstack(ui, repo, branch=None, topic=None, opts=None): if opts is None: @@ -242,41 +245,38 @@ if topic == repo.currenttopic: label = 'topic.active' - data = stackdata(repo, branch=branch, topic=topic) - empty = False - if data['changesetcount'] == 0: - empty = True + st = stack(repo, branch, topic) if topic is not None: fm.plain(_('### topic: %s') % ui.label(topic, label), - label='topic.stack.summary.topic') + label='stack.summary.topic') - if 1 < data['headcount']: + if 1 < len(st.heads): fm.plain(' (') - fm.plain('%d heads' % data['headcount'], - label='topic.stack.summary.headcount.multiple') + fm.plain('%d heads' % len(st.heads), + label='stack.summary.headcount.multiple') fm.plain(')') fm.plain('\n') fm.plain(_('### target: %s (branch)') - % '+'.join(data['branches']), # XXX handle multi branches - label='topic.stack.summary.branches') + % '+'.join(st.branches), # XXX handle multi branches + label='stack.summary.branches') if topic is None: - if 1 < data['headcount']: + if 1 < len(st.heads): fm.plain(' (') - fm.plain('%d heads' % data['headcount'], - label='topic.stack.summary.headcount.multiple') + fm.plain('%d heads' % len(st.heads), + label='stack.summary.headcount.multiple') fm.plain(')') else: - if data['behindcount'] == -1: + if st.behindcount == -1: fm.plain(', ') - fm.plain('ambiguous rebase destination - %s' % data['behinderror'], - label='topic.stack.summary.behinderror') - elif data['behindcount']: + fm.plain('ambiguous rebase destination - %s' % st.behinderror, + label='stack.summary.behinderror') + elif st.behindcount: fm.plain(', ') - fm.plain('%d behind' % data['behindcount'], label='topic.stack.summary.behindcount') + fm.plain('%d behind' % st.behindcount, label='stack.summary.behindcount') fm.plain('\n') - if empty: + if not st: fm.plain(_("(stack is empty)\n")) st = stack(repo, branch=branch, topic=topic) @@ -318,7 +318,7 @@ states = [] if opts.get('children'): expr = 'children(%d) and merge() - %ld' - revisions = repo.revs(expr, ctx.rev(), st.revs[1:]) + revisions = repo.revs(expr, ctx.rev(), st._revs) if len(revisions) > 0: states.append('external-children') @@ -354,43 +354,35 @@ states.sort() fm.startitem() + fm.context(ctx=ctx) fm.data(isentry=isentry) if idx is None: - fm.plain(' ') - if ui.verbose: - fm.plain(' ') - else: - fm.write('topic.stack.index', '%s%%d' % prefix, idx, - label='topic.stack.index ' + labelsgen('topic.stack.index.%s', states)) + spacewidth = 0 if ui.verbose: - fm.write('topic.stack.shortnode', '(%s)', short(ctx.node()), - label='topic.stack.shortnode ' + labelsgen('topic.stack.shortnode.%s', states)) - fm.write('topic.stack.state.symbol', '%s', symbol, - label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states)) + # parentheses plus short node hash + spacewidth = 2 + 12 + if ui.debugflag: + # parentheses plus full node hash + spacewidth = 2 + 40 + # s# alias width + spacewidth += 2 + fm.plain(' ' * spacewidth) + else: + fm.write('stack_index', '%s%%d' % prefix, idx, + label=labelsgen('stack.index', states)) + if ui.verbose: + fm.write('node', '(%s)', fm.hexfunc(ctx.node()), + label=labelsgen('stack.shortnode', states)) + else: + fm.data(node=fm.hexfunc(ctx.node())) + fm.write('symbol', '%s', symbol, + label=labelsgen('stack.state', states)) fm.plain(' ') - fm.write('topic.stack.desc', '%s', ctx.description().splitlines()[0], - label='topic.stack.desc ' + labelsgen('topic.stack.desc.%s', states)) - fm.condwrite(states != ['clean'] and idx is not None, 'topic.stack.state', - ' (%s)', fm.formatlist(states, 'topic.stack.state'), - label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states)) + fm.write('desc', '%s', ctx.description().splitlines()[0], + label=labelsgen('stack.desc', states)) + fm.condwrite(states != ['clean'] and idx is not None, 'state', + ' (%s)', fm.formatlist(states, 'stack.state'), + label=labelsgen('stack.state', states)) fm.plain('\n') fm.end() - -def stackdata(repo, branch=None, topic=None): - """get various data about a stack - - :changesetcount: number of non-obsolete changesets in the stack - :troubledcount: number on troubled changesets - :headcount: number of heads on the topic - :behindcount: number of changeset on rebase destination - """ - data = {} - current = stack(repo, branch, topic) - data['changesetcount'] = current.changesetcount - data['troubledcount'] = current.troubledcount - data['headcount'] = len(current.heads) - data['behindcount'] = current.behindcount - data['behinderror'] = current.behinderror - data['branches'] = current.branches - return data
--- a/hgext3rd/topic/topicmap.py Sat Jun 01 02:30:14 2019 +0200 +++ b/hgext3rd/topic/topicmap.py Tue Jun 04 11:08:44 2019 +0200 @@ -108,7 +108,6 @@ # logic copy-pasted from cmdutil.commitstatus() if opts is None: opts = {} - ctx = repo[node] if ctx.topic(): return ret parents = ctx.parents()
--- a/tests/test-discovery-obshashrange.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-discovery-obshashrange.t Tue Jun 04 11:08:44 2019 +0200 @@ -191,7 +191,7 @@ sending hello command sending between command remote: * (glob) - remote: capabilities: _evoext_getbundle_obscommon _evoext_obshash_0 _evoext_obshash_1 _evoext_obshashrange_v1 batch * (glob) + remote: capabilities: _evoext_getbundle_obscommon _evoext_obshashrange_v1 batch * (glob) remote: 1 sending protocaps command query 1; heads @@ -320,7 +320,7 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> sending hello command (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> sending between command (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> remote: * (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> remote: capabilities: _evoext_getbundle_obscommon _evoext_obshash_0 _evoext_obshash_1 _evoext_obshashrange_v1 batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Aphases%3Dheads%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache%0Astream%3Dv2 changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> remote: capabilities: _evoext_getbundle_obscommon _evoext_obshashrange_v1 batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Aphases%3Dheads%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache%0Astream%3Dv2 changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> remote: 1 (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> sending protocaps command (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> query 1; heads (glob) @@ -1176,8 +1176,6 @@ $ hg debugcapabilities ssh://user@dummy/with-evolve | grep _evoext _evoext_getbundle_obscommon - _evoext_obshash_0 - _evoext_obshash_1 _evoext_obshashrange_v1 $ hg debugcapabilities ssh://user@dummy/without-evolve | grep _evoext [1] @@ -1196,8 +1194,6 @@ $ hg debugcapabilities http://localhost:$HGPORT/with-evolve| grep _evoext _evoext_getbundle_obscommon - _evoext_obshash_0 - _evoext_obshash_1 _evoext_obshashrange_v1 $ hg debugcapabilities http://localhost:$HGPORT/without-evolve| grep _evoext [1] @@ -1214,8 +1210,6 @@ [1] $ hg debugcapabilities http://localhost:$HGPORT/with-evolve| grep _evoext _evoext_getbundle_obscommon - _evoext_obshash_0 - _evoext_obshash_1 _evoext_obshashrange_v1 $ killdaemons.py
--- a/tests/test-evolve-abort-orphan.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-abort-orphan.t Tue Jun 04 11:08:44 2019 +0200 @@ -127,7 +127,7 @@ cleaning up things for next testing - $ hg evolve --all + $ hg evolve --all --update move:[4] added d atop:[5] added c merging d @@ -526,7 +526,7 @@ $ hg next --evolve move:[2] added b atop:[4] added a - working directory now at c1f4718020e3 + working directory is now at c1f4718020e3 $ hg next --evolve move:[3] added c atop:[5] added b
--- a/tests/test-evolve-content-divergent-basic.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-content-divergent-basic.t Tue Jun 04 11:08:44 2019 +0200 @@ -20,7 +20,7 @@ > git = 1 > unified = 0 > [ui] - > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{troubles}]\n + > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{instabilities}]\n > [extensions] > EOF $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH @@ -139,8 +139,6 @@ merge:[2] divergent with: [3] divergent base: [1] added b - updating to "local" side of the conflict: 593c57f2117e - merging "other" content-divergent changeset '8374d2ddc3a4' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 45bf1312f454 $ hg log -G @@ -231,13 +229,12 @@ o 0:8fa14d15e168 added hgignore () [default] draft - $ hg evolve --content-divergent --config ui.interactive=True<<EOF + $ hg evolve --content-divergent --no-all --config ui.interactive=True << EOF > c > EOF merge:[6] added d with: [5] added d base: [4] added d - merging "other" content-divergent changeset '9e5dffcb3d48' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved content divergent changesets on different branches. choose branch for the resolution changeset. (a) default or (b) watwat or (c) foobar? c @@ -288,11 +285,10 @@ o 0:8fa14d15e168 added hgignore () [default] draft - $ hg evolve --content-divergent + $ hg evolve --content-divergent --no-all merge:[9] added a d with bar in it, expect some beers with: [8] added d base: [7] added d - merging "other" content-divergent changeset 'f621d00f5f0e' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at a9d6fd6b5e40 @@ -337,11 +333,10 @@ o 0:8fa14d15e168 added hgignore () [default] draft - $ hg evolve --content-divergent + $ hg evolve --content-divergent --no-all merge:[12] foo to d with: [11] foo to d base: [10] added a d with bar in it, expect some beers - merging "other" content-divergent changeset 'b10b07a394f1' merging d warning: conflicts while merging d! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -397,11 +392,10 @@ o 0:8fa14d15e168 added hgignore () [default] draft - $ hg evolve --content-divergent + $ hg evolve --content-divergent --no-all merge:[15] wat to d, wat? with: [14] bar to d, expect beers base: [13] foo to d - merging "other" content-divergent changeset '27f0463f169a' merging d warning: conflicts while merging d! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -505,14 +499,14 @@ Stabilize it - $ hg evolve -qn --confirm --content-divergent + $ hg evolve -qn --confirm --content-divergent --no-all merge:[3] More addition with: [2] More addition base: [1] More addition perform evolve? [Ny] n abort: evolve aborted by user [255] - $ echo y | hg evolve -qn --confirm --config ui.interactive=True --content-divergent + $ echo y | hg evolve -qn --confirm --config ui.interactive=True --content-divergent --no-all merge:[3] More addition with: [2] More addition base: [1] More addition @@ -523,7 +517,7 @@ hg up -C 867e43582046 && hg revert --all --rev tip && hg commit -m "`hg log -r 051337a45e7c --template={desc}`"; - $ hg evolve -v --content-divergent + $ hg evolve -v --content-divergent --no-all merge:[3] More addition with: [2] More addition base: [1] More addition @@ -601,18 +595,17 @@ o 0:6569b5a81c7e@default(public) bk:[] root - $ hg evolve -qn --content-divergent + $ hg evolve -qn --content-divergent --no-all hg update -c 13c1b75640a1 && hg merge 5bf84d1d71d1 && hg commit -m "auto merge resolving conflict between 13c1b75640a1 and 5bf84d1d71d1"&& hg up -C 867e43582046 && hg revert --all --rev tip && hg commit -m "`hg log -r 13c1b75640a1 --template={desc}`"; - $ hg evolve --content-divergent + $ hg evolve --content-divergent --no-all merge:[6] More addition (2) with: [4] More addition base: [1] More addition - merging "other" content-divergent changeset '5bf84d1d71d1' merging a warning: conflicts while merging a! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -960,8 +953,6 @@ merge:[2] E2 with: [3] E3 base: [1] E1 - updating to "local" side of the conflict: 084ae625fa51 - merging "other" content-divergent changeset '19ed1bf64a2c' merging numbers merging romans 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-evolve-content-divergent-corner-cases.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-content-divergent-corner-cases.t Tue Jun 04 11:08:44 2019 +0200 @@ -20,7 +20,7 @@ > git = 1 > unified = 0 > [ui] - > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{troubles}]\n + > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{instabilities}]\n > [extensions] > EOF $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH @@ -72,12 +72,10 @@ o 0:9092f1db7931@default(draft) added a [] - $ hg evolve --all --any --content-divergent + $ hg evolve --all --any --content-divergent --update merge:[2] divergent with: [3] divergent base: [1] added b - updating to "local" side of the conflict: 593c57f2117e - merging "other" content-divergent changeset '8374d2ddc3a4' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 45bf1312f454 $ hg log -G @@ -137,8 +135,6 @@ merge:[6] add cdivergent1 with: [7] add _c base: [5] add _c - updating to "local" side of the conflict: e3ff64ce8d4c - merging "other" content-divergent changeset 'b2ae71172042' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved nothing changed working directory is now at e3ff64ce8d4c @@ -199,15 +195,14 @@ > [extensions] > testextension=$TESTTMP/test_extension.py > EOF - $ hg evolve --all + $ hg evolve nothing to evolve on current working copy parent (do you want to use --content-divergent) [2] $ hg evolve --content-divergent - merge:[3] bdivergent - with: [2] bdivergent + merge:[2] bdivergent + with: [3] bdivergent base: [1] add _b - merging "other" content-divergent changeset '05a6b6a9e633' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 73ff357d3975 @@ -275,7 +270,7 @@ o 0:9092f1db7931 added a () [default] draft - $ hg evolve --content-divergent --any + $ hg evolve --content-divergent --any --update merge:[5] updated e with: [6] updated e base: [4] added e @@ -308,8 +303,6 @@ $ hg evolve --continue evolving 6:de4ea3103326 "updated e" - updating to "local" side of the conflict: ff6f7cd76a7c - merging "other" content-divergent changeset 'e504bd82de7e' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 83b1664a580f @@ -363,11 +356,10 @@ Resolve the divergence, only "a" should be removed - $ hg evolve --content-divergent - merge:[3] delete a - with: [2] delete a + $ hg evolve --content-divergent --update + merge:[2] delete a + with: [3] delete a base: [1] delete a - merging "other" content-divergent changeset '0825dcee2670' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 7ca6a9fafcf6 $ hg glog
--- a/tests/test-evolve-content-divergent-interrupted.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-content-divergent-interrupted.t Tue Jun 04 11:08:44 2019 +0200 @@ -79,11 +79,10 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --content-divergent + $ hg evolve --content-divergent --no-all merge:[6] added d with: [5] added d base: [4] added d - merging "other" content-divergent changeset 'e49523854bc8' merging d warning: conflicts while merging d! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -191,14 +190,10 @@ merge:[8] added c with: [10] added c base: [3] added c - updating to "local" side of the conflict: 2ba73e31f264 - merging "other" content-divergent changeset '491e10505bae' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[5] added d with: [7] added d base: [4] added d - updating to "local" side of the conflict: e49523854bc8 - merging "other" content-divergent changeset 'f0f1694f123e' merging d warning: conflicts while merging d! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -358,8 +353,6 @@ with: [8] added d base: [4] added d rebasing "other" content-divergent changeset 33e4442acf98 on ca1b80f7960a - updating to "local" side of the conflict: e49523854bc8 - merging "other" content-divergent changeset 'a663d1567f0b' merging d warning: conflicts while merging d! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -447,11 +440,10 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --content-divergent + $ hg evolve --content-divergent --no-all merge:[6] added d with: [5] added d base: [4] added d - merging "other" content-divergent changeset 'e49523854bc8' merging d warning: conflicts while merging d! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -504,8 +496,6 @@ with: [7] added d base: [4] added d rebasing "other" content-divergent changeset 517d4375cb72 on ca1b80f7960a - updating to "local" side of the conflict: e49523854bc8 - merging "other" content-divergent changeset '606ad96040fc' merging d warning: conflicts while merging d! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
--- a/tests/test-evolve-content-divergent-meta.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-content-divergent-meta.t Tue Jun 04 11:08:44 2019 +0200 @@ -9,7 +9,7 @@ $ cat >> $HGRCPATH <<EOF > [alias] - > glog = log -GT "{rev}:{node|short} {desc|firstline}\n {phase} {troubles}\n\n" + > glog = log -GT "{rev}:{node|short} {desc|firstline}\n {phase} {instabilities}\n\n" > [phases] > publish = False > [extensions] @@ -86,10 +86,7 @@ merge:[3] added c e with: [4] added c base: [2] added c - updating to "local" side of the conflict: 0c9267e23c9d - merging "other" content-divergent changeset '6c06cda6dc99' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 443bd2972210 Make sure resultant cset don't replace the initial user with user running the command: $ hg log -r tip @@ -100,3 +97,63 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: added c e + $ cd .. + +Testing the three way merge logic for user of content divergent changesets +-------------------------------------------------------------------------- + + $ hg init mergeusers + $ cd mergeusers + $ for ch in a b c; do + > touch $ch + > hg add $ch + > hg ci -m "added "$ch + > done; + + $ hg amend -m "updated c" + $ hg up -r 'desc("added c")' --hidden -q + updated to hidden changeset 2b3c31fe982d + (hidden revision '2b3c31fe982d' was rewritten as: 464e35020fd0) + working directory parent is obsolete! (2b3c31fe982d) + $ echo coco > c + +1) when one user is different wrt base +-------------------------------------- + +Insert a diverging author name: + $ hg amend -u 'foouser' + 2 new content-divergent changesets + +Run automatic evolution: + $ hg evolve --content-divergent + merge:[3] updated c + with: [4] added c + base: [2] added c + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + working directory is now at 932d6ceb7672 + + $ hg log -r tip | grep "^user" + user: foouser + + $ hg strip . -q --config extensions.strip= + 2 new content-divergent changesets + +2) when both the user are different wrt base +-------------------------------------------- + + $ hg up -r 'max(desc("updated c"))' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg amend -u 'baruser' + +Run automatic evolution: + $ hg evolve --content-divergent + merge:[4] added c + with: [5] updated c + base: [2] added c + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + working directory is now at 202a770d8c1f + + $ hg log -r tip | grep "^user" + user: baruser, foouser + + $ cd ..
--- a/tests/test-evolve-content-divergent-relocation.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-content-divergent-relocation.t Tue Jun 04 11:08:44 2019 +0200 @@ -69,8 +69,6 @@ with: [6] added b base: [2] added b rebasing "other" content-divergent changeset da4b96f4a8d6 on c7586e2a9264 - updating to "local" side of the conflict: 7ed0642d644b - merging "other" content-divergent changeset '11f849d7159f' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 171614c9a791 @@ -109,13 +107,12 @@ move:[3] added c atop:[8] added b move:[4] added d - working directory is now at 4ae4427ee9f8 $ hg glog - @ 10:4ae4427ee9f8 added d + o 10:4ae4427ee9f8 added d | () [default] draft o 9:917281f93fcb added c | () [default] draft - o 8:171614c9a791 added b + @ 8:171614c9a791 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft @@ -124,8 +121,6 @@ More testing! - $ hg up .^^ - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ echo x > x $ hg ci -Aqm "added x" $ hg glog -r . @@ -170,8 +165,6 @@ with: [12] added foo to x base: [11] added x rebasing "other" content-divergent changeset 1e1a50385a7d on 4ae4427ee9f8 - updating to "local" side of the conflict: 1e4f6b3bb39b - merging "other" content-divergent changeset '80cc9b1ec650' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at b006cf317e0e @@ -259,8 +252,6 @@ with: [17] added y base: [16] added y rebasing "other" content-divergent changeset 2a9f6ccbdeba on b006cf317e0e - updating to "local" side of the conflict: b4575ed6fcfc - merging "other" content-divergent changeset '48f745db3f53' merging y warning: conflicts while merging y! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -424,8 +415,6 @@ $ hg evolve --continue evolving 23:3f7a1f693080 "added z" - updating to "local" side of the conflict: 53242575ffa9 - merging "other" content-divergent changeset 'cdb0643c69fc' merging y warning: conflicts while merging y! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
--- a/tests/test-evolve-content-divergent-stack.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-content-divergent-stack.t Tue Jun 04 11:08:44 2019 +0200 @@ -72,15 +72,14 @@ atop:[6] watbar to a move:[3] added c move:[4] added d - working directory is now at 15c781f93cac $ hg glog - @ 9:15c781f93cac added d + o 9:15c781f93cac added d | () [default] draft o 8:9e5fb1d5b955 added c | () [default] draft o 7:88516dccf68a added b | () [default] draft - o 6:82b74d5dc678 watbar to a + @ 6:82b74d5dc678 watbar to a | () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft @@ -96,15 +95,14 @@ atop:[5] watbar to a move:[3] added c move:[4] added d - working directory is now at c72d2885eb51 $ hg glog - @ 8:c72d2885eb51 added d + o 8:c72d2885eb51 added d | () [default] draft o 7:3ce4be6d8e5e added c | () [default] draft o 6:d5f148423c16 added b | () [default] draft - o 5:8e222f257bbf watbar to a + @ 5:8e222f257bbf watbar to a | () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft @@ -130,13 +128,13 @@ | () [default] draft * 9:82b74d5dc678 watbar to a | () [default] draft - | @ 8:c72d2885eb51 added d + | * 8:c72d2885eb51 added d | | () [default] draft | * 7:3ce4be6d8e5e added c | | () [default] draft | * 6:d5f148423c16 added b | | () [default] draft - | * 5:8e222f257bbf watbar to a + | @ 5:8e222f257bbf watbar to a |/ () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft @@ -145,38 +143,29 @@ merge:[5] watbar to a with: [9] watbar to a base: [1] added a - updating to "local" side of the conflict: 8e222f257bbf - merging "other" content-divergent changeset '82b74d5dc678' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - 6 new orphan changesets merge:[6] added b with: [10] added b base: [2] added b - updating to "local" side of the conflict: d5f148423c16 - merging "other" content-divergent changeset '88516dccf68a' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[7] added c with: [11] added c base: [3] added c - updating to "local" side of the conflict: 3ce4be6d8e5e - merging "other" content-divergent changeset '9e5fb1d5b955' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[8] added d with: [12] added d base: [4] added d - updating to "local" side of the conflict: c72d2885eb51 - merging "other" content-divergent changeset '15c781f93cac' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 038fe7db3d88 + working directory is now at f66f262fff6c $ hg glog - @ 16:038fe7db3d88 added d + o 16:038fe7db3d88 added d | () [default] draft o 15:b2cac10f3836 added c | () [default] draft o 14:eadfd9d70680 added b | () [default] draft - o 13:f66f262fff6c watbar to a + @ 13:f66f262fff6c watbar to a | () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft @@ -270,16 +259,15 @@ atop:[5] watbar to a move:[3] added c move:[4] added d - working directory is now at c72d2885eb51 $ hg glog - @ 8:c72d2885eb51 added d + o 8:c72d2885eb51 added d | () [default] draft o 7:3ce4be6d8e5e added c | () [default] draft o 6:d5f148423c16 added b | () [default] draft - o 5:8e222f257bbf watbar to a + @ 5:8e222f257bbf watbar to a | () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft @@ -307,13 +295,13 @@ | () [default] draft o 9:2228e3b74514 add newfile | () [default] draft - | @ 8:c72d2885eb51 added d + | * 8:c72d2885eb51 added d | | () [default] draft | * 7:3ce4be6d8e5e added c | | () [default] draft | * 6:d5f148423c16 added b | | () [default] draft - | * 5:8e222f257bbf watbar to a + | @ 5:8e222f257bbf watbar to a |/ () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft @@ -323,41 +311,32 @@ with: [5] watbar to a base: [1] added a rebasing "other" content-divergent changeset 8e222f257bbf on 2228e3b74514 - updating to "local" side of the conflict: c04ff147ef79 - merging "other" content-divergent changeset '186bdc2cdfa2' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - 6 new orphan changesets merge:[11] added b with: [6] added b base: [2] added b rebasing "other" content-divergent changeset d5f148423c16 on c04ff147ef79 - updating to "local" side of the conflict: 6eb54b5af3fb - merging "other" content-divergent changeset '8542f15656e7' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[12] added c with: [7] added c base: [3] added c rebasing "other" content-divergent changeset 3ce4be6d8e5e on 6eb54b5af3fb - updating to "local" side of the conflict: 8ed612937375 - merging "other" content-divergent changeset 'a690ce53104a' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[13] added d with: [8] added d base: [4] added d rebasing "other" content-divergent changeset c72d2885eb51 on 8ed612937375 - updating to "local" side of the conflict: d45f050514c2 - merging "other" content-divergent changeset '1d1772990a3b' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 5f7a38bdb75c + working directory is now at 74fbf3e6a0b6 $ hg glog - @ 21:5f7a38bdb75c added d + o 21:5f7a38bdb75c added d | () [default] draft o 19:9865d598f0e0 added c | () [default] draft o 17:ac70b8c8eb63 added b | () [default] draft - o 15:74fbf3e6a0b6 watbar to a + @ 15:74fbf3e6a0b6 watbar to a | () [default] draft o 9:2228e3b74514 add newfile | () [default] draft
--- a/tests/test-evolve-continue.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-continue.t Tue Jun 04 11:08:44 2019 +0200 @@ -31,7 +31,7 @@ o 0:8fa14d15e168 added hgignore () draft -Simple case of evolve --continue (with --[no-]update flag) +Simple case of evolve --continue $ hg up ca1b80f7960a 0 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -53,7 +53,7 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --all --no-update + $ hg evolve --all move:[4] added d atop:[5] added c merging d @@ -113,7 +113,7 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve + $ hg evolve --update move:[7] added e atop:[8] added d merging e @@ -153,7 +153,7 @@ $ hg amend 3 new orphan changesets - $ hg evolve --all + $ hg evolve --all --update move:[2] added b atop:[9] added a merging b @@ -236,7 +236,7 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --all + $ hg evolve --all --update move:[12] added d atop:[16] added c move:[13] added f @@ -294,7 +294,7 @@ $ hg amend 2 new orphan changesets - $ hg evolve --all --confirm<<EOF + $ hg evolve --all --update --confirm << EOF > y > EOF move:[19] added g @@ -310,7 +310,7 @@ (no more unresolved files) continue: hg evolve --continue - $ hg evolve --continue<<EOF + $ hg evolve --continue << EOF > y > EOF evolving 19:981e615b14ca "added g"
--- a/tests/test-evolve-cycles.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-cycles.t Tue Jun 04 11:08:44 2019 +0200 @@ -55,7 +55,7 @@ 1 changesets pruned $ hg prune -s "desc(A)" "desc(C)" 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - working directory now at 2a34000d3544 + working directory is now at 2a34000d3544 1 changesets pruned $ hg log --hidden -G x changeset: 3:a8df460dbbfe @@ -200,7 +200,7 @@ 1 changesets pruned $ hg prune -s "desc(D)" "desc(F)" 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - working directory now at 868d2e0eb19c + working directory is now at 868d2e0eb19c 1 changesets pruned $ hg log --hidden -G x changeset: 6:d9f908fde1a1
--- a/tests/test-evolve-issue5832.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-issue5832.t Tue Jun 04 11:08:44 2019 +0200 @@ -125,14 +125,13 @@ enter the index of the revision you want to select: 1 move:[9] merge commit atop:[6] added c - working directory is now at 28a0775ac832 $ hg glog - @ 10:28a0775ac832 merge commit + o 10:28a0775ac832 merge commit |\ () draft | o 8:2baf8bae7ea4 added b | | () draft - | | o 7:5841d7cf9893 added d + | | @ 7:5841d7cf9893 added d | | | () draft o---+ 6:62fb70414f99 added c / / () draft @@ -266,14 +265,13 @@ enter the index of the revision you want to select: 2 move:[10] merge commit atop:[8] added d - working directory is now at 460e6e72b7f9 $ hg glog - @ 11:460e6e72b7f9 merge commit + o 11:460e6e72b7f9 merge commit |\ () draft | o 9:da76bb7cd904 added b | | () draft - o | 8:5841d7cf9893 added d + @ | 8:5841d7cf9893 added d | | () draft +---o 7:62fb70414f99 added c | | () draft @@ -284,6 +282,8 @@ o 0:bde1d2b6b5e5 added base () draft + $ cd .. + Test for issue5946 present at https://bz.mercurial-scm.org/show_bug.cgi?id=5946 =============================================================================== issue with computing dependency with split and merge @@ -412,14 +412,13 @@ atop:[8] added d move:[10] merge commit atop:[9] added b - working directory is now at 578c938ebd2e $ hg glog - @ 11:578c938ebd2e merge commit + o 11:578c938ebd2e merge commit |\ () draft | o 9:da76bb7cd904 added b | | () draft - o | 8:5841d7cf9893 added d + @ | 8:5841d7cf9893 added d | | () draft +---o 7:62fb70414f99 added c | | () draft
--- a/tests/test-evolve-issue5881.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-issue5881.t Tue Jun 04 11:08:44 2019 +0200 @@ -50,4 +50,4 @@ working directory is now at e6048a693c0d move:[2] added c atop:[3] updated b - working directory is now at c3a628eb9aaf + working directory is now at e6048a693c0d
--- a/tests/test-evolve-issue5966.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-issue5966.t Tue Jun 04 11:08:44 2019 +0200 @@ -54,7 +54,7 @@ o 0: empty - $ hg evolve -t :fail + $ hg evolve -t :fail --rev 'first(orphan())' move:[2] banana atop:[4] apricot fix conflicts and see `hg help evolve.interrupted` @@ -91,7 +91,7 @@ R a $ hg evolve --continue evolving 2:34a690fcf6ab "banana" - working directory is now at e4207a610ed0 + working directory is now at 581a2bb4704c $ hg resolve --list evolve the rest of the stack @@ -100,16 +100,15 @@ move:[3] coconut atop:[5] banana merging a - working directory is now at d77b4639fe26 All commit evolved $ hg glog - @ 6: coconut + o 6: coconut | o 5: banana | - o 4: apricot + @ 4: apricot | o 0: empty
--- a/tests/test-evolve-noupdate.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-noupdate.t Tue Jun 04 11:08:44 2019 +0200 @@ -1,10 +1,10 @@ Testing the `--no-update` flag to `hg evolve` command ===================================================== -There is an `--update` flag to `hg evolve` command which defaults to True. The -`--update` flag updates to the head of the evolved revisions. If you dont want +There is an `--update` flag to `hg evolve` command which defaults to False. The +`--update` flag updates to the head of the evolved revisions. If you don't want to change your working directory or update your working directory to its -sucessor after hg evolve, `hg evolve --no-update` is the thing for you. +successor after hg evolve, `hg evolve --no-update` is the thing for you. This patch tests that flag. @@ -37,7 +37,7 @@ o 0:8fa14d15e168 added hgignore () draft -Making sure we stay where we were is current wdir parent is not obsoleted +Making sure we stay where we were if current wdir parent was not obsoleted -------------------------------------------------------------------------- $ hg up .^^ @@ -59,7 +59,7 @@ o 0:8fa14d15e168 added hgignore () draft -There is 'working directory is now at' message because it didnt changed +There is no 'working directory is now at' message because we didn't update $ hg evolve --all --no-update move:[3] added c atop:[5] added b
--- a/tests/test-evolve-obshistory-prune.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-obshistory-prune.t Tue Jun 04 11:08:44 2019 +0200 @@ -38,7 +38,7 @@ $ hg prune -r 'desc(B0)' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 471f378eab4c + working directory is now at 471f378eab4c 1 changesets pruned $ sync $ hg log --hidden -G
--- a/tests/test-evolve-order.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-order.t Tue Jun 04 11:08:44 2019 +0200 @@ -62,12 +62,11 @@ move:[2] add _b atop:[4] add _a move:[3] add _c - working directory is now at 52b8f9b04f83 evolve --rev reorders the rev to solve instability. Harder case, obsolescence accross three stacks in growing rev numbers. $ hg up "desc(_c)" - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ mkcommit _d $ hg up "desc(_a)" 0 files updated, 0 files merged, 3 files removed, 0 files unresolved @@ -76,9 +75,8 @@ $ hg evolve --rev "desc(_b)" move:[5] add _b atop:[8] aprime - working directory is now at 476c9c052aae $ hg up "desc(_b) - obsolete()" - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg amend -m "bprime" $ hg up "desc(aprime)" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -101,7 +99,7 @@ |/ o 0:f92638be10c7@default(public) add p - $ hg evolve --rev "orphan()" + $ hg evolve --rev "orphan()" --update move:[10] bprime atop:[11] asecond move:[6] add _c @@ -204,10 +202,9 @@ atop:[21] add c1second move:[25] add b4_ atop:[27] add b3prime - working directory is now at ea93190a9cd1 Cleanup - $ hg evolve --rev "(desc(_d)::)" + $ hg evolve --rev "(desc(_d)::)" --update move:[17] add c3_ atop:[28] add c2prime move:[18] add c4_ @@ -257,5 +254,3 @@ move:[29] add b4_ atop:[34] b3second skipping 0b9488394e89: divergent rewriting. can't choose destination - working directory is now at 31809a198477 -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-orphan-corner-cases.t Tue Jun 04 11:08:44 2019 +0200 @@ -0,0 +1,123 @@ +======================================================= +Tests the resolution of orphan changesets: corner cases +======================================================= + +Setup +===== + $ cat >> $HGRCPATH <<EOF + > [alias] + > glog = log -GT "{rev}:{node|short} {desc|firstline}\n {phase} {troubles}\n\n" + > [phases] + > publish = False + > [extensions] + > rebase = + > EOF + $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH + + $ glog() { + > hg log -G --template '{rev}:{node|short}@{branch}({phase}) {desc|firstline}\n' "$@" + > } + +Test to make sure that `lastsolved` always has correct value and things don't break: +------------------------------------------------------------------------------------ +(before we were not updating it in case of orphan merge) + +Prepare the repo: + $ hg init orphanmergerepo + $ cd orphanmergerepo + $ for fn in a b c; do echo foo > $fn; hg ci -Am "added "$fn; done; + adding a + adding b + adding c +Let's create a merge commit so that we can create orphan merge later: + $ hg up 1 -q + $ echo feature > f + $ hg ci -Am "added feature f" + adding f + created new head + $ hg merge + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m "merge feature branch" + $ glog + @ 4:2c0a98d38026@default(draft) merge feature branch + |\ + | o 3:4c33e511041e@default(draft) added feature f + | | + o | 2:8be98ac1a569@default(draft) added c + |/ + o 1:80e6d2c47cfe@default(draft) added b + | + o 0:f7ad41964313@default(draft) added a + + +Now make the parents of merge commit obsolete to get a orphan merge: + $ hg up 2 -q + $ echo "fixit" > c + $ hg ci --amend -m "updated c" + 1 new orphan changesets + $ hg up 3 -q + $ echo "fixit" > c + $ hg ci --amend -m "updated f" + $ glog + @ 6:086d9bedcd75@default(draft) updated f + | + | o 5:f84f2c548fbc@default(draft) updated c + |/ + | * 4:2c0a98d38026@default(draft) merge feature branch + | |\ + +---x 3:4c33e511041e@default(draft) added feature f + | | + | x 2:8be98ac1a569@default(draft) added c + |/ + o 1:80e6d2c47cfe@default(draft) added b + | + o 0:f7ad41964313@default(draft) added a + + +To check `lastsolved` contain right value after completion of orphan-merge +resolution there should be one more instability to be evolved; lets create one: + $ hg up 1 -q + $ echo d > d + $ hg ci -Am "added d" + adding c + adding d + created new head + $ echo e > e + $ hg ci -Am "added e" + adding e + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo "updated d" >> d + $ hg ci --amend -m "updated d" + 1 new orphan changesets + $ glog + @ 9:7c4d1834c346@default(draft) updated d + | + | * 8:421f7614462a@default(draft) added e + | | + | x 7:afe5acea1990@default(draft) added d + |/ + | o 6:086d9bedcd75@default(draft) updated f + |/ + | o 5:f84f2c548fbc@default(draft) updated c + |/ + | * 4:2c0a98d38026@default(draft) merge feature branch + | |\ + +---x 3:4c33e511041e@default(draft) added feature f + | | + | x 2:8be98ac1a569@default(draft) added c + |/ + o 1:80e6d2c47cfe@default(draft) added b + | + o 0:f7ad41964313@default(draft) added a + +Now we have one orphan merge and one more orphan cset that we just created. +Lets evolve: + $ hg evolve --all --any + move:[4] merge feature branch + atop:[5] updated c + move:[10] merge feature branch + atop:[6] updated f + move:[8] added e + atop:[9] updated d
--- a/tests/test-evolve-orphan-merge.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-orphan-merge.t Tue Jun 04 11:08:44 2019 +0200 @@ -65,7 +65,7 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --all + $ hg evolve --all --update move:[3] merging a and b atop:[4] added b working directory is now at 91fd62122a4b @@ -110,7 +110,7 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --all + $ hg evolve --all --update move:[5] merging a and b atop:[6] added a working directory is now at 968d205ba4d8 @@ -214,7 +214,7 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --all + $ hg evolve --all --update move:[10] foobar to c atop:[11] foo to c merging c @@ -269,7 +269,7 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --all + $ hg evolve --all --update move:[12] foobar to c atop:[13] foo to c merging c @@ -301,7 +301,7 @@ $ hg prune -r d0f84b25d4e3 -r 928097d0b5b5 -r dc1948a6eeab 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 8fa14d15e168 + working directory is now at 8fa14d15e168 3 changesets pruned $ for ch in l m; do echo foo > $ch; hg ci -Aqm "added "$ch; done; @@ -346,7 +346,7 @@ |/ () draft o 0:8fa14d15e168 added hgignore () draft - $ hg evolve --all + $ hg evolve --all --update move:[16] added m atop:[20] added l move:[19] merge commit @@ -371,7 +371,7 @@ $ hg prune -r a446ad3e6700 -r 495d2039f8f1 -r 863d11043c67 0 files updated, 0 files merged, 3 files removed, 0 files unresolved - working directory now at fccc9de66799 + working directory is now at fccc9de66799 3 changesets pruned $ hg glog @@ -411,7 +411,7 @@ () draft XXX: We should handle this case too - $ hg evolve --all + $ hg evolve --all --update move:[23] merged l and x atop:[25] added x move:[26] merged l and x @@ -543,7 +543,7 @@ $ hg prune -r . 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory now at 8fa14d15e168 + working directory is now at 8fa14d15e168 1 changesets pruned $ hg up null 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
--- a/tests/test-evolve-orphan-split.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-orphan-split.t Tue Jun 04 11:08:44 2019 +0200 @@ -74,7 +74,7 @@ o 0:8fa14d15e168 added hgignore () draft - $ hg evolve + $ hg evolve --update move:[2] added c atop:[4] added a and b working directory is now at af13f0560b31 @@ -270,4 +270,3 @@ enter the index of the revision you want to select: 1 move:[7] added d atop:[8] added a b c - working directory is now at 71e4d45a7aaa
--- a/tests/test-evolve-phase-divergence.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-phase-divergence.t Tue Jun 04 11:08:44 2019 +0200 @@ -199,7 +199,7 @@ XXX: evolve should have mentioned that draft commit is just obsoleted in favour of public one. From the message it looks like a new commit is created. - $ hg evolve --phase-divergent + $ hg evolve --phase-divergent --update recreate:[2] tweak a atop:[1] modify a no changes to commit @@ -315,7 +315,7 @@ XXX: we should document what should user expect where running this, writing this test I have to go through code base to understand what will be the behavior - $ hg evolve --phase-divergent + $ hg evolve --phase-divergent --update recreate:[4] added bar to foo atop:[3] added foo to foo committed as 3d62500c673d @@ -468,7 +468,7 @@ Resolving the new phase-divergence changeset using `hg evolve` --------------------------------------------------------------- - $ hg evolve --phase-divergent + $ hg evolve --phase-divergent --update recreate:[7] foo to bar atop:[6] added bar to bar committed as 502e73736632 @@ -604,7 +604,7 @@ Using `hg evolve` to resolve phase-divergence --------------------------------------------- - $ hg evolve --phase-divergent + $ hg evolve --phase-divergent --update recreate:[10] added x to x atop:[9] added x to x rebasing to destination parent: 502e73736632 @@ -725,7 +725,7 @@ Resolving divergence using `hg evolve` ------------------------------------- - $ hg evolve --phase-divergent + $ hg evolve --phase-divergent --update recreate:[14] y to y and foobar to foo atop:[12] y to y and foobar to foo rebasing to destination parent: 2352021b3785 @@ -801,7 +801,7 @@ Resolution using `hg evolve --phase-divergent` ---------------------------------------------- - $ hg evolve --phase-divergent + $ hg evolve --phase-divergent --update recreate:[19] added l to l atop:[17] added l to l rebasing to destination parent: 8c2bb6fb44e9 @@ -931,14 +931,14 @@ atop:[23] added g rebasing to destination parent: 21ae52e414e6 no changes to commit - working directory is now at 428f7900a969 + working directory is now at e3090241a10c $ hg glog -r f3794e5a91dc:: - @ 23:428f7900a969 added g + o 23:428f7900a969 added g | () public o 22:21ae52e414e6 added f | () public - o 21:e3090241a10c phase-divergent update to f3794e5a91dc: + @ 21:e3090241a10c phase-divergent update to f3794e5a91dc: | () public o 17:f3794e5a91dc added l to l | () public @@ -997,7 +997,6 @@ recreate:[2] added m atop:[1] added m and n committed as 86419909e017 - 1 new orphan changesets recreate:[3] added n atop:[1] added m and n rebasing to destination parent: d3873e73d99e @@ -1258,7 +1257,6 @@ recreate:[2] added m atop:[1] added m and n committed as 86419909e017 - 1 new orphan changesets recreate:[4] added n atop:[1] added m and n rebasing to destination parent: d3873e73d99e
--- a/tests/test-evolve-phase.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-phase.t Tue Jun 04 11:08:44 2019 +0200 @@ -36,11 +36,10 @@ $ hg evolve move:[2] c atop:[3] b - working directory is now at 813dde83a7f3 $ hg glog - @ 4 - 813dde83a7f3 c (secret) + o 4 - 813dde83a7f3 c (secret) | - o 3 - fd89d0f19529 b (draft) + @ 3 - fd89d0f19529 b (draft) | o 0 - cb9a9f314b8b a (draft) @@ -116,12 +115,12 @@ continue: hg evolve --continue $ hg evolve -c evolving 2:13833940840c "c" - working directory is now at 3d2080c198e5 + working directory is now at 87495ea7c9ec $ hg glog - @ 4 - 3d2080c198e5 c (secret) + o 4 - 3d2080c198e5 c (secret) | - o 3 - 87495ea7c9ec b (draft) + @ 3 - 87495ea7c9ec b (draft) | o 0 - cb9a9f314b8b a (draft)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-progress.t Tue Jun 04 11:08:44 2019 +0200 @@ -0,0 +1,195 @@ +Test Evolve progress output +=========================== + + $ . "$TESTDIR/testlib/common.sh" + $ cat >> $HGRCPATH <<EOF + > [extensions] + > evolve= + > EOF + + $ hg init progress + $ cd progress + $ echo a > a + $ hg ci -Aqm first + $ echo a2 > a + $ hg ci -m second + $ echo b > b + $ hg ci -Aqm third + $ echo b2 > b + $ hg ci -m fourth + +Test progress with --all + $ hg co -q 'desc("first")' + $ hg amend -m 'first v2' + 3 new orphan changesets + $ hg evolve --config progress.debug=yes --debug + evolve: 1/3 changesets (33.33%) + move:[1] second + atop:[4] first v2 + hg rebase -r 4f60c78b6d58 -d fd0a2402f834 + evolve: 1/3 changesets (33.33%) + resolving manifests + branchmerge: True, force: True, partial: False + ancestor: a87874c6ec31, local: fd0a2402f834+, remote: 4f60c78b6d58 + a: remote is newer -> g + getting a + updating: a 1/1 files (100.00%) + committing files: + a + committing manifest + committing changelog + evolve: 2/3 changesets (66.67%) + move:[2] third + hg rebase -r 769574b07a96 -d 5f16d91ecde0 + evolve: 2/3 changesets (66.67%) + unmatched files in other: + b + resolving manifests + branchmerge: True, force: True, partial: False + ancestor: 4f60c78b6d58, local: 5f16d91ecde0+, remote: 769574b07a96 + b: remote created -> g + getting b + updating: b 1/1 files (100.00%) + committing files: + b + committing manifest + committing changelog + evolve: 3/3 changesets (100.00%) + move:[3] fourth + hg rebase -r 22782fddc0ab -d 53c0008d98a0 + evolve: 3/3 changesets (100.00%) + resolving manifests + branchmerge: True, force: True, partial: False + ancestor: 769574b07a96, local: 53c0008d98a0+, remote: 22782fddc0ab + b: remote is newer -> g + getting b + updating: b 1/1 files (100.00%) + committing files: + b + committing manifest + committing changelog + updating the branch cache + obscache is out of date + invalid branchheads cache (served): tip differs + resolving manifests + branchmerge: False, force: False, partial: False + ancestor: 385376d04062, local: 385376d04062+, remote: fd0a2402f834 + b: other deleted -> r + removing b + updating: b 1/2 files (50.00%) + a: remote is newer -> g + getting a + updating: a 2/2 files (100.00%) + +Test progress with -r + $ hg co -q 'desc("first")' + $ hg amend -m 'first v3' + 3 new orphan changesets + $ hg evolve -r 'desc("second")' --config progress.debug=yes --debug + evolve: 1/1 changesets (100.00%) + move:[5] second + atop:[8] first v3 + hg rebase -r 5f16d91ecde0 -d 152c368c622b + evolve: 1/1 changesets (100.00%) + resolving manifests + branchmerge: True, force: True, partial: False + ancestor: fd0a2402f834, local: 152c368c622b+, remote: 5f16d91ecde0 + a: remote is newer -> g + getting a + updating: a 1/1 files (100.00%) + committing files: + a + committing manifest + committing changelog + updating the branch cache + obscache is out of date + resolving manifests + branchmerge: False, force: False, partial: False + ancestor: df5d742141b0, local: df5d742141b0+, remote: 152c368c622b + a: remote is newer -> g + getting a + updating: a 1/1 files (100.00%) + +Test progress with --continue + $ hg co -q 'desc("first")' + $ echo conflict > a + $ hg amend -m 'first v4' + 1 new orphan changesets + $ hg evolve --all --config progress.debug=yes --debug + evolve: 1/3 changesets (33.33%) + move:[9] second + atop:[10] first v4 + hg rebase -r df5d742141b0 -d f8d7d38c0a88 + evolve: 1/3 changesets (33.33%) + resolving manifests + branchmerge: True, force: True, partial: False + ancestor: 152c368c622b, local: f8d7d38c0a88+, remote: df5d742141b0 + preserving a for resolve of a + a: versions differ -> m (premerge) + updating: a 1/1 files (100.00%) + picked tool ':merge' for a (binary False symlink False changedelete False) + merging a + my a@f8d7d38c0a88+ other a@df5d742141b0 ancestor a@152c368c622b + a: versions differ -> m (merge) + updating: a 2/2 files (100.00%) + picked tool ':merge' for a (binary False symlink False changedelete False) + my a@f8d7d38c0a88+ other a@df5d742141b0 ancestor a@152c368c622b + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + fix conflicts and see `hg help evolve.interrupted` + [1] + $ echo resolved > a + $ hg resolve -m a + (no more unresolved files) + continue: hg evolve --continue + $ hg evolve --continue --config progress.debug=yes --debug + evolving 9:df5d742141b0 "second" + committing files: + a + committing manifest + committing changelog + updating the branch cache + obscache is out of date + move:[6] third + atop:[11] second + hg rebase -r 53c0008d98a0 -d 60a86497fbfe + evolve: 2/3 changesets (66.67%) + unmatched files in other: + b + resolving manifests + branchmerge: True, force: True, partial: False + ancestor: 5f16d91ecde0, local: 60a86497fbfe+, remote: 53c0008d98a0 + b: remote created -> g + getting b + updating: b 1/1 files (100.00%) + committing files: + b + committing manifest + committing changelog + move:[7] fourth + hg rebase -r 385376d04062 -d b2de95304e32 + evolve: 3/3 changesets (100.00%) + resolving manifests + branchmerge: True, force: True, partial: False + ancestor: 53c0008d98a0, local: b2de95304e32+, remote: 385376d04062 + b: remote is newer -> g + getting b + updating: b 1/1 files (100.00%) + committing files: + b + committing manifest + committing changelog + updating the branch cache + obscache is out of date + invalid branchheads cache (served): tip differs + resolving manifests + branchmerge: False, force: False, partial: False + ancestor: c6e6fdb1d046, local: c6e6fdb1d046+, remote: f8d7d38c0a88 + b: other deleted -> r + removing b + updating: b 1/2 files (50.00%) + a: remote is newer -> g + getting a + updating: a 2/2 files (100.00%) + working directory is now at f8d7d38c0a88 + + $ cd ..
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-public-content-divergent-corner-cases.t Tue Jun 04 11:08:44 2019 +0200 @@ -0,0 +1,763 @@ +=============================================================== +Tests the resolution of public content divergence: corner cases +=============================================================== + +This file intend to cover cases that are specific enough to not fit in the +other cases. + +Setup +===== + $ cat >> $HGRCPATH <<EOF + > [alias] + > glog = log -GT "{rev}:{node|short} {desc|firstline}\n {phase} {instabilities}\n\n" + > [phases] + > publish = False + > [extensions] + > rebase = + > EOF + $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH + +Testing when divergence is not created by actual diff change, but because of rebasing: +-------------------------------------------------------------------------------------- + +Prepare the repo: + + $ hg init rebasediv + $ cd rebasediv + $ for ch in a b c; do + > echo $ch > $ch; + > hg ci -Am "added "$ch; + > done; + adding a + adding b + adding c + + $ hg glog + @ 2:155349b645be added c + | draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + +On server side: a new cset is added based on rev 1 and rev 2 is rebased on newly added cset: + + $ hg up .^ -q + $ echo d > d + $ hg ci -Am "added d" + adding d + created new head + + $ hg rebase -r 2 -d . + rebasing 2:155349b645be "added c" + + $ hg glog + o 4:c0d7ee6604ea added c + | draft + | + @ 3:c9241b0f2d5b added d + | draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + +On user side: user has not pulled yet and amended the rev 2 which created the divergence after pull: + $ hg up 2 --hidden -q + updated to hidden changeset 155349b645be + (hidden revision '155349b645be' was rewritten as: c0d7ee6604ea) + working directory parent is obsolete! (155349b645be) + + $ echo cc >> c + $ hg ci --amend -m "updated c" + 2 new content-divergent changesets + +Lets change the phase to --public of branch which is pulled from server: + $ hg phase --public -r 4 + $ hg glog -p + @ 5:f5f9b4fc8b77 updated c + | draft content-divergent + | + | diff -r 5f6d8a4bf34a -r f5f9b4fc8b77 c + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,2 @@ + | +c + | +cc + | + | o 4:c0d7ee6604ea added c + | | public + | | + | | diff -r c9241b0f2d5b -r c0d7ee6604ea c + | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | | +++ b/c Thu Jan 01 00:00:00 1970 +0000 + | | @@ -0,0 +1,1 @@ + | | +c + | | + | o 3:c9241b0f2d5b added d + |/ public + | + | diff -r 5f6d8a4bf34a -r c9241b0f2d5b d + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/d Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +d + | + o 1:5f6d8a4bf34a added b + | public + | + | diff -r 9092f1db7931 -r 5f6d8a4bf34a b + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/b Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +b + | + o 0:9092f1db7931 added a + public + + diff -r 000000000000 -r 9092f1db7931 a + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +a + + +Evolve: + $ hg evolve --content-divergent + merge:[4] added c + with: [5] updated c + base: [2] added c + rebasing "other" content-divergent changeset f5f9b4fc8b77 on c9241b0f2d5b + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + committed as 3b336cbee992 + working directory is now at 3b336cbee992 + + $ hg glog -p + @ 8:3b336cbee992 phase-divergent update to c0d7ee6604ea: + | draft + | + | diff -r c0d7ee6604ea -r 3b336cbee992 c + | --- a/c Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +1,2 @@ + | c + | +cc + | + o 4:c0d7ee6604ea added c + | public + | + | diff -r c9241b0f2d5b -r c0d7ee6604ea c + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c + | + o 3:c9241b0f2d5b added d + | public + | + | diff -r 5f6d8a4bf34a -r c9241b0f2d5b d + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/d Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +d + | + o 1:5f6d8a4bf34a added b + | public + | + | diff -r 9092f1db7931 -r 5f6d8a4bf34a b + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/b Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +b + | + o 0:9092f1db7931 added a + public + + diff -r 000000000000 -r 9092f1db7931 a + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +a + +Check that we don't have any unstable cset now: + $ hg evolve -l + $ cd .. + +Different parent, simple conflict on relocate, deleted file on actual merge +--------------------------------------------------------------------------- + +Changeset "added c e" is also removing 'd'. This should conflict with the update +to 'd' in the successors of 'adding d' when solving the content divergence. + + $ hg init pubdiv-parent-deleted-file + $ cd pubdiv-parent-deleted-file + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Aqm "added "$ch; + > done; + + $ hg up 'desc("added b")' + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo cfoo > c + $ echo e > e + $ hg add c e + $ hg ci -m "added c e" + created new head + + $ hg up 'desc("re:added c$")' + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo dd > d + $ hg add d + $ hg ci -m "added d" + created new head + + $ hg glog --patch --rev 'sort(all(), "topo")' + @ 5:93cd84bbdaca added d + | draft + | + | diff -r 155349b645be -r 93cd84bbdaca d + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/d Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +dd + | + | o 3:9150fe93bec6 added d + |/ draft + | + | diff -r 155349b645be -r 9150fe93bec6 d + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/d Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +d + | + o 2:155349b645be added c + | draft + | + | diff -r 5f6d8a4bf34a -r 155349b645be c + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c + | + | o 4:e568fd1029bb added c e + |/ draft + | + | diff -r 5f6d8a4bf34a -r e568fd1029bb c + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +cfoo + | diff -r 5f6d8a4bf34a -r e568fd1029bb e + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/e Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +e + | + o 1:5f6d8a4bf34a added b + | draft + | + | diff -r 9092f1db7931 -r 5f6d8a4bf34a b + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/b Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +b + | + o 0:9092f1db7931 added a + draft + + diff -r 000000000000 -r 9092f1db7931 a + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +a + + $ hg prune 'min(desc("added d"))' -s 'max(desc("added d"))' + 1 changesets pruned + $ hg prune 'min(desc("added d"))' -s 'desc("added c e")' --hidden + 1 changesets pruned + 2 new content-divergent changesets + +Change phase to public for one head: + $ hg phase --public -r 'max(desc("added d"))' + + $ hg glog + @ 5:93cd84bbdaca added d + | public + | + | * 4:e568fd1029bb added c e + | | draft content-divergent + | | + o | 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + + $ hg glog --patch --rev 'sort(all(), "topo")' --hidden + @ 5:93cd84bbdaca added d + | public + | + | diff -r 155349b645be -r 93cd84bbdaca d + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/d Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +dd + | + | x 3:9150fe93bec6 added d + |/ draft + | + | diff -r 155349b645be -r 9150fe93bec6 d + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/d Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +d + | + o 2:155349b645be added c + | public + | + | diff -r 5f6d8a4bf34a -r 155349b645be c + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c + | + | * 4:e568fd1029bb added c e + |/ draft content-divergent + | + | diff -r 5f6d8a4bf34a -r e568fd1029bb c + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +cfoo + | diff -r 5f6d8a4bf34a -r e568fd1029bb e + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/e Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +e + | + o 1:5f6d8a4bf34a added b + | public + | + | diff -r 9092f1db7931 -r 5f6d8a4bf34a b + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/b Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +b + | + o 0:9092f1db7931 added a + public + + diff -r 000000000000 -r 9092f1db7931 a + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +a + + + $ hg obslog --all --rev tip --patch + @ 93cd84bbdaca (5) added d + | + | * e568fd1029bb (4) added c e + |/ + x 9150fe93bec6 (3) added d + rewritten(content) as 93cd84bbdaca using prune by test (Thu Jan 01 00:00:00 1970 +0000) + diff -r 9150fe93bec6 -r 93cd84bbdaca d + --- a/d Thu Jan 01 00:00:00 1970 +0000 + +++ b/d Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,1 @@ + -d + +dd + + rewritten(description, parent, content) as e568fd1029bb using prune by test (Thu Jan 01 00:00:00 1970 +0000) + (No patch available, changesets rebased) + + + $ hg evolve --content-divergent --any --update + merge:[5] added d + with: [4] added c e + base: [3] added d + rebasing "other" content-divergent changeset e568fd1029bb on 155349b645be + merging c + warning: conflicts while merging c! (edit, then use 'hg resolve --mark') + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ hg diff + diff -r 155349b645be c + --- a/c Thu Jan 01 00:00:00 1970 +0000 + +++ b/c Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,5 @@ + +<<<<<<< destination: 155349b645be - test: added c + c + +======= + +cfoo + +>>>>>>> evolving: e568fd1029bb - test: added c e + diff -r 155349b645be e + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/e Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +e + + $ echo c > c + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + evolving 4:e568fd1029bb "added c e" + file 'd' was deleted in other but was modified in local. + What do you want to do? + use (c)hanged version, (d)elete, or leave (u)nresolved? u + 1 files updated, 0 files merged, 0 files removed, 1 files unresolved + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ hg sum + parent: 5:93cd84bbdaca + added d + parent: 6:2af3359250d3 tip (content-divergent) + added c e + branch: default + commit: 1 modified, 1 unknown, 1 unresolved (merge) + update: (current) + phases: 1 draft + content-divergent: 1 changesets + evolve: (evolve --continue) + + $ echo resolved > d + $ hg resolve -m d + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + committed as bc1f4610744c + working directory is now at bc1f4610744c + + $ hg export + # HG changeset patch + # User test + # Date 0 0 + # Thu Jan 01 00:00:00 1970 +0000 + # Node ID bc1f4610744c6aa0e851d3876a61bfff6243b31c + # Parent 93cd84bbdacaeb8f881c29a609dbdd30c38cbc57 + phase-divergent update to 93cd84bbdaca: + + added c e + + diff -r 93cd84bbdaca -r bc1f4610744c d + --- a/d Thu Jan 01 00:00:00 1970 +0000 + +++ b/d Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,1 @@ + -dd + +resolved + diff -r 93cd84bbdaca -r bc1f4610744c e + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/e Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +e + + $ hg evolve -l + $ cd .. + +Test a pratical "rebase" case +============================= + +Initial setup + + $ hg init rebase-divergence + $ cd rebase-divergence + $ echo root >> root + $ hg add root + $ hg commit -m root + $ for x in c_A c_B c_C c_D; do + > echo $x >> $x + > hg add $x + > hg commit -m $x + > done + + $ hg up 'desc("c_A")' + 0 files updated, 0 files merged, 3 files removed, 0 files unresolved + + $ for x in c_E c_F; do + > echo $x >> $x + > hg add $x + > hg commit -m $x + > done + created new head + +(creating divergence locally for simplicity) + + $ node=`hg log --rev 'desc("c_E")' -T '{node}'` + $ hg rebase -s $node -d 'desc("c_B")' + rebasing 5:4ab2719bbab9 "c_E" + rebasing 6:77ccbf8d837e "c_F" (tip) + $ hg phase --public tip + $ hg rebase --hidden -s $node -d 'desc("c_C")' --config experimental.evolution.allowdivergence=yes + rebasing 5:4ab2719bbab9 "c_E" + rebasing 6:77ccbf8d837e "c_F" + 2 new content-divergent changesets + + $ hg sum + parent: 8:a52ac76b45f5 + c_F + branch: default + commit: (clean) + update: 4 new changesets, 3 branch heads (merge) + phases: 4 draft + content-divergent: 2 changesets + $ hg evolve --list + b4a584aea4bd: c_E + content-divergent: c7d2d47c7240 (public) (precursor 4ab2719bbab9) + + 8ae8db670b4a: c_F + content-divergent: a52ac76b45f5 (public) (precursor 77ccbf8d837e) + + $ hg log -G --patch + * changeset: 10:8ae8db670b4a + | tag: tip + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | instability: content-divergent + | summary: c_F + | + | diff -r b4a584aea4bd -r 8ae8db670b4a c_F + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_F Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_F + | + * changeset: 9:b4a584aea4bd + | parent: 3:abb77b893f28 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | instability: content-divergent + | summary: c_E + | + | diff -r abb77b893f28 -r b4a584aea4bd c_E + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_E Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_E + | + | @ changeset: 8:a52ac76b45f5 + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: c_F + | | + | | diff -r c7d2d47c7240 -r a52ac76b45f5 c_F + | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | | +++ b/c_F Thu Jan 01 00:00:00 1970 +0000 + | | @@ -0,0 +1,1 @@ + | | +c_F + | | + | o changeset: 7:c7d2d47c7240 + | | parent: 2:eb1b4e1205b8 + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: c_E + | | + | | diff -r eb1b4e1205b8 -r c7d2d47c7240 c_E + | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | | +++ b/c_E Thu Jan 01 00:00:00 1970 +0000 + | | @@ -0,0 +1,1 @@ + | | +c_E + | | + +---o changeset: 4:dbb960d6c97c + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: c_D + | | + | | diff -r abb77b893f28 -r dbb960d6c97c c_D + | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | | +++ b/c_D Thu Jan 01 00:00:00 1970 +0000 + | | @@ -0,0 +1,1 @@ + | | +c_D + | | + o | changeset: 3:abb77b893f28 + |/ user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_C + | + | diff -r eb1b4e1205b8 -r abb77b893f28 c_C + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_C Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_C + | + o changeset: 2:eb1b4e1205b8 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_B + | + | diff -r e31751786014 -r eb1b4e1205b8 c_B + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_B Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_B + | + o changeset: 1:e31751786014 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_A + | + | diff -r 1e4be0697311 -r e31751786014 c_A + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_A Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_A + | + o changeset: 0:1e4be0697311 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: root + + diff -r 000000000000 -r 1e4be0697311 root + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/root Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +root + + +Run automatic evolution + + $ hg evolve --content-divergent --rev 'not public() and desc("c_E")::' + merge:[7] c_E + with: [9] c_E + base: [5] c_E + rebasing "other" content-divergent changeset b4a584aea4bd on eb1b4e1205b8 + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + content divergence resolution between c7d2d47c7240 (public) and 0773642cfa95 has same content as c7d2d47c7240, discarding 0773642cfa95 + merge:[8] c_F + with: [10] c_F + base: [6] c_F + rebasing "other" content-divergent changeset 8ae8db670b4a on c7d2d47c7240 + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + content divergence resolution between a52ac76b45f5 (public) and 6a87ed4aa317 has same content as a52ac76b45f5, discarding 6a87ed4aa317 + $ hg sum + parent: 8:a52ac76b45f5 tip + c_F + branch: default + commit: (clean) + update: 2 new changesets, 2 branch heads (merge) + phases: 2 draft + + $ hg evolve --list + + $ hg log -G --patch + @ changeset: 8:a52ac76b45f5 + | tag: tip + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_F + | + | diff -r c7d2d47c7240 -r a52ac76b45f5 c_F + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_F Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_F + | + o changeset: 7:c7d2d47c7240 + | parent: 2:eb1b4e1205b8 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_E + | + | diff -r eb1b4e1205b8 -r c7d2d47c7240 c_E + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_E Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_E + | + | o changeset: 4:dbb960d6c97c + | | user: test + | | date: Thu Jan 01 00:00:00 1970 +0000 + | | summary: c_D + | | + | | diff -r abb77b893f28 -r dbb960d6c97c c_D + | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | | +++ b/c_D Thu Jan 01 00:00:00 1970 +0000 + | | @@ -0,0 +1,1 @@ + | | +c_D + | | + | o changeset: 3:abb77b893f28 + |/ user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_C + | + | diff -r eb1b4e1205b8 -r abb77b893f28 c_C + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_C Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_C + | + o changeset: 2:eb1b4e1205b8 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_B + | + | diff -r e31751786014 -r eb1b4e1205b8 c_B + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_B Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_B + | + o changeset: 1:e31751786014 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: c_A + | + | diff -r 1e4be0697311 -r e31751786014 c_A + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/c_A Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,1 @@ + | +c_A + | + o changeset: 0:1e4be0697311 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: root + + diff -r 000000000000 -r 1e4be0697311 root + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/root Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +root + + $ hg export tip + # HG changeset patch + # User test + # Date 0 0 + # Thu Jan 01 00:00:00 1970 +0000 + # Node ID a52ac76b45f523a039fc4a938d79874f4bdb1a85 + # Parent c7d2d47c7240562be5cbd1a24080dd0396178709 + c_F + + diff -r c7d2d47c7240 -r a52ac76b45f5 c_F + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/c_F Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +c_F + + $ hg obslog --rev a52ac76b45f5 + @ a52ac76b45f5 (8) c_F + |\ + x | 6a87ed4aa317 (12) c_F + | | rewritten as a52ac76b45f5 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 8ae8db670b4a (10) c_F + |/ rewritten(parent) as 6a87ed4aa317 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 77ccbf8d837e (6) c_F + rewritten(parent) as 8ae8db670b4a using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + rewritten(parent) as a52ac76b45f5 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-public-content-divergent-discard.t Tue Jun 04 11:08:44 2019 +0200 @@ -0,0 +1,694 @@ +=============================================================================== +Tests the resolution of public content divergence: when merging leads to public +=============================================================================== + +This file intend to cover all the cases possible when merging the other +divergent cset into public cset leads to public cset itself. +Possible variants are: + +parent: same/different +relocation: [no-]conflict +merging: [no-]conflict + +Setup +===== + $ cat >> $HGRCPATH <<EOF + > [alias] + > glog = log -GT "{rev}:{node|short} {desc|firstline}\n {phase} {instabilities}\n\n" + > [phases] + > publish = False + > [extensions] + > rebase = + > EOF + $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH + +Testing when same parent, no conflict: +-------------------------------------- + + $ hg init pubdiv1 + $ cd pubdiv1 + $ for ch in a b c; do + > echo $ch > $ch; + > hg ci -Am "added "$ch; + > done; + adding a + adding b + adding c + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo ch > ch + $ hg add ch + $ hg ci -m "added ch" + created new head + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo ch > ch + $ hg add ch + $ hg ci -m "added c" + created new head + + $ hg glog + @ 4:f7c1071f1e7c added c + | draft + | + | o 3:90522bccf499 added ch + |/ draft + | + | o 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + + $ hg prune 2 -s 3 + 1 changesets pruned + $ hg prune 2 -s 4 --hidden + 1 changesets pruned + 2 new content-divergent changesets + $ hg phase --public -r 4 + + $ hg glog + @ 4:f7c1071f1e7c added c + | public + | + | * 3:90522bccf499 added ch + |/ draft content-divergent + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any + merge:[4] added c + with: [3] added ch + base: [2] added c + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + other divergent changeset 90522bccf499 has same content as local f7c1071f1e7c and differs by "description" only, discarding 90522bccf499 + content divergence resolution between f7c1071f1e7c (public) and 90522bccf499 has same content as f7c1071f1e7c, discarding 90522bccf499 + + $ hg evolve -l + + $ hg par + changeset: 4:f7c1071f1e7c + tag: tip + parent: 1:5f6d8a4bf34a + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added c + + $ cd .. + +Testing when different parent, no conflict: +------------------------------------------- + + $ hg init pubdiv2 + $ cd pubdiv2 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Am "added "$ch; + > done; + adding a + adding b + adding c + adding d + + $ hg up 1 + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo dh > dh + $ hg add dh + $ hg ci -m "added dh" + created new head + + $ hg up 2 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo dh > dh + $ hg add dh + $ hg ci -m "added d" + created new head + + $ hg glog + @ 5:e800202333a4 added d + | draft + | + | o 4:5acd58ef5066 added dh + | | draft + | | + +---o 3:9150fe93bec6 added d + | | draft + | | + o | 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + + $ hg prune 3 -s 4 + 1 changesets pruned + $ hg prune 3 -s 5 --hidden + 1 changesets pruned + 2 new content-divergent changesets + $ hg phase --public -r 5 + + $ hg glog + @ 5:e800202333a4 added d + | public + | + | * 4:5acd58ef5066 added dh + | | draft content-divergent + | | + o | 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any + merge:[5] added d + with: [4] added dh + base: [3] added d + rebasing "other" content-divergent changeset 5acd58ef5066 on 155349b645be + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + other divergent changeset ae3429430ef1 has same content as local e800202333a4 and differs by "description" only, discarding ae3429430ef1 + content divergence resolution between e800202333a4 (public) and ae3429430ef1 has same content as e800202333a4, discarding ae3429430ef1 + + $ hg evolve -l + + $ hg par + changeset: 5:e800202333a4 + tag: tip + parent: 2:155349b645be + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added d + + $ cd .. + +Testing when same parent, merging conflict: +------------------------------------------- + + $ hg init pubdiv3 + $ cd pubdiv3 + $ for ch in a b c; do + > echo $ch > $ch; + > hg ci -Am "added "$ch; + > done; + adding a + adding b + adding c + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo chconflict > ch + $ hg add ch + $ hg ci -m "added ch" + created new head + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo ch > ch + $ hg add ch + $ hg ci -m "added c" + created new head + + $ hg glog + @ 4:f7c1071f1e7c added c + | draft + | + | o 3:229da2719b19 added ch + |/ draft + | + | o 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + + $ hg prune 2 -s 3 + 1 changesets pruned + $ hg prune 2 -s 4 --hidden + 1 changesets pruned + 2 new content-divergent changesets + $ hg phase --public -r 4 + + $ hg glog + @ 4:f7c1071f1e7c added c + | public + | + | * 3:229da2719b19 added ch + |/ draft content-divergent + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any + merge:[4] added c + with: [3] added ch + base: [2] added c + merging ch + warning: conflicts while merging ch! (edit, then use 'hg resolve --mark') + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ hg diff + diff -r f7c1071f1e7c ch + --- a/ch Thu Jan 01 00:00:00 1970 +0000 + +++ b/ch Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,5 @@ + +<<<<<<< local: f7c1071f1e7c - test: added c + ch + +======= + +chconflict + +>>>>>>> other: 229da2719b19 - test: added ch + + $ echo ch > ch + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + other divergent changeset 229da2719b19 has same content as local f7c1071f1e7c and differs by "description" only, discarding 229da2719b19 + working directory is now at f7c1071f1e7c + + $ hg evolve -l + + $ hg par + changeset: 4:f7c1071f1e7c + tag: tip + parent: 1:5f6d8a4bf34a + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added c + + $ cd .. + +Testing when different parent, relocation conflict: +--------------------------------------------------- + + $ hg init pubdiv4 + $ cd pubdiv4 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Am "added "$ch; + > done; + adding a + adding b + adding c + adding d + + $ hg up 1 + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo dh > dh + $ echo cc > c + $ hg add dh c + $ hg ci -m "added dh" + created new head + + $ hg up 2 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo dh > dh + $ hg add dh + $ hg ci -m "added d" + created new head + + $ hg glog + @ 5:e800202333a4 added d + | draft + | + | o 4:f89a8e2f86ac added dh + | | draft + | | + +---o 3:9150fe93bec6 added d + | | draft + | | + o | 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + + $ hg prune 3 -s 4 + 1 changesets pruned + $ hg prune 3 -s 5 --hidden + 1 changesets pruned + 2 new content-divergent changesets + $ hg phase --public -r 5 + + $ hg glog + @ 5:e800202333a4 added d + | public + | + | * 4:f89a8e2f86ac added dh + | | draft content-divergent + | | + o | 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any + merge:[5] added d + with: [4] added dh + base: [3] added d + rebasing "other" content-divergent changeset f89a8e2f86ac on 155349b645be + merging c + warning: conflicts while merging c! (edit, then use 'hg resolve --mark') + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ echo c > c + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + evolving 4:f89a8e2f86ac "added dh" + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + other divergent changeset bc309da55b88 has same content as local e800202333a4 and differs by "description" only, discarding bc309da55b88 + working directory is now at e800202333a4 + + $ hg evolve -l + + $ hg par + changeset: 5:e800202333a4 + tag: tip + parent: 2:155349b645be + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added d + + $ cd .. + +Testing when different parent, merging conflict: +------------------------------------------------ + + $ hg init pubdiv5 + $ cd pubdiv5 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Am "added "$ch; + > done; + adding a + adding b + adding c + adding d + + $ hg up 1 + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo dhconflict > dh + $ hg add dh + $ hg ci -m "added dh" + created new head + + $ hg up 2 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo dh > dh + $ hg add dh + $ hg ci -m "added d" + created new head + + $ hg glog + @ 5:e800202333a4 added d + | draft + | + | o 4:db0b7bba0aae added dh + | | draft + | | + +---o 3:9150fe93bec6 added d + | | draft + | | + o | 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + + $ hg prune 3 -s 4 + 1 changesets pruned + $ hg prune 3 -s 5 --hidden + 1 changesets pruned + 2 new content-divergent changesets + $ hg phase --public -r 5 + + $ hg glog + @ 5:e800202333a4 added d + | public + | + | * 4:db0b7bba0aae added dh + | | draft content-divergent + | | + o | 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any + merge:[5] added d + with: [4] added dh + base: [3] added d + rebasing "other" content-divergent changeset db0b7bba0aae on 155349b645be + merging dh + warning: conflicts while merging dh! (edit, then use 'hg resolve --mark') + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ echo dh > dh + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + other divergent changeset a5bbf2042450 has same content as local e800202333a4 and differs by "description" only, discarding a5bbf2042450 + working directory is now at e800202333a4 + + $ hg evolve -l + + $ hg par + changeset: 5:e800202333a4 + tag: tip + parent: 2:155349b645be + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added d + + $ cd .. + +Testing when different parent, conflict in relocation and merging: +------------------------------------------------------------------ + + $ hg init pubdiv6 + $ cd pubdiv6 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Am "added "$ch; + > done; + adding a + adding b + adding c + adding d + + $ hg up 1 + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo dhconflict > dh + $ echo cc > c + $ hg add dh c + $ hg ci -m "added dh" + created new head + + $ hg up 2 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo dh > dh + $ hg add dh + $ hg ci -m "added d" + created new head + + $ hg glog + @ 5:e800202333a4 added d + | draft + | + | o 4:67b19bbd770f added dh + | | draft + | | + +---o 3:9150fe93bec6 added d + | | draft + | | + o | 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + + $ hg prune 3 -s 4 + 1 changesets pruned + $ hg prune 3 -s 5 --hidden + 1 changesets pruned + 2 new content-divergent changesets + $ hg phase --public -r 5 + + $ hg glog + @ 5:e800202333a4 added d + | public + | + | * 4:67b19bbd770f added dh + | | draft content-divergent + | | + o | 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any + merge:[5] added d + with: [4] added dh + base: [3] added d + rebasing "other" content-divergent changeset 67b19bbd770f on 155349b645be + merging c + warning: conflicts while merging c! (edit, then use 'hg resolve --mark') + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ echo c > c + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + evolving 4:67b19bbd770f "added dh" + merging dh + warning: conflicts while merging dh! (edit, then use 'hg resolve --mark') + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ echo dh > dh + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + other divergent changeset 09054d1f3c97 has same content as local e800202333a4 and differs by "description" only, discarding 09054d1f3c97 + working directory is now at e800202333a4 + + $ hg evolve -l + + $ hg par + changeset: 5:e800202333a4 + tag: tip + parent: 2:155349b645be + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added d + + $ cd .. + +Testing that we warn the user for the metadata being lost in divergence resolution: +----------------------------------------------------------------------------------- + + $ hg init pubdiv7 + $ cd pubdiv7 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Am "added "$ch; + > done; + adding a + adding b + adding c + adding d + + $ echo dada > d + $ hg amend + $ hg up -r "desc('added c')" + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg branch feature + marked working directory as branch feature + (branches are permanent and global, did you want a bookmark?) + $ echo dada > d + $ hg ci -Am "added d" + adding d + $ hg prune -r "min(desc('added d'))" -s . --hidden + 1 changesets pruned + 2 new content-divergent changesets + +(publish one side) + $ hg phase --public + $ hg up -r "draft()" + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + +(make other divergent a closed branch head) + $ hg ci --amend -m "closing feature branch" --close-branch + + $ hg glog + @ 6:af442315d198 closing feature branch + | draft content-divergent + | + | o 5:497d0d2b90ba added d + |/ public + | + o 2:155349b645be added c + | public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + +Run automatic evolution: + + $ hg evolve --content-divergent + merge:[5] added d + with: [6] closing feature branch + base: [3] added d + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + other divergent changeset af442315d198 is a closed branch head and differs from local 497d0d2b90ba by "branch, description" only, discarding af442315d198 + content divergence resolution between 497d0d2b90ba (public) and af442315d198 has same content as 497d0d2b90ba, discarding af442315d198 + working directory is now at 497d0d2b90ba +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-public-content-divergent-main.t Tue Jun 04 11:08:44 2019 +0200 @@ -0,0 +1,628 @@ +============================================================= +Tests the resolution of public content divergence: main cases +============================================================= + +This file intend to cover all the common cases of public content divergence. +That is all the variant of: +parent: same/different +relocation: [no-]conflict +merging: [no-]conflict + +Setup +===== + $ cat >> $HGRCPATH <<EOF + > [alias] + > glog = log -GT "{rev}:{node|short} {desc|firstline}\n {phase} {instabilities}\n\n" + > [phases] + > publish = False + > [extensions] + > rebase = + > EOF + $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH + +Testing when same parent, no conflict: +-------------------------------------- + +Prepare the repository: + + $ hg init pubdiv1 + $ cd pubdiv1 + $ for ch in a b; do + > echo $ch > $ch; + > hg ci -Aqm "added "$ch; + > done; + $ hg glog + @ 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + +Make an amend and change phase to public: + + $ sed -i "1 i I am first" b + $ hg amend + $ hg phase --public + +Amend again to create a cset divergent to public one: + + $ hg up 1 --hidden -q + updated to hidden changeset 5f6d8a4bf34a + (hidden revision '5f6d8a4bf34a' was rewritten as: 44f360db368f) + working directory parent is obsolete! (5f6d8a4bf34a) + + $ echo "I am second" >> b + $ hg ci --amend -m "updated b" + 1 new content-divergent changesets + + $ hg glog + @ 3:dcdaf152280a updated b + | draft content-divergent + | + | o 2:44f360db368f added b + |/ public + | + o 0:9092f1db7931 added a + public + + +Lets resolve the public content-divergence: + + $ hg evolve --content-divergent + merge:[2] added b + with: [3] updated b + base: [1] added b + merging b + 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + committed as c1aa9cfb6cf8 + working directory is now at c1aa9cfb6cf8 + +Following graph log shows that it correctly merged the two divergent csets: + + $ hg glog -p + @ 5:c1aa9cfb6cf8 phase-divergent update to 44f360db368f: + | draft + | + | diff -r 44f360db368f -r c1aa9cfb6cf8 b + | --- a/b Thu Jan 01 00:00:00 1970 +0000 + | +++ b/b Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,2 +1,3 @@ + | I am first + | b + | +I am second + | + o 2:44f360db368f added b + | public + | + | diff -r 9092f1db7931 -r 44f360db368f b + | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + | +++ b/b Thu Jan 01 00:00:00 1970 +0000 + | @@ -0,0 +1,2 @@ + | +I am first + | +b + | + o 0:9092f1db7931 added a + public + + diff -r 000000000000 -r 9092f1db7931 a + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +a + + $ hg evolve -l + $ cd .. + +Testing when same parent, merging conflict: +------------------------------------------- + +Prepare the repository: + + $ hg init pubdiv2 + $ cd pubdiv2 + $ for ch in a b; do + > echo $ch > $ch; + > hg ci -Aqm "added "$ch; + > done; + $ hg glog + @ 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + +Make an amend and change phase to public: + + $ echo "I am foo" > b + $ hg amend + $ hg phase --public + +Amend again to create a cset divergent to public one: + + $ hg up 1 --hidden -q + updated to hidden changeset 5f6d8a4bf34a + (hidden revision '5f6d8a4bf34a' was rewritten as: 580f2d01e52c) + working directory parent is obsolete! (5f6d8a4bf34a) + + $ echo "I am bar" > b + $ hg ci --amend -m "updated b" + 1 new content-divergent changesets + + $ hg glog + @ 3:0e805383168e updated b + | draft content-divergent + | + | o 2:580f2d01e52c added b + |/ public + | + o 0:9092f1db7931 added a + public + + +Lets resolve the divergence: + + $ hg evolve --content-divergent + merge:[2] added b + with: [3] updated b + base: [1] added b + merging b + warning: conflicts while merging b! (edit, then use 'hg resolve --mark') + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ echo "I am foobar" > b + $ hg resolve -m --tool union + (no more unresolved files) + continue: hg evolve --continue + $ hg evolve --continue + committed as 1a739394e9d4 + working directory is now at 1a739394e9d4 + + $ hg glog + @ 5:1a739394e9d4 phase-divergent update to 580f2d01e52c: + | draft + | + o 2:580f2d01e52c added b + | public + | + o 0:9092f1db7931 added a + public + +Testing when different parent, no conflict: +------------------------------------------- + + $ hg init pubdiv3 + $ cd pubdiv3 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Aqm "added "$ch; + > done; + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo dd > d + $ hg add d + $ hg ci -m "added d" + created new head + + $ hg up 1 + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo dd > d + $ echo e > e + $ hg add d e + $ hg ci -m "added d e" + created new head + + $ hg glog + @ 5:4291d72ee19a added d e + | draft + | + | o 4:93cd84bbdaca added d + | | draft + | | + | | o 3:9150fe93bec6 added d + | |/ draft + | | + | o 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + + $ hg prune 3 -s 5 + 1 changesets pruned + $ hg prune 3 -s 4 --hidden + 1 changesets pruned + 2 new content-divergent changesets + +Change phase to public for one head: + $ hg phase -r 4 --public + + $ hg glog + @ 5:4291d72ee19a added d e + | draft content-divergent + | + | o 4:93cd84bbdaca added d + | | public + | | + | o 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + + $ hg evolve --content-divergent --any + merge:[4] added d + with: [5] added d e + base: [3] added d + rebasing "other" content-divergent changeset 4291d72ee19a on 155349b645be + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + committed as 4cbe48a0c3d9 + working directory is now at 4cbe48a0c3d9 + + $ hg glog -l 1 + @ 8:4cbe48a0c3d9 phase-divergent update to 93cd84bbdaca: + | draft + ~ + + $ hg evolve -l + $ cd .. + +Testing when different parents, relocation conflict: +---------------------------------------------------- + + $ hg init pubdiv4 + $ cd pubdiv4 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Aqm "added "$ch; + > done; + + $ hg up .^^ + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo d > d + $ echo cfoo > c + $ echo e > e + $ hg add d c e + $ hg ci -m "added d c e" + created new head + + $ hg up 'desc("added c")' + 1 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo dd > d + $ hg add d + $ hg ci -m "added d" + created new head + + $ hg glog + @ 5:93cd84bbdaca added d + | draft + | + | o 4:f31bcc378766 added d c e + | | draft + | | + +---o 3:9150fe93bec6 added d + | | draft + | | + o | 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + $ hg prune 'min(desc("re:added d$"))' -s 'max(desc("re:added d$"))' + 1 changesets pruned + $ hg prune 'min(desc("re:added d$"))' -s 'desc("added d c e")' --hidden + 1 changesets pruned + 2 new content-divergent changesets + +Change phase to public for one head: + $ hg phase --public -r 'max(desc("re:added d$"))' + + $ hg glog + @ 5:93cd84bbdaca added d + | public + | + | * 4:f31bcc378766 added d c e + | | draft content-divergent + | | + o | 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any --update + merge:[5] added d + with: [4] added d c e + base: [3] added d + rebasing "other" content-divergent changeset f31bcc378766 on 155349b645be + merging c + warning: conflicts while merging c! (edit, then use 'hg resolve --mark') + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ hg diff + diff -r 155349b645be c + --- a/c Thu Jan 01 00:00:00 1970 +0000 + +++ b/c Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,5 @@ + +<<<<<<< destination: 155349b645be - test: added c + c + +======= + +cfoo + +>>>>>>> evolving: f31bcc378766 - test: added d c e + diff -r 155349b645be d + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/d Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +d + diff -r 155349b645be e + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/e Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +e + + $ echo c > c + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + evolving 4:f31bcc378766 "added d c e" + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + committed as 412dde898967 + working directory is now at 412dde898967 + $ hg export + # HG changeset patch + # User test + # Date 0 0 + # Thu Jan 01 00:00:00 1970 +0000 + # Node ID 412dde898967b50e7d334aefff778a9af46d29d1 + # Parent 93cd84bbdacaeb8f881c29a609dbdd30c38cbc57 + phase-divergent update to 93cd84bbdaca: + + added d c e + + diff -r 93cd84bbdaca -r 412dde898967 e + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/e Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +e + + $ hg evolve -l + $ cd .. + +Testing when merging conflicts, relocation don't: +------------------------------------------------- + + $ hg init pubdiv5 + $ cd pubdiv5 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Aqm "added "$ch; + > done; + + $ hg up .^^ + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo dconflict > d + $ hg add d + $ hg ci -m "added d" + created new head + + $ hg up 2 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo dd > d + $ hg add d + $ hg ci -m "added d" + created new head + + $ hg glog + @ 5:93cd84bbdaca added d + | draft + | + | o 4:9411ad1fe615 added d + | | draft + | | + +---o 3:9150fe93bec6 added d + | | draft + | | + o | 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + $ hg prune 3 -s 5 + 1 changesets pruned + $ hg prune 3 -s 4 --hidden + 1 changesets pruned + 2 new content-divergent changesets + +Change phase to public for one head: + $ hg phase --public -r 5 + + $ hg glog + @ 5:93cd84bbdaca added d + | public + | + | * 4:9411ad1fe615 added d + | | draft content-divergent + | | + o | 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any + merge:[5] added d + with: [4] added d + base: [3] added d + rebasing "other" content-divergent changeset 9411ad1fe615 on 155349b645be + merging d + warning: conflicts while merging d! (edit, then use 'hg resolve --mark') + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ echo d > d + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + committed as 2a0f44767904 + working directory is now at 93cd84bbdaca + + $ hg evolve -l + $ cd .. + +Testing when relocation, merging both conflict: +----------------------------------------------- + + $ hg init pubdiv6 + $ cd pubdiv6 + $ for ch in a b c d; do + > echo $ch > $ch; + > hg ci -Aqm "added "$ch; + > done; + + $ hg up .^^ + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo cfoo > c + $ echo e > e + $ echo dconflict > d + $ hg add c e d + $ hg ci -m "added c e" + created new head + + $ hg up 2 + 1 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo dd > d + $ hg add d + $ hg ci -m "added d" + created new head + + $ hg glog + @ 5:93cd84bbdaca added d + | draft + | + | o 4:3c17c7afaf6e added c e + | | draft + | | + +---o 3:9150fe93bec6 added d + | | draft + | | + o | 2:155349b645be added c + |/ draft + | + o 1:5f6d8a4bf34a added b + | draft + | + o 0:9092f1db7931 added a + draft + + $ hg prune 3 -s 5 + 1 changesets pruned + $ hg prune 3 -s 4 --hidden + 1 changesets pruned + 2 new content-divergent changesets + +Change phase to public for one head: + $ hg phase --public -r 5 + + $ hg glog + @ 5:93cd84bbdaca added d + | public + | + | * 4:3c17c7afaf6e added c e + | | draft content-divergent + | | + o | 2:155349b645be added c + |/ public + | + o 1:5f6d8a4bf34a added b + | public + | + o 0:9092f1db7931 added a + public + + $ hg evolve --content-divergent --any + merge:[5] added d + with: [4] added c e + base: [3] added d + rebasing "other" content-divergent changeset 3c17c7afaf6e on 155349b645be + merging c + warning: conflicts while merging c! (edit, then use 'hg resolve --mark') + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ hg diff + diff -r 155349b645be c + --- a/c Thu Jan 01 00:00:00 1970 +0000 + +++ b/c Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,5 @@ + +<<<<<<< destination: 155349b645be - test: added c + c + +======= + +cfoo + +>>>>>>> evolving: 3c17c7afaf6e - test: added c e + diff -r 155349b645be d + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/d Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +dconflict + diff -r 155349b645be e + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/e Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +e + + $ echo cfoo > c + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + evolving 4:3c17c7afaf6e "added c e" + merging d + warning: conflicts while merging d! (edit, then use 'hg resolve --mark') + 2 files updated, 0 files merged, 0 files removed, 1 files unresolved + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ echo d > d + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + committed as b9082a9e66ce + working directory is now at 93cd84bbdaca + + $ hg evolve -l + $ cd ..
--- a/tests/test-evolve-public-content-divergent.t Sat Jun 01 02:30:14 2019 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2017 +0,0 @@ -Test for handling of content divergence with public cset using `hg evolve` -========================================================================== - -Setup -===== - $ cat >> $HGRCPATH <<EOF - > [alias] - > glog = log -GT "{rev}:{node|short} {desc|firstline}\n {phase} {troubles}\n\n" - > [phases] - > publish = False - > [extensions] - > rebase = - > EOF - $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH - -Testing the case when both divergent cset are on the same parent and no-conflict in merging: -------------------------------------------------------------------------------------- - -Prepare the repository: - - $ hg init pubdiv - $ cd pubdiv - $ for ch in a b; do - > echo $ch > $ch; - > hg ci -Aqm "added "$ch; - > done; - $ hg glog - @ 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - -Make an amend and change phase to public: - - $ sed -i "1 i I am first" b - $ hg amend - $ hg phase --public - -Amend again to create a cset divergent to public one: - - $ hg up 1 --hidden -q - updated to hidden changeset 5f6d8a4bf34a - (hidden revision '5f6d8a4bf34a' was rewritten as: 44f360db368f) - working directory parent is obsolete! (5f6d8a4bf34a) - - $ echo "I am second" >> b - $ hg ci --amend -m "updated b" - 1 new content-divergent changesets - - $ hg glog - @ 3:dcdaf152280a updated b - | draft content-divergent - | - | o 2:44f360db368f added b - |/ public - | - o 0:9092f1db7931 added a - public - - -Lets resolve the public content-divergence: - - $ hg evolve --content-divergent - merge:[2] added b - with: [3] updated b - base: [1] added b - updating to "local" side of the conflict: 44f360db368f - merging "other" content-divergent changeset 'dcdaf152280a' - merging b - 0 files updated, 1 files merged, 0 files removed, 0 files unresolved - committed as c1aa9cfb6cf8 - working directory is now at c1aa9cfb6cf8 - -Following graph log shows that it correctly merged the two divergent csets: - - $ hg glog -p - @ 5:c1aa9cfb6cf8 phase-divergent update to 44f360db368f: - | draft - | - | diff -r 44f360db368f -r c1aa9cfb6cf8 b - | --- a/b Thu Jan 01 00:00:00 1970 +0000 - | +++ b/b Thu Jan 01 00:00:00 1970 +0000 - | @@ -1,2 +1,3 @@ - | I am first - | b - | +I am second - | - o 2:44f360db368f added b - | public - | - | diff -r 9092f1db7931 -r 44f360db368f b - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/b Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,2 @@ - | +I am first - | +b - | - o 0:9092f1db7931 added a - public - - diff -r 000000000000 -r 9092f1db7931 a - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/a Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +a - - $ hg evolve -l - - $ cd .. - -Testing the case when both divergent cset has same parent and has conflict in merging: ------------------------------------------------------------------------------- - -Prepare the repository: - - $ hg init pubdiv1 - $ cd pubdiv1 - $ for ch in a b; do - > echo $ch > $ch; - > hg ci -Aqm "added "$ch; - > done; - $ hg glog - @ 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - -Make an amend and change phase to public: - - $ echo "I am foo" > b - $ hg amend - $ hg phase --public - -Amend again to create a cset divergent to public one: - - $ hg up 1 --hidden -q - updated to hidden changeset 5f6d8a4bf34a - (hidden revision '5f6d8a4bf34a' was rewritten as: 580f2d01e52c) - working directory parent is obsolete! (5f6d8a4bf34a) - - $ echo "I am bar" > b - $ hg ci --amend -m "updated b" - 1 new content-divergent changesets - - $ hg glog - @ 3:0e805383168e updated b - | draft content-divergent - | - | o 2:580f2d01e52c added b - |/ public - | - o 0:9092f1db7931 added a - public - - -Lets resolve the divergence: - - $ hg evolve --content-divergent - merge:[2] added b - with: [3] updated b - base: [1] added b - updating to "local" side of the conflict: 580f2d01e52c - merging "other" content-divergent changeset '0e805383168e' - merging b - warning: conflicts while merging b! (edit, then use 'hg resolve --mark') - 0 files updated, 0 files merged, 0 files removed, 1 files unresolved - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ echo "I am foobar" > b - $ hg resolve -m --tool union - (no more unresolved files) - continue: hg evolve --continue - $ hg evolve --continue - committed as 1a739394e9d4 - working directory is now at 1a739394e9d4 - - $ hg glog - @ 5:1a739394e9d4 phase-divergent update to 580f2d01e52c: - | draft - | - o 2:580f2d01e52c added b - | public - | - o 0:9092f1db7931 added a - public - -Testing the case when divergence is not created by actual diff change, but because of rebasing: ------------------------------------------------------------------------------------------------- - -Prepare the repo: - - $ cd .. - $ hg init rebasediv - $ cd rebasediv - $ for ch in a b c; do - > echo $ch > $ch; - > hg ci -Am "added "$ch; - > done; - adding a - adding b - adding c - - $ hg glog - @ 2:155349b645be added c - | draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - -On server side: a new cset is added based on rev 1 and rev 2 is rebased on newly added cset: - - $ hg up .^ -q - $ echo d > d - $ hg ci -Am "added d" - adding d - created new head - - $ hg rebase -r 2 -d . - rebasing 2:155349b645be "added c" - - $ hg glog - o 4:c0d7ee6604ea added c - | draft - | - @ 3:c9241b0f2d5b added d - | draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - -On user side: user has not pulled yet and amended the rev 2 which created the divergence after pull: - $ hg up 2 --hidden -q - updated to hidden changeset 155349b645be - (hidden revision '155349b645be' was rewritten as: c0d7ee6604ea) - working directory parent is obsolete! (155349b645be) - - $ echo cc >> c - $ hg ci --amend -m "updated c" - 2 new content-divergent changesets - -Lets change the phase to --public of branch which is pulled from server: - $ hg phase --public -r 4 - $ hg glog -p - @ 5:f5f9b4fc8b77 updated c - | draft content-divergent - | - | diff -r 5f6d8a4bf34a -r f5f9b4fc8b77 c - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,2 @@ - | +c - | +cc - | - | o 4:c0d7ee6604ea added c - | | public - | | - | | diff -r c9241b0f2d5b -r c0d7ee6604ea c - | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | | +++ b/c Thu Jan 01 00:00:00 1970 +0000 - | | @@ -0,0 +1,1 @@ - | | +c - | | - | o 3:c9241b0f2d5b added d - |/ public - | - | diff -r 5f6d8a4bf34a -r c9241b0f2d5b d - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/d Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +d - | - o 1:5f6d8a4bf34a added b - | public - | - | diff -r 9092f1db7931 -r 5f6d8a4bf34a b - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/b Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +b - | - o 0:9092f1db7931 added a - public - - diff -r 000000000000 -r 9092f1db7931 a - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/a Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +a - - -Evolve: - $ hg evolve --content-divergent - merge:[4] added c - with: [5] updated c - base: [2] added c - rebasing "other" content-divergent changeset f5f9b4fc8b77 on c9241b0f2d5b - updating to "local" side of the conflict: c0d7ee6604ea - merging "other" content-divergent changeset 'c3d442d80993' - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - committed as 3b336cbee992 - working directory is now at 3b336cbee992 - - $ hg glog -p - @ 8:3b336cbee992 phase-divergent update to c0d7ee6604ea: - | draft - | - | diff -r c0d7ee6604ea -r 3b336cbee992 c - | --- a/c Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c Thu Jan 01 00:00:00 1970 +0000 - | @@ -1,1 +1,2 @@ - | c - | +cc - | - o 4:c0d7ee6604ea added c - | public - | - | diff -r c9241b0f2d5b -r c0d7ee6604ea c - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c - | - o 3:c9241b0f2d5b added d - | public - | - | diff -r 5f6d8a4bf34a -r c9241b0f2d5b d - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/d Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +d - | - o 1:5f6d8a4bf34a added b - | public - | - | diff -r 9092f1db7931 -r 5f6d8a4bf34a b - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/b Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +b - | - o 0:9092f1db7931 added a - public - - diff -r 000000000000 -r 9092f1db7931 a - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/a Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +a - -Check that we don't have any unstable cset now: - $ hg evolve -l - $ cd .. - -Testing the case when csets are on different parent and no conflict in relocation and merging: ----------------------------------------------------------------------------------------------- - - $ hg init pubdiv2 - $ cd pubdiv2 - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Aqm "added "$ch; - > done; - - $ hg up .^ - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo dd > d - $ hg add d - $ hg ci -m "added d" - created new head - - $ hg up 1 - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo dd > d - $ echo e > e - $ hg add d e - $ hg ci -m "added d e" - created new head - - $ hg glog - @ 5:4291d72ee19a added d e - | draft - | - | o 4:93cd84bbdaca added d - | | draft - | | - | | o 3:9150fe93bec6 added d - | |/ draft - | | - | o 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - - $ hg prune 3 -s 5 - 1 changesets pruned - $ hg prune 3 -s 4 --hidden - 1 changesets pruned - 2 new content-divergent changesets - -Change phase to public for one head: - $ hg phase -r 4 --public - - $ hg glog - @ 5:4291d72ee19a added d e - | draft content-divergent - | - | o 4:93cd84bbdaca added d - | | public - | | - | o 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - - $ hg evolve --content-divergent --any - merge:[4] added d - with: [5] added d e - base: [3] added d - rebasing "other" content-divergent changeset 4291d72ee19a on 155349b645be - updating to "local" side of the conflict: 93cd84bbdaca - merging "other" content-divergent changeset 'f88581407163' - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - committed as 4cbe48a0c3d9 - working directory is now at 4cbe48a0c3d9 - - $ hg glog -l 1 - @ 8:4cbe48a0c3d9 phase-divergent update to 93cd84bbdaca: - | draft - ~ - - $ hg evolve -l - $ cd .. - -Different parents, relocation conflict --------------------------------------- - -Testing the case when csets are on different parent and conflict in relocation -but not in merging. - - $ hg init pubdiv3 - $ cd pubdiv3 - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Aqm "added "$ch; - > done; - - $ hg up .^^ - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo d > d - $ echo cfoo > c - $ echo e > e - $ hg add d c e - $ hg ci -m "added d c e" - created new head - - $ hg up 'desc("added c")' - 1 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo dd > d - $ hg add d - $ hg ci -m "added d" - created new head - - $ hg glog - @ 5:93cd84bbdaca added d - | draft - | - | o 4:f31bcc378766 added d c e - | | draft - | | - +---o 3:9150fe93bec6 added d - | | draft - | | - o | 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - $ hg prune 'min(desc("re:added d$"))' -s 'max(desc("re:added d$"))' - 1 changesets pruned - $ hg prune 'min(desc("re:added d$"))' -s 'desc("added d c e")' --hidden - 1 changesets pruned - 2 new content-divergent changesets - -Change phase to public for one head: - $ hg phase --public -r 'max(desc("re:added d$"))' - - $ hg glog - @ 5:93cd84bbdaca added d - | public - | - | * 4:f31bcc378766 added d c e - | | draft content-divergent - | | - o | 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[5] added d - with: [4] added d c e - base: [3] added d - rebasing "other" content-divergent changeset f31bcc378766 on 155349b645be - merging c - warning: conflicts while merging c! (edit, then use 'hg resolve --mark') - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ hg diff - diff -r 155349b645be c - --- a/c Thu Jan 01 00:00:00 1970 +0000 - +++ b/c Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,5 @@ - +<<<<<<< destination: 155349b645be - test: added c - c - +======= - +cfoo - +>>>>>>> evolving: f31bcc378766 - test: added d c e - diff -r 155349b645be d - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/d Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +d - diff -r 155349b645be e - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/e Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +e - - $ echo c > c - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - evolving 4:f31bcc378766 "added d c e" - updating to "local" side of the conflict: 93cd84bbdaca - merging "other" content-divergent changeset 'bd28d3e4a228' - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - committed as 412dde898967 - working directory is now at 412dde898967 - $ hg export - # HG changeset patch - # User test - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 412dde898967b50e7d334aefff778a9af46d29d1 - # Parent 93cd84bbdacaeb8f881c29a609dbdd30c38cbc57 - phase-divergent update to 93cd84bbdaca: - - added d c e - - diff -r 93cd84bbdaca -r 412dde898967 e - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/e Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +e - - $ hg evolve -l - $ cd .. - -Testing the case when merging leads to conflicts but relocation won't: ---------------------------------------------------------------------- - - $ hg init pubdiv3.5 - $ cd pubdiv3.5 - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Aqm "added "$ch; - > done; - - $ hg up .^^ - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo dconflict > d - $ hg add d - $ hg ci -m "added d" - created new head - - $ hg up 2 - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo dd > d - $ hg add d - $ hg ci -m "added d" - created new head - - $ hg glog - @ 5:93cd84bbdaca added d - | draft - | - | o 4:9411ad1fe615 added d - | | draft - | | - +---o 3:9150fe93bec6 added d - | | draft - | | - o | 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - $ hg prune 3 -s 5 - 1 changesets pruned - $ hg prune 3 -s 4 --hidden - 1 changesets pruned - 2 new content-divergent changesets - -Change phase to public for one head: - $ hg phase --public -r 5 - - $ hg glog - @ 5:93cd84bbdaca added d - | public - | - | * 4:9411ad1fe615 added d - | | draft content-divergent - | | - o | 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[5] added d - with: [4] added d - base: [3] added d - rebasing "other" content-divergent changeset 9411ad1fe615 on 155349b645be - updating to "local" side of the conflict: 93cd84bbdaca - merging "other" content-divergent changeset 'b5c690cdf1d5' - merging d - warning: conflicts while merging d! (edit, then use 'hg resolve --mark') - 0 files updated, 0 files merged, 0 files removed, 1 files unresolved - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ echo d > d - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - committed as 2a0f44767904 - working directory is now at 2a0f44767904 - - $ hg evolve -l - $ cd .. - -Testing the case when relocation and merging both leads to conflicts: --------------------------------------------------------------------- - - $ hg init pubdiv4 - $ cd pubdiv4 - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Aqm "added "$ch; - > done; - - $ hg up .^^ - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo cfoo > c - $ echo e > e - $ echo dconflict > d - $ hg add c e d - $ hg ci -m "added c e" - created new head - - $ hg up 2 - 1 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo dd > d - $ hg add d - $ hg ci -m "added d" - created new head - - $ hg glog - @ 5:93cd84bbdaca added d - | draft - | - | o 4:3c17c7afaf6e added c e - | | draft - | | - +---o 3:9150fe93bec6 added d - | | draft - | | - o | 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - $ hg prune 3 -s 5 - 1 changesets pruned - $ hg prune 3 -s 4 --hidden - 1 changesets pruned - 2 new content-divergent changesets - -Change phase to public for one head: - $ hg phase --public -r 5 - - $ hg glog - @ 5:93cd84bbdaca added d - | public - | - | * 4:3c17c7afaf6e added c e - | | draft content-divergent - | | - o | 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[5] added d - with: [4] added c e - base: [3] added d - rebasing "other" content-divergent changeset 3c17c7afaf6e on 155349b645be - merging c - warning: conflicts while merging c! (edit, then use 'hg resolve --mark') - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ hg diff - diff -r 155349b645be c - --- a/c Thu Jan 01 00:00:00 1970 +0000 - +++ b/c Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,5 @@ - +<<<<<<< destination: 155349b645be - test: added c - c - +======= - +cfoo - +>>>>>>> evolving: 3c17c7afaf6e - test: added c e - diff -r 155349b645be d - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/d Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +dconflict - diff -r 155349b645be e - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/e Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +e - - $ echo cfoo > c - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - evolving 4:3c17c7afaf6e "added c e" - updating to "local" side of the conflict: 93cd84bbdaca - merging "other" content-divergent changeset 'c4ce3d34e784' - merging d - warning: conflicts while merging d! (edit, then use 'hg resolve --mark') - 2 files updated, 0 files merged, 0 files removed, 1 files unresolved - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ echo d > d - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - committed as b9082a9e66ce - working directory is now at b9082a9e66ce - - $ hg evolve -l - $ cd .. - -Different parent, simple conflict on relocate, deleted file on actual merge ---------------------------------------------------------------------------- - -Changeset "added c e" is also removing 'd'. This should conflict with the update -to 'd' in the successors of 'adding d' when solving the content divergence. - - $ hg init pubdiv-parent-deleted-file - $ cd pubdiv-parent-deleted-file - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Aqm "added "$ch; - > done; - - $ hg up 'desc("added b")' - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo cfoo > c - $ echo e > e - $ hg add c e - $ hg ci -m "added c e" - created new head - - $ hg up 'desc("re:added c$")' - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo dd > d - $ hg add d - $ hg ci -m "added d" - created new head - - $ hg glog --patch --rev 'sort(all(), "topo")' - @ 5:93cd84bbdaca added d - | draft - | - | diff -r 155349b645be -r 93cd84bbdaca d - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/d Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +dd - | - | o 3:9150fe93bec6 added d - |/ draft - | - | diff -r 155349b645be -r 9150fe93bec6 d - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/d Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +d - | - o 2:155349b645be added c - | draft - | - | diff -r 5f6d8a4bf34a -r 155349b645be c - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c - | - | o 4:e568fd1029bb added c e - |/ draft - | - | diff -r 5f6d8a4bf34a -r e568fd1029bb c - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +cfoo - | diff -r 5f6d8a4bf34a -r e568fd1029bb e - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/e Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +e - | - o 1:5f6d8a4bf34a added b - | draft - | - | diff -r 9092f1db7931 -r 5f6d8a4bf34a b - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/b Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +b - | - o 0:9092f1db7931 added a - draft - - diff -r 000000000000 -r 9092f1db7931 a - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/a Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +a - - $ hg prune 'min(desc("added d"))' -s 'max(desc("added d"))' - 1 changesets pruned - $ hg prune 'min(desc("added d"))' -s 'desc("added c e")' --hidden - 1 changesets pruned - 2 new content-divergent changesets - -Change phase to public for one head: - $ hg phase --public -r 'max(desc("added d"))' - - $ hg glog - @ 5:93cd84bbdaca added d - | public - | - | * 4:e568fd1029bb added c e - | | draft content-divergent - | | - o | 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - - $ hg glog --patch --rev 'sort(all(), "topo")' --hidden - @ 5:93cd84bbdaca added d - | public - | - | diff -r 155349b645be -r 93cd84bbdaca d - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/d Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +dd - | - | x 3:9150fe93bec6 added d - |/ draft - | - | diff -r 155349b645be -r 9150fe93bec6 d - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/d Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +d - | - o 2:155349b645be added c - | public - | - | diff -r 5f6d8a4bf34a -r 155349b645be c - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c - | - | * 4:e568fd1029bb added c e - |/ draft content-divergent - | - | diff -r 5f6d8a4bf34a -r e568fd1029bb c - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +cfoo - | diff -r 5f6d8a4bf34a -r e568fd1029bb e - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/e Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +e - | - o 1:5f6d8a4bf34a added b - | public - | - | diff -r 9092f1db7931 -r 5f6d8a4bf34a b - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/b Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +b - | - o 0:9092f1db7931 added a - public - - diff -r 000000000000 -r 9092f1db7931 a - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/a Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +a - - - $ hg obslog --all --rev tip --patch - @ 93cd84bbdaca (5) added d - | - | * e568fd1029bb (4) added c e - |/ - x 9150fe93bec6 (3) added d - rewritten(content) as 93cd84bbdaca using prune by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 9150fe93bec6 -r 93cd84bbdaca d - --- a/d Thu Jan 01 00:00:00 1970 +0000 - +++ b/d Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,1 @@ - -d - +dd - - rewritten(description, parent, content) as e568fd1029bb using prune by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, changesets rebased) - - - $ hg evolve --content-divergent --any - merge:[5] added d - with: [4] added c e - base: [3] added d - rebasing "other" content-divergent changeset e568fd1029bb on 155349b645be - merging c - warning: conflicts while merging c! (edit, then use 'hg resolve --mark') - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ hg diff - diff -r 155349b645be c - --- a/c Thu Jan 01 00:00:00 1970 +0000 - +++ b/c Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,5 @@ - +<<<<<<< destination: 155349b645be - test: added c - c - +======= - +cfoo - +>>>>>>> evolving: e568fd1029bb - test: added c e - diff -r 155349b645be e - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/e Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +e - - $ echo c > c - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - evolving 4:e568fd1029bb "added c e" - updating to "local" side of the conflict: 93cd84bbdaca - merging "other" content-divergent changeset '2af3359250d3' - file 'd' was deleted in other but was modified in local. - What do you want to do? - use (c)hanged version, (d)elete, or leave (u)nresolved? u - 1 files updated, 0 files merged, 0 files removed, 1 files unresolved - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ hg sum - parent: 5:93cd84bbdaca - added d - parent: 6:2af3359250d3 tip (content-divergent) - added c e - branch: default - commit: 1 modified, 1 unknown, 1 unresolved (merge) - update: (current) - phases: 1 draft - content-divergent: 1 changesets - evolve: (evolve --continue) - - $ echo resolved > d - $ hg resolve -m d - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - committed as bc1f4610744c - working directory is now at bc1f4610744c - - $ hg export - # HG changeset patch - # User test - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID bc1f4610744c6aa0e851d3876a61bfff6243b31c - # Parent 93cd84bbdacaeb8f881c29a609dbdd30c38cbc57 - phase-divergent update to 93cd84bbdaca: - - added c e - - diff -r 93cd84bbdaca -r bc1f4610744c d - --- a/d Thu Jan 01 00:00:00 1970 +0000 - +++ b/d Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,1 @@ - -dd - +resolved - diff -r 93cd84bbdaca -r bc1f4610744c e - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/e Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +e - - $ hg evolve -l - $ cd .. - -Testing the case when "merging results in same as public cset" where: -both the csets are on same parent and no conflict in merging. ---------------------------------------------------------------------- - -Prepare the repo: - - $ hg init pubdiv5 - $ cd pubdiv5 - $ for ch in a b c; do - > echo $ch > $ch; - > hg ci -Am "added "$ch; - > done; - adding a - adding b - adding c - - $ hg up .^ - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo ch > ch - $ hg add ch - $ hg ci -m "added ch" - created new head - - $ hg up .^ - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo ch > ch - $ hg add ch - $ hg ci -m "added c" - created new head - - $ hg glog - @ 4:f7c1071f1e7c added c - | draft - | - | o 3:90522bccf499 added ch - |/ draft - | - | o 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - - $ hg prune 2 -s 3 - 1 changesets pruned - $ hg prune 2 -s 4 --hidden - 1 changesets pruned - 2 new content-divergent changesets - $ hg phase --public -r 4 - - $ hg glog - @ 4:f7c1071f1e7c added c - | public - | - | * 3:90522bccf499 added ch - |/ draft content-divergent - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[4] added c - with: [3] added ch - base: [2] added c - merging "other" content-divergent changeset '90522bccf499' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - content-divergent changesets differ by descriptions only, discarding 90522bccf499 - - $ hg evolve -l - - $ hg par - changeset: 4:f7c1071f1e7c - tag: tip - parent: 1:5f6d8a4bf34a - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added c - - -Testing the case when "merging results in same as public cset" where: -both the csets are on different parent and no conflict in merging and relocation. ---------------------------------------------------------------------------------- - -Prepare the repo: - - $ cd .. - $ hg init pubdiv6 - $ cd pubdiv6 - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Am "added "$ch; - > done; - adding a - adding b - adding c - adding d - - $ hg up 1 - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo dh > dh - $ hg add dh - $ hg ci -m "added dh" - created new head - - $ hg up 2 - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo dh > dh - $ hg add dh - $ hg ci -m "added d" - created new head - - $ hg glog - @ 5:e800202333a4 added d - | draft - | - | o 4:5acd58ef5066 added dh - | | draft - | | - +---o 3:9150fe93bec6 added d - | | draft - | | - o | 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - - $ hg prune 3 -s 4 - 1 changesets pruned - $ hg prune 3 -s 5 --hidden - 1 changesets pruned - 2 new content-divergent changesets - $ hg phase --public -r 5 - - $ hg glog - @ 5:e800202333a4 added d - | public - | - | * 4:5acd58ef5066 added dh - | | draft content-divergent - | | - o | 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[5] added d - with: [4] added dh - base: [3] added d - rebasing "other" content-divergent changeset 5acd58ef5066 on 155349b645be - updating to "local" side of the conflict: e800202333a4 - merging "other" content-divergent changeset 'ae3429430ef1' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - content-divergent changesets differ by descriptions only, discarding ae3429430ef1 - - $ hg evolve -l - - $ hg par - changeset: 5:e800202333a4 - tag: tip - parent: 2:155349b645be - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added d - -Testing the case when "merging results in same as public cset" where: -both the csets are on same parent and merging leads to conflict. ---------------------------------------------------------------------- - -Prepare the repo: - - $ cd .. - $ hg init pubdiv7 - $ cd pubdiv7 - $ for ch in a b c; do - > echo $ch > $ch; - > hg ci -Am "added "$ch; - > done; - adding a - adding b - adding c - - $ hg up .^ - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo chconflict > ch - $ hg add ch - $ hg ci -m "added ch" - created new head - - $ hg up .^ - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo ch > ch - $ hg add ch - $ hg ci -m "added c" - created new head - - $ hg glog - @ 4:f7c1071f1e7c added c - | draft - | - | o 3:229da2719b19 added ch - |/ draft - | - | o 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - - $ hg prune 2 -s 3 - 1 changesets pruned - $ hg prune 2 -s 4 --hidden - 1 changesets pruned - 2 new content-divergent changesets - $ hg phase --public -r 4 - - $ hg glog - @ 4:f7c1071f1e7c added c - | public - | - | * 3:229da2719b19 added ch - |/ draft content-divergent - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[4] added c - with: [3] added ch - base: [2] added c - merging "other" content-divergent changeset '229da2719b19' - merging ch - warning: conflicts while merging ch! (edit, then use 'hg resolve --mark') - 0 files updated, 0 files merged, 0 files removed, 1 files unresolved - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ hg diff - diff -r f7c1071f1e7c ch - --- a/ch Thu Jan 01 00:00:00 1970 +0000 - +++ b/ch Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,5 @@ - +<<<<<<< local: f7c1071f1e7c - test: added c - ch - +======= - +chconflict - +>>>>>>> other: 229da2719b19 - test: added ch - - $ echo ch > ch - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - content-divergent changesets differ by descriptions only, discarding 229da2719b19 - working directory is now at f7c1071f1e7c - - $ hg evolve -l - - $ hg par - changeset: 4:f7c1071f1e7c - tag: tip - parent: 1:5f6d8a4bf34a - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added c - -Testing the case when "merging results in same as public cset" where: -both the csets are on different parent and relocation leads to conflict but merging won't. ------------------------------------------------------------------------------------------- -Prepare the repo: - - $ cd .. - $ hg init pubdiv8 - $ cd pubdiv8 - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Am "added "$ch; - > done; - adding a - adding b - adding c - adding d - - $ hg up 1 - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo dh > dh - $ echo cc > c - $ hg add dh c - $ hg ci -m "added dh" - created new head - - $ hg up 2 - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo dh > dh - $ hg add dh - $ hg ci -m "added d" - created new head - - $ hg glog - @ 5:e800202333a4 added d - | draft - | - | o 4:f89a8e2f86ac added dh - | | draft - | | - +---o 3:9150fe93bec6 added d - | | draft - | | - o | 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - - $ hg prune 3 -s 4 - 1 changesets pruned - $ hg prune 3 -s 5 --hidden - 1 changesets pruned - 2 new content-divergent changesets - $ hg phase --public -r 5 - - $ hg glog - @ 5:e800202333a4 added d - | public - | - | * 4:f89a8e2f86ac added dh - | | draft content-divergent - | | - o | 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[5] added d - with: [4] added dh - base: [3] added d - rebasing "other" content-divergent changeset f89a8e2f86ac on 155349b645be - merging c - warning: conflicts while merging c! (edit, then use 'hg resolve --mark') - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ echo c > c - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - evolving 4:f89a8e2f86ac "added dh" - updating to "local" side of the conflict: e800202333a4 - merging "other" content-divergent changeset 'bc309da55b88' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - content-divergent changesets differ by descriptions only, discarding bc309da55b88 - working directory is now at e800202333a4 - - $ hg evolve -l - - $ hg par - changeset: 5:e800202333a4 - tag: tip - parent: 2:155349b645be - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added d - -Testing the case when "merging results in same as public cset" where: -both the csets are on different parent and merging leads to conflict but relocation won't. ------------------------------------------------------------------------------------------- -Prepare the repo: - - $ cd .. - $ hg init pubdiv9 - $ cd pubdiv9 - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Am "added "$ch; - > done; - adding a - adding b - adding c - adding d - - $ hg up 1 - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo dhconflict > dh - $ hg add dh - $ hg ci -m "added dh" - created new head - - $ hg up 2 - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo dh > dh - $ hg add dh - $ hg ci -m "added d" - created new head - - $ hg glog - @ 5:e800202333a4 added d - | draft - | - | o 4:db0b7bba0aae added dh - | | draft - | | - +---o 3:9150fe93bec6 added d - | | draft - | | - o | 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - - $ hg prune 3 -s 4 - 1 changesets pruned - $ hg prune 3 -s 5 --hidden - 1 changesets pruned - 2 new content-divergent changesets - $ hg phase --public -r 5 - - $ hg glog - @ 5:e800202333a4 added d - | public - | - | * 4:db0b7bba0aae added dh - | | draft content-divergent - | | - o | 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[5] added d - with: [4] added dh - base: [3] added d - rebasing "other" content-divergent changeset db0b7bba0aae on 155349b645be - updating to "local" side of the conflict: e800202333a4 - merging "other" content-divergent changeset 'a5bbf2042450' - merging dh - warning: conflicts while merging dh! (edit, then use 'hg resolve --mark') - 0 files updated, 0 files merged, 0 files removed, 1 files unresolved - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ echo dh > dh - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - content-divergent changesets differ by descriptions only, discarding a5bbf2042450 - working directory is now at e800202333a4 - - $ hg evolve -l - - $ hg par - changeset: 5:e800202333a4 - tag: tip - parent: 2:155349b645be - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added d - - -Testing the case when "merging results in same as public cset" where: -both the csets are on different parent and relocation and merging both leads to conflict: ------------------------------------------------------------------------------------------ -Prepare the repo: - - $ cd .. - $ hg init pubdiv10 - $ cd pubdiv10 - $ for ch in a b c d; do - > echo $ch > $ch; - > hg ci -Am "added "$ch; - > done; - adding a - adding b - adding c - adding d - - $ hg up 1 - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo dhconflict > dh - $ echo cc > c - $ hg add dh c - $ hg ci -m "added dh" - created new head - - $ hg up 2 - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo dh > dh - $ hg add dh - $ hg ci -m "added d" - created new head - - $ hg glog - @ 5:e800202333a4 added d - | draft - | - | o 4:67b19bbd770f added dh - | | draft - | | - +---o 3:9150fe93bec6 added d - | | draft - | | - o | 2:155349b645be added c - |/ draft - | - o 1:5f6d8a4bf34a added b - | draft - | - o 0:9092f1db7931 added a - draft - - - $ hg prune 3 -s 4 - 1 changesets pruned - $ hg prune 3 -s 5 --hidden - 1 changesets pruned - 2 new content-divergent changesets - $ hg phase --public -r 5 - - $ hg glog - @ 5:e800202333a4 added d - | public - | - | * 4:67b19bbd770f added dh - | | draft content-divergent - | | - o | 2:155349b645be added c - |/ public - | - o 1:5f6d8a4bf34a added b - | public - | - o 0:9092f1db7931 added a - public - - $ hg evolve --content-divergent --any - merge:[5] added d - with: [4] added dh - base: [3] added d - rebasing "other" content-divergent changeset 67b19bbd770f on 155349b645be - merging c - warning: conflicts while merging c! (edit, then use 'hg resolve --mark') - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ echo c > c - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - evolving 4:67b19bbd770f "added dh" - updating to "local" side of the conflict: e800202333a4 - merging "other" content-divergent changeset '09054d1f3c97' - merging dh - warning: conflicts while merging dh! (edit, then use 'hg resolve --mark') - 0 files updated, 0 files merged, 0 files removed, 1 files unresolved - fix conflicts and see `hg help evolve.interrupted` - [1] - - $ echo dh > dh - $ hg res -m - (no more unresolved files) - continue: hg evolve --continue - - $ hg evolve --continue - content-divergent changesets differ by descriptions only, discarding 09054d1f3c97 - working directory is now at e800202333a4 - - $ hg evolve -l - - $ hg par - changeset: 5:e800202333a4 - tag: tip - parent: 2:155349b645be - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added d - - - $ cd .. - -Test a pratical "rebase" case -============================= - -Initial setup - - $ hg init rebase-divergence - $ cd rebase-divergence - $ echo root >> root - $ hg add root - $ hg commit -m root - $ for x in c_A c_B c_C c_D; do - > echo $x >> $x - > hg add $x - > hg commit -m $x - > done - - $ hg up 'desc("c_A")' - 0 files updated, 0 files merged, 3 files removed, 0 files unresolved - - $ for x in c_E c_F; do - > echo $x >> $x - > hg add $x - > hg commit -m $x - > done - created new head - -(creating divergence locally for simplicity) - - $ node=`hg log --rev 'desc("c_E")' -T '{node}'` - $ hg rebase -s $node -d 'desc("c_B")' - rebasing 5:4ab2719bbab9 "c_E" - rebasing 6:77ccbf8d837e "c_F" (tip) - $ hg phase --public tip - $ hg rebase --hidden -s $node -d 'desc("c_C")' --config experimental.evolution.allowdivergence=yes - rebasing 5:4ab2719bbab9 "c_E" - rebasing 6:77ccbf8d837e "c_F" - 2 new content-divergent changesets - - $ hg sum - parent: 8:a52ac76b45f5 - c_F - branch: default - commit: (clean) - update: 4 new changesets, 3 branch heads (merge) - phases: 4 draft - content-divergent: 2 changesets - $ hg evolve --list - b4a584aea4bd: c_E - content-divergent: c7d2d47c7240 (public) (precursor 4ab2719bbab9) - - 8ae8db670b4a: c_F - content-divergent: a52ac76b45f5 (public) (precursor 77ccbf8d837e) - - $ hg log -G --patch - * changeset: 10:8ae8db670b4a - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | instability: content-divergent - | summary: c_F - | - | diff -r b4a584aea4bd -r 8ae8db670b4a c_F - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_F Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_F - | - * changeset: 9:b4a584aea4bd - | parent: 3:abb77b893f28 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | instability: content-divergent - | summary: c_E - | - | diff -r abb77b893f28 -r b4a584aea4bd c_E - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_E Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_E - | - | @ changeset: 8:a52ac76b45f5 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: c_F - | | - | | diff -r c7d2d47c7240 -r a52ac76b45f5 c_F - | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | | +++ b/c_F Thu Jan 01 00:00:00 1970 +0000 - | | @@ -0,0 +1,1 @@ - | | +c_F - | | - | o changeset: 7:c7d2d47c7240 - | | parent: 2:eb1b4e1205b8 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: c_E - | | - | | diff -r eb1b4e1205b8 -r c7d2d47c7240 c_E - | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | | +++ b/c_E Thu Jan 01 00:00:00 1970 +0000 - | | @@ -0,0 +1,1 @@ - | | +c_E - | | - +---o changeset: 4:dbb960d6c97c - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: c_D - | | - | | diff -r abb77b893f28 -r dbb960d6c97c c_D - | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | | +++ b/c_D Thu Jan 01 00:00:00 1970 +0000 - | | @@ -0,0 +1,1 @@ - | | +c_D - | | - o | changeset: 3:abb77b893f28 - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: c_C - | - | diff -r eb1b4e1205b8 -r abb77b893f28 c_C - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_C Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_C - | - o changeset: 2:eb1b4e1205b8 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: c_B - | - | diff -r e31751786014 -r eb1b4e1205b8 c_B - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_B Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_B - | - o changeset: 1:e31751786014 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: c_A - | - | diff -r 1e4be0697311 -r e31751786014 c_A - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_A Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_A - | - o changeset: 0:1e4be0697311 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: root - - diff -r 000000000000 -r 1e4be0697311 root - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/root Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +root - - -Run automatic evolution - - $ hg evolve --content-divergent --rev 'not public() and desc("c_E")::' - merge:[7] c_E - with: [9] c_E - base: [5] c_E - rebasing "other" content-divergent changeset b4a584aea4bd on eb1b4e1205b8 - updating to "local" side of the conflict: c7d2d47c7240 - merging "other" content-divergent changeset '0773642cfa95' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - 1 new orphan changesets - merge:[8] c_F - with: [10] c_F - base: [6] c_F - rebasing "other" content-divergent changeset 8ae8db670b4a on c7d2d47c7240 - updating to "local" side of the conflict: a52ac76b45f5 - merging "other" content-divergent changeset '6a87ed4aa317' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg sum - parent: 8:a52ac76b45f5 tip - c_F - branch: default - commit: (clean) - update: 2 new changesets, 2 branch heads (merge) - phases: 2 draft - - $ hg evolve --list - - $ hg log -G --patch - @ changeset: 8:a52ac76b45f5 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: c_F - | - | diff -r c7d2d47c7240 -r a52ac76b45f5 c_F - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_F Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_F - | - o changeset: 7:c7d2d47c7240 - | parent: 2:eb1b4e1205b8 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: c_E - | - | diff -r eb1b4e1205b8 -r c7d2d47c7240 c_E - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_E Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_E - | - | o changeset: 4:dbb960d6c97c - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: c_D - | | - | | diff -r abb77b893f28 -r dbb960d6c97c c_D - | | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | | +++ b/c_D Thu Jan 01 00:00:00 1970 +0000 - | | @@ -0,0 +1,1 @@ - | | +c_D - | | - | o changeset: 3:abb77b893f28 - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: c_C - | - | diff -r eb1b4e1205b8 -r abb77b893f28 c_C - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_C Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_C - | - o changeset: 2:eb1b4e1205b8 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: c_B - | - | diff -r e31751786014 -r eb1b4e1205b8 c_B - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_B Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_B - | - o changeset: 1:e31751786014 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: c_A - | - | diff -r 1e4be0697311 -r e31751786014 c_A - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/c_A Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +c_A - | - o changeset: 0:1e4be0697311 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: root - - diff -r 000000000000 -r 1e4be0697311 root - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/root Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +root - - $ hg export tip - # HG changeset patch - # User test - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID a52ac76b45f523a039fc4a938d79874f4bdb1a85 - # Parent c7d2d47c7240562be5cbd1a24080dd0396178709 - c_F - - diff -r c7d2d47c7240 -r a52ac76b45f5 c_F - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/c_F Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +c_F - - $ hg obslog --rev a52ac76b45f5 - @ a52ac76b45f5 (8) c_F - |\ - x | 6a87ed4aa317 (12) c_F - | | rewritten as a52ac76b45f5 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) - | | - x | 8ae8db670b4a (10) c_F - |/ rewritten(parent) as 6a87ed4aa317 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) - | - x 77ccbf8d837e (6) c_F - rewritten(parent) as 8ae8db670b4a using rebase by test (Thu Jan 01 00:00:00 1970 +0000) - rewritten(parent) as a52ac76b45f5 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) -
--- a/tests/test-evolve-serveronly-bundle2.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-serveronly-bundle2.t Tue Jun 04 11:08:44 2019 +0200 @@ -86,9 +86,9 @@ =================== $ curl -s http://localhost:$HGPORT/?cmd=hello - capabilities: _evoext_getbundle_obscommon _evoext_obshash_0 _evoext_obshash_1 _evoext_obshashrange_v1 batch * (glob) + capabilities: _evoext_getbundle_obscommon _evoext_obshashrange_v1 batch * (glob) $ curl -s http://localhost:$HGPORT/?cmd=capabilities - _evoext_getbundle_obscommon _evoext_obshash_0 _evoext_obshash_1 _evoext_obshashrange_v1 batch * (no-eol) (glob) + _evoext_getbundle_obscommon _evoext_obshashrange_v1 batch * (no-eol) (glob) $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort bookmarks @@ -151,9 +151,9 @@ obsolete phases $ curl -s http://localhost:$HGPORT/?cmd=hello - capabilities: _evoext_getbundle_obscommon _evoext_obshash_0 _evoext_obshash_1 _evoext_obshashrange_v1 batch * (glob) + capabilities: _evoext_getbundle_obscommon _evoext_obshashrange_v1 batch * (glob) $ curl -s http://localhost:$HGPORT/?cmd=capabilities - _evoext_getbundle_obscommon _evoext_obshash_0 _evoext_obshash_1 _evoext_obshashrange_v1 batch * (no-eol) (glob) + _evoext_getbundle_obscommon _evoext_obshashrange_v1 batch * (no-eol) (glob) $ echo '[experimental]' >> server/.hg/hgrc $ echo 'evolution=!' >> server/.hg/hgrc @@ -178,9 +178,9 @@ phases $ curl -s http://localhost:$HGPORT/?cmd=hello - capabilities: _evoext_getbundle_obscommon _evoext_obshash_0 _evoext_obshash_1 _evoext_obshashrange_v1 batch * (glob) + capabilities: _evoext_getbundle_obscommon _evoext_obshashrange_v1 batch * (glob) $ curl -s http://localhost:$HGPORT/?cmd=capabilities - _evoext_getbundle_obscommon _evoext_obshash_0 _evoext_obshash_1 _evoext_obshashrange_v1 batch * (no-eol) (glob) + _evoext_getbundle_obscommon _evoext_obshashrange_v1 batch * (no-eol) (glob) Test obshashrange discover ===========================================
--- a/tests/test-evolve-split.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-split.t Tue Jun 04 11:08:44 2019 +0200 @@ -59,4 +59,3 @@ $ hg evolve --rev "0::" move:[2] add uu atop:[4] _pp - working directory is now at 6f5bbe2e3df3
--- a/tests/test-evolve-stop-orphan.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-stop-orphan.t Tue Jun 04 11:08:44 2019 +0200 @@ -191,7 +191,7 @@ we do `evolve --stop` -------------------------------------------------------------------------------- - $ hg evolve + $ hg evolve --update move:[4] added d atop:[5] added c merging d @@ -293,13 +293,13 @@ evolving 5:cb6a2ab625bb "added c" move:[6] added d atop:[10] added c - working directory is now at cd0909a30222 + working directory is now at aec285328e90 $ hg glog - @ 11:cd0909a30222 added d + o 11:cd0909a30222 added d | () draft o 10:cb1dd1086ef6 added c | () draft - o 9:aec285328e90 added b + @ 9:aec285328e90 added b | () draft o 8:fd00db71edca added a | () draft @@ -310,8 +310,8 @@ bookmarks of rest of them should stay where they are are ------------------------------------------------------------------------- - $ hg up .^ - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg up tip^ + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg bookmark b1 $ hg up .^ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
--- a/tests/test-evolve-templates.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-templates.t Tue Jun 04 11:08:44 2019 +0200 @@ -1544,7 +1544,7 @@ $ mkcommit A0 $ hg prune . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at ea207398892e + working directory is now at ea207398892e 1 changesets pruned Check output
--- a/tests/test-evolve-topic.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve-topic.t Tue Jun 04 11:08:44 2019 +0200 @@ -132,7 +132,7 @@ s1: add ccc s0^ add bbb (base) - $ hg evolve --all + $ hg evolve --all --update move:[s3] add eee atop:[s2] add ddd move:[s4] add fff @@ -168,7 +168,7 @@ Test that evolve does not loose topic information ------------------------------------------------- - $ hg evolve --rev 'topic(bar)' + $ hg evolve --rev 'topic(bar)' --update move:[6] add ggg atop:[13] add fff move:[7] add hhh @@ -304,7 +304,7 @@ $ hg topic - * bar (5 changesets, 4 troubled) + * bar (5 changesets, 4 unstable) foo (3 changesets) When the current topic, obsoleted changesets topic and successor topic are same @@ -393,9 +393,6 @@ move:[s3] add hhh move:[s4] add iii move:[s5] add jjj - working directory is now at 38a82cbb794a - $ hg up 18 - 0 files updated, 0 files merged, 4 files removed, 0 files unresolved $ echo "changes in hhh" > hhh $ hg add hhh $ hg ci --amend @@ -440,4 +437,4 @@ move:[s4] add iii atop:[s3] add hhh move:[s5] add jjj - working directory is now at 119e4c126fb2 + working directory is now at 2c295936ac04
--- a/tests/test-evolve.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-evolve.t Tue Jun 04 11:08:44 2019 +0200 @@ -156,7 +156,7 @@ 5 $ hg prune . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at fbb94e3a0ecf + working directory is now at fbb94e3a0ecf 1 changesets pruned $ hg qlog 4 - fbb94e3a0ecf add e (draft) @@ -169,7 +169,7 @@ $ hg prune 4 -r 3 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 7c3bad9141dc + working directory is now at 7c3bad9141dc 2 changesets pruned $ hg qlog 2 - 4538525df7e2 add c (draft) @@ -184,7 +184,7 @@ $ hg add g $ hg prune . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 7c3bad9141dc + working directory is now at 7c3bad9141dc 1 changesets pruned $ hg st A g @@ -368,7 +368,6 @@ move:[3] another feature (child of 568a468b60fc) atop:[4] a nifty feature merging main-file-1 - working directory is now at 99833d22b0c6 $ hg log 5 feature-B: another feature (child of ba0ec09b1bab) - test 4 feature-A: a nifty feature - test @@ -377,7 +376,7 @@ Test commit -o options $ hg up -r "desc('a nifty feature')" - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg revert -r "desc('another feature')" --all reverting main-file-1 adding file-from-B @@ -442,7 +441,7 @@ (ninja test for the {trouble} template: - $ hg log -G --template '{rev} {troubles}\n' + $ hg log -G --template '{rev} {instabilities}\n' @ 10 | | * 9 orphan @@ -467,13 +466,12 @@ merging main-file-1 move:[9] dansk 3! merging main-file-1 - working directory is now at 96abb1319a47 $ hg log -G - @ 12 : dansk 3! - test + o 12 : dansk 3! - test | o 11 : dansk 2! - test | - o 10 feature-B: dansk! - test + @ 10 feature-B: dansk! - test | o 5 : another feature (child of ba0ec09b1bab) - test | @@ -838,6 +836,8 @@ Test fold with commit messages $ cd ../work + $ hg up + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg fold --from .^ --message "Folding with custom commit message" 2 changesets folded 1 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -907,12 +907,11 @@ $ hg evolve move:[3] a3 atop:[4] a2 - working directory is now at 7c5649f73d11 $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' - @ 5 [mybranch] a3 + o 5 [mybranch] a3 | - o 4 [mybranch] a2 + @ 4 [mybranch] a2 | o 1 [default] a1 | @@ -925,28 +924,24 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg amend -m 'a1_' 2 new orphan changesets - $ hg evolve + $ hg evolve --rev 'first(orphan())' move:[4] a2 atop:[6] a1_ - working directory is now at eb07e22a0e63 $ hg evolve move:[5] a3 atop:[7] a2 - working directory is now at 777c26ca5e78 $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' - @ 8 [mybranch] a3 + o 8 [mybranch] a3 | o 7 [mybranch] a2 | - o 6 [default] a1_ + @ 6 [default] a1_ | o 0 [default] a0 Evolve from the middle of a stack pick the right changesets. - $ hg up -r "desc('a1_')" - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg ci --amend -m 'a1__' 2 new orphan changesets @@ -977,17 +972,16 @@ $ ls .hg/bookmarks* .hg/bookmarks .hg/bookmarks.* (glob) - $ hg evolve + $ hg evolve --rev 'first(orphan())' move:[7] a2 atop:[9] a1__ (leaving bookmark testbookmark) - working directory is now at d952e93add6f $ ls .hg/bookmarks* .hg/bookmarks $ glog - @ 10:d952e93add6f@mybranch(draft) a2 + o 10:d952e93add6f@mybranch(draft) a2 | - o 9:9f8b83c2e7f3@default(draft) a1__ + @ 9:9f8b83c2e7f3@default(draft) a1__ | | * 8:777c26ca5e78@mybranch(draft) a3 | | @@ -1000,8 +994,6 @@ Possibility to select what instability to solve first, asking for phase-divergent before content-divergent - $ hg up -r "desc('a1__')" - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg revert -r d952e93add6f --all reverting a $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' @@ -1064,11 +1056,10 @@ $ hg evolve --any move:[8] a3 atop:[12] phase-divergent update to d952e93add6f: - working directory is now at b88539ad24d7 $ glog - @ 13:b88539ad24d7@default(draft) a3 + o 13:b88539ad24d7@default(draft) a3 | - o 12:a8bb31d4b7f2@default(draft) phase-divergent update to d952e93add6f: + @ 12:a8bb31d4b7f2@default(draft) phase-divergent update to d952e93add6f: | o 10:d952e93add6f@mybranch(public) a2 | @@ -1079,7 +1070,7 @@ Check that we can resolve instabilities in a revset with more than one commit $ hg up b88539ad24d7 -C - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ mkcommit gg $ hg up b88539ad24d7 0 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -1137,13 +1128,12 @@ atop:[16] a3 move:[15] add gh atop:[16] a3 - working directory is now at 0c049e4e5422 $ glog - @ 18:0c049e4e5422@default(draft) add gh + o 18:0c049e4e5422@default(draft) add gh | | o 17:98e171e2f272@default(draft) add gg |/ - o 16:0cf3707e8971@default(draft) a3 + @ 16:0cf3707e8971@default(draft) a3 | o 12:a8bb31d4b7f2@default(draft) phase-divergent update to d952e93add6f: | @@ -1183,7 +1173,7 @@ Shows "use 'hg evolve' to..." hints iff the evolve command is enabled $ hg --hidden up 14 - 2 files updated, 0 files merged, 1 files removed, 0 files unresolved + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved updated to hidden changeset 484fb3cfa7f2 (hidden revision '484fb3cfa7f2' was rewritten as: 98e171e2f272) working directory parent is obsolete! (484fb3cfa7f2) @@ -1287,15 +1277,14 @@ move:[20] add j2 atop:[23] add j1 move:[21] add j3 - working directory is now at 0d9203b74542 $ glog -r "0cf3707e8971::" - @ 25:0d9203b74542@default(draft) add j3 + o 25:0d9203b74542@default(draft) add j3 | o 24:f1b85956c48c@default(draft) add j2 | o 23:0ef9ff75f8e2@default(draft) add j1 | - | o 18:0c049e4e5422@default(draft) add gh + | @ 18:0c049e4e5422@default(draft) add gh | | o | 17:98e171e2f272@default(draft) add gg |/ @@ -1303,7 +1292,7 @@ | ~ $ hg up 98e171e2f272 - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit c5_ created new head $ hg prune '0ef9ff75f8e2 + f1b85956c48c' @@ -1351,74 +1340,18 @@ $ hg fold --exact "98e171e2f272::" 2 changesets folded -Check that evolve shows error while handling split commits --------------------------------------- +Check that dirstate changes are kept at failure for conflicts (issue4966) +---------------------------------------- $ cat >> $HGRCPATH <<EOF > [experimental] > evolution=all > EOF - $ glog -r "0cf3707e8971::" - o 28:92ca6f3984de@default(draft) add gg - | - | @ 27:2d1b55e10be9@default(draft) add unstableifparentisfolded - |/ - | o 18:0c049e4e5422@default(draft) add gh - |/ - o 16:0cf3707e8971@default(draft) a3 - | - ~ - -Create a split commit - $ printf "oo" > oo; - $ printf "pp" > pp; - $ hg add oo pp - $ hg commit -m "oo+pp" - $ mkcommit uu - $ hg up 2d1b55e10be9 - 0 files updated, 0 files merged, 3 files removed, 0 files unresolved - $ printf "oo" > oo; - $ hg add oo - $ hg commit -m "_oo" - created new head - $ printf "pp" > pp; - $ hg add pp - $ hg commit -m "_pp" - $ hg prune --succ "desc(_oo) + desc(_pp)" -r "desc('oo+pp')" --split - 1 changesets pruned - 1 new orphan changesets - $ glog -r "0cf3707e8971::" - @ 32:c7dbf668e9d5@default(draft) _pp - | - o 31:2b5a32114b3d@default(draft) _oo - | - | * 30:4d122571f3b6@default(draft) add uu - | | - | x 29:7da3e73df8a5@default(draft) oo+pp - |/ - | o 28:92ca6f3984de@default(draft) add gg - | | - o | 27:2d1b55e10be9@default(draft) add unstableifparentisfolded - |/ - | o 18:0c049e4e5422@default(draft) add gh - |/ - o 16:0cf3707e8971@default(draft) a3 - | - ~ - $ hg evolve --rev "0cf3707e8971::" - move:[30] add uu - atop:[32] _pp - working directory is now at be23044af550 - - -Check that dirstate changes are kept at failure for conflicts (issue4966) ----------------------------------------- - $ echo "will be amended" > newfile $ hg commit -m "will be amended" $ hg parents - 34 : will be amended - test + 29 : will be amended - test $ echo "will be evolved safely" >> a $ hg commit -m "will be evolved safely" @@ -1429,17 +1362,11 @@ $ hg commit -m "will cause conflict at evolve" $ glog -r "0cf3707e8971::" - @ 36:59c37c5bebd1@default(draft) will cause conflict at evolve - | - o 35:7cc12c6c7862@default(draft) will be evolved safely - | - o 34:98c7ab460e6b@default(draft) will be amended + @ 31:5be050657ca5@default(draft) will cause conflict at evolve | - o 33:be23044af550@default(draft) add uu + o 30:748126f98ff1@default(draft) will be evolved safely | - o 32:c7dbf668e9d5@default(draft) _pp - | - o 31:2b5a32114b3d@default(draft) _oo + o 29:4548f3a8db2c@default(draft) will be amended | | o 28:92ca6f3984de@default(draft) add gg | | @@ -1451,32 +1378,32 @@ | ~ - $ hg update -q 98c7ab460e6b + $ hg update -q -r "desc('will be amended')" $ echo "amended" > newfile $ hg amend -m "amended" 2 new orphan changesets - $ hg evolve --rev "98c7ab460e6b::" - move:[35] will be evolved safely - atop:[37] amended - move:[36] will cause conflict at evolve + $ hg evolve --rev "desc('will be amended')::" + move:[30] will be evolved safely + atop:[32] amended + move:[31] will cause conflict at evolve merging newfile warning: conflicts while merging newfile! (edit, then use 'hg resolve --mark') fix conflicts and see `hg help evolve.interrupted` [1] - $ glog -r "be23044af550::" --hidden - @ 38:61abd81de026@default(draft) will be evolved safely + $ glog -r "desc('add unstableifparentisfolded')::" --hidden + @ 33:b9acdb1af6d5@default(draft) will be evolved safely | - o 37:df89d30f23e2@default(draft) amended + o 32:6ec468e4cb98@default(draft) amended | - | @ 36:59c37c5bebd1@default(draft) will cause conflict at evolve + | @ 31:5be050657ca5@default(draft) will cause conflict at evolve | | - | x 35:7cc12c6c7862@default(draft) will be evolved safely + | x 30:748126f98ff1@default(draft) will be evolved safely | | - | x 34:98c7ab460e6b@default(draft) will be amended + | x 29:4548f3a8db2c@default(draft) will be amended |/ - o 33:be23044af550@default(draft) add uu + o 27:2d1b55e10be9@default(draft) add unstableifparentisfolded | ~ @@ -1514,6 +1441,7 @@ update:[1] added a 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at ab832e43dd5a + no troubled changesets $ hg log -GT "{rev}:{node|short} {desc} ({bookmarks})\n" --hidden @ 1:ab832e43dd5a added a (book) @@ -1521,109 +1449,3 @@ x 0:f7ad41964313 added a () $ cd .. - -Test which shows that orphanmerge evolution can result to crash because of -lastsolved not being updated in case of orphanmerge: -(It will be fixed in next patch) - -Prepare the repo: - $ hg init orphanmergerepo - $ cd orphanmergerepo - $ echo a > a - $ for fn in a b c; do echo foo > $fn; hg ci -Am "added "$fn; done; - adding a - adding b - adding c -Let's create a merge commit so that we can create orphan merge later: - $ hg up 1 -q - $ echo feature > f - $ hg ci -Am "added feature f" - adding f - created new head - $ hg merge - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (branch merge, don't forget to commit) - $ hg ci -m "merge feature branch" - $ glog - @ 4:2c0a98d38026@default(draft) merge feature branch - |\ - | o 3:4c33e511041e@default(draft) added feature f - | | - o | 2:8be98ac1a569@default(draft) added c - |/ - o 1:80e6d2c47cfe@default(draft) added b - | - o 0:f7ad41964313@default(draft) added a - - -Now make the parents of merge commit obsolete to get a orphan merge: - $ hg up 2 -q - $ echo "fixit" > c - $ hg ci --amend -m "updated c" - 1 new orphan changesets - $ hg up 3 -q - $ echo "fixit" > c - $ hg ci --amend -m "updated f" - $ glog - @ 6:086d9bedcd75@default(draft) updated f - | - | o 5:f84f2c548fbc@default(draft) updated c - |/ - | * 4:2c0a98d38026@default(draft) merge feature branch - | |\ - +---x 3:4c33e511041e@default(draft) added feature f - | | - | x 2:8be98ac1a569@default(draft) added c - |/ - o 1:80e6d2c47cfe@default(draft) added b - | - o 0:f7ad41964313@default(draft) added a - - -To check `lastsolved` contain right value after completion of orphan-merge -resolution there should be one more instability to be evolved; lets create one: - $ hg up 1 -q - $ echo d > d - $ hg ci -Am "added d" - adding c - adding d - created new head - $ echo e > e - $ hg ci -Am "added e" - adding e - $ hg up .^ - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo "updated d" >> d - $ hg ci --amend -m "updated d" - 1 new orphan changesets - $ glog - @ 9:7c4d1834c346@default(draft) updated d - | - | * 8:421f7614462a@default(draft) added e - | | - | x 7:afe5acea1990@default(draft) added d - |/ - | o 6:086d9bedcd75@default(draft) updated f - |/ - | o 5:f84f2c548fbc@default(draft) updated c - |/ - | * 4:2c0a98d38026@default(draft) merge feature branch - | |\ - +---x 3:4c33e511041e@default(draft) added feature f - | | - | x 2:8be98ac1a569@default(draft) added c - |/ - o 1:80e6d2c47cfe@default(draft) added b - | - o 0:f7ad41964313@default(draft) added a - -Now we have one orphan merge and one more orphan cset that we just created. -Lets evolve: - $ hg evolve --all --any - move:[4] merge feature branch - atop:[5] updated c - move:[10] merge feature branch - atop:[6] updated f - move:[8] added e - atop:[9] updated d - working directory is now at 7c67cee06242
--- a/tests/test-exchange-obsmarkers-case-D2.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-exchange-obsmarkers-case-D2.t Tue Jun 04 11:08:44 2019 +0200 @@ -57,7 +57,7 @@ obsoleted 1 changesets $ hg prune --date '0 0' . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at a9bdc8b26820 + working directory is now at a9bdc8b26820 1 changesets pruned $ hg strip --hidden -q 'desc(A1)' --config devel.strip-obsmarkers=no $ hg log -G --hidden
--- a/tests/test-exchange-obsmarkers-case-D3.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-exchange-obsmarkers-case-D3.t Tue Jun 04 11:08:44 2019 +0200 @@ -60,7 +60,7 @@ obsoleted 1 changesets $ hg prune -d '0 0' . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 35b183996678 + working directory is now at 35b183996678 1 changesets pruned $ hg strip --hidden -q 'desc(A1)' --config devel.strip-obsmarkers=no $ hg log -G --hidden
--- a/tests/test-extension-isolation.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-extension-isolation.t Tue Jun 04 11:08:44 2019 +0200 @@ -121,8 +121,6 @@ [1] $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-evo | egrep 'topics|evoext' _evoext_getbundle_obscommon - _evoext_obshash_0 - _evoext_obshash_1 _evoext_obshashrange_v1 $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-no-ext | egrep 'topics|evoext' [1] @@ -144,21 +142,15 @@ [1] $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-both | egrep 'topics|evoext' _evoext_getbundle_obscommon - _evoext_obshash_0 - _evoext_obshash_1 _evoext_obshashrange_v1 topics $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-evo | egrep 'topics|evoext' _evoext_getbundle_obscommon - _evoext_obshash_0 - _evoext_obshash_1 _evoext_obshashrange_v1 $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-topic | egrep 'topics|evoext' topics $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-evo | egrep 'topics|evoext' _evoext_getbundle_obscommon - _evoext_obshash_0 - _evoext_obshash_1 _evoext_obshashrange_v1 $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-no-ext | egrep 'topics|evoext' [1]
--- a/tests/test-issue-5720.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-issue-5720.t Tue Jun 04 11:08:44 2019 +0200 @@ -73,15 +73,15 @@ Continue the evolution $ hg evolve --continue evolving 2:13833940840c "c" - working directory is now at 3d2080c198e5 + working directory is now at 87495ea7c9ec Tip should stay in secret phase $ hg log -G -T "{rev}: {phase}" - @ 4: secret + o 4: secret | - o 3: draft + @ 3: draft | o 0: draft - $ hg log -r . -T '{phase}\n' + $ hg log -r tip -T '{phase}\n' secret
--- a/tests/test-issue-6028.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-issue-6028.t Tue Jun 04 11:08:44 2019 +0200 @@ -112,7 +112,7 @@ 2 files updated, 0 files merged, 1 files removed, 0 files unresolved start the evolve - $ hg evolve + $ hg evolve --update --no-all move:[8] merged aa atop:[4] merged b working directory is now at c920dd828523
--- a/tests/test-obsolete.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-obsolete.t Tue Jun 04 11:08:44 2019 +0200 @@ -66,9 +66,9 @@ 2 - 4538525df7e2 -Test that obsolete precursors are properly computed +Test that obsolete predecessors are properly computed - $ qlog -r 'precursors(.)' --hidden + $ qlog -r 'predecessors(.)' --hidden 2 - 4538525df7e2 $ qlog -r . @@ -110,7 +110,7 @@ - 4538525df7e2 3 - 0d3f46688ccc - $ qlog -r 'allprecursors(4)' --hidden + $ qlog -r 'allpredecessors(4)' --hidden 2 - 4538525df7e2 3
--- a/tests/test-prev-next.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-prev-next.t Tue Jun 04 11:08:44 2019 +0200 @@ -198,7 +198,7 @@ $ hg next --evolve --color debug [evolve.operation|move:][[evolve.rev|2]] added c atop:[[evolve.rev|3]] added b (2) - [ ui.status|working directory now at [evolve.node|e3b6d5df389b]] + [ ui.status|working directory is now at [evolve.node|e3b6d5df389b]] next with ambiguity @@ -245,7 +245,7 @@ enter the index of the revision you want to select: 1 move:[4] added c atop:[6] added b (3) - working directory now at 5ce67c2407b0 + working directory is now at 5ce67c2407b0 $ hg log -GT "{rev}:{node|short} {desc}\n" @ 7:5ce67c2407b0 added c @@ -259,7 +259,7 @@ o 0:a154386e50d1 added a - $ hg evolve -r 5 + $ hg evolve -r 5 --update move:[5] added d atop:[6] added b (3) working directory is now at 47ea25be8aea @@ -352,7 +352,7 @@ got lock after (\d+) seconds (re) move:[2] two atop:[3] one - working directory now at a7d885c75614 + working directory is now at a7d885c75614 $ wait testing next --evolve when working directory is dirty @@ -598,4 +598,4 @@ > EOF move:[4] B atop:[5] B modified - working directory now at 1b434459c7e7 + working directory is now at 1b434459c7e7
--- a/tests/test-prune.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-prune.t Tue Jun 04 11:08:44 2019 +0200 @@ -58,7 +58,7 @@ $ hg prune --user blah --date '1979-12-15' . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 47d2a3944de8 + working directory is now at 47d2a3944de8 1 changesets pruned $ hg bookmark * BABAR 3:47d2a3944de8 @@ -81,7 +81,7 @@ $ hg prune 2: --color debug [ ui.status|0 files updated, 0 files merged, 3 files removed, 0 files unresolved] - [ ui.status|working directory now at [evolve.node|1f0dee641bb7]] + [ ui.status|working directory is now at [evolve.node|1f0dee641bb7]] [ ui.status|2 changesets pruned] $ hg debugobsolete 9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'blah'} @@ -142,7 +142,7 @@ 4 files updated, 0 files merged, 4 files removed, 0 files unresolved $ hg prune 'desc("add ee")' -s 'desc("add nE")' 4 files updated, 0 files merged, 4 files removed, 0 files unresolved - working directory now at 6e8148413dd5 + working directory is now at 6e8148413dd5 1 changesets pruned $ hg debugobsolete 9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'blah'} @@ -239,7 +239,7 @@ $ hg prune 'desc("add n1")::desc("add n2")' -s 'desc("add nD")::desc("add nE")' --pair 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - working directory now at 1f0dee641bb7 + working directory is now at 1f0dee641bb7 2 changesets pruned $ hg debugobsolete 9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'blah'} @@ -262,7 +262,7 @@ $ mkcommit n2 $ hg --config extensions.strip= --config experimental.prunestrip=True strip -r . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at c7e58696a948 + working directory is now at c7e58696a948 1 changesets pruned $ hg --config extensions.strip= --config experimental.prunestrip=True strip -r . --bundle 0 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -308,7 +308,7 @@ $ hg prune -B todelete 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (leaving bookmark todelete) - working directory now at d62d843c9a01 + working directory is now at d62d843c9a01 bookmark 'todelete' deleted 1 changesets pruned $ hg id -ir dcbb326fdec2
--- a/tests/test-rewind.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-rewind.t Tue Jun 04 11:08:44 2019 +0200 @@ -661,7 +661,7 @@ $ echo AA >> A $ hg amend -m 'c_A1' 1 new orphan changesets - $ hg evolve --all + $ hg evolve --all --update move:[2] c_B0 atop:[3] c_A1 working directory is now at a65fceb2324a @@ -802,7 +802,7 @@ Automatically rewinding the full stack (with --to) -------------------------------------------------- - $ hg rewind --hidden --to 'precursors(.)' + $ hg rewind --hidden --to 'predecessors(.)' rewinded to 2 changesets (2 changesets obsoleted) working directory is now at 70892f498f29
--- a/tests/test-sharing.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-sharing.t Tue Jun 04 11:08:44 2019 +0200 @@ -516,7 +516,6 @@ merge:[5] fix bug 24 (v2 by bob) with: [6] fix bug 24 (v2 by alice) base: [4] fix bug 24 (v1) - merging "other" content-divergent changeset 'e3f99ce9d9cd' 0 files updated, 1 files merged, 0 files removed, 0 files unresolved working directory is now at b1499b0f03ca $ hg log -q -r 'contentdivergent()' @@ -534,7 +533,7 @@ o 3:a06ec1bf97bd public fix bug 15 (v2) | ~ - $ hg --hidden shortlog -r 'precursors(b1499b0f03ca)' + $ hg --hidden shortlog -r 'predecessors(b1499b0f03ca)' 5:a360947f6faf draft fix bug 24 (v2 by bob) 6:e3f99ce9d9cd draft fix bug 24 (v2 by alice) $ cat file1
--- a/tests/test-split.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-split.t Tue Jun 04 11:08:44 2019 +0200 @@ -151,7 +151,7 @@ $ echo "change to b" >> _b $ hg amend -m "_cprim" 2 new orphan changesets - $ hg evolve --all + $ hg evolve --all --update move:[5] split1 atop:[7] _cprim move:[6] split2 @@ -218,7 +218,7 @@ 2d8abdb827cdf71ca477ef6985d7ceb257c53c1b e2b4afde39803bd42bb1374b230fca1b1e8cc868 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} 033b3f5ae73db67c10de938fb6f26b949aaef172 bb5e4f6020c74e7961a51fda635ea9df9b04dda8 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} b434287e665ce757ee5463a965cb3d119ca9e893 ead2066d1dbf14833fe1069df1b735e4e9468c40 1188c4216eba37f18a1de6558564601d00ff2143 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'split', 'user': 'test'} - $ hg evolve --all + $ hg evolve --all --update move:[8] split1 atop:[11] split4 move:[9] split2 @@ -1134,16 +1134,15 @@ Pruning revision 4 (current one): $ hg prune . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 88437e073cd4 + working directory is now at 88437e073cd4 1 changesets pruned $ hg evolve -r 2 move:[2] c atop:[3] split1 - working directory is now at 21a63bd6ee88 $ hg glog - @ 5:21a63bd6ee88 c (draft) + o 5:21a63bd6ee88 c (draft) | - o 3:88437e073cd4 split1 (draft) + @ 3:88437e073cd4 split1 (draft) | o 0:a5a1faba8d26 p (draft)
--- a/tests/test-stabilize-conflict.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-stabilize-conflict.t Tue Jun 04 11:08:44 2019 +0200 @@ -77,7 +77,7 @@ dix $ hg amend 1 new orphan changesets - $ hg evolve + $ hg evolve --update move:[2] babar count up to fifteen atop:[3] babar count up to ten merging babar @@ -123,7 +123,7 @@ +ten $ hg amend 1 new orphan changesets - $ hg evolve + $ hg evolve --update move:[4] babar count up to fifteen atop:[5] babar count up to ten merging babar
--- a/tests/test-stabilize-order.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-stabilize-order.t Tue Jun 04 11:08:44 2019 +0200 @@ -62,7 +62,7 @@ Test stabilizing a predecessor child - $ hg evolve -v + $ hg evolve -v --rev 'last(orphan())' move:[4] addb atop:[5] adda hg rebase -r 22619daeed78 -d 005fe5914f78 @@ -72,11 +72,12 @@ b committing manifest committing changelog - working directory is now at 81b8bbcd5892 + resolving manifests + removing b $ glog - @ 6:81b8bbcd5892@default(draft) addb + o 6:81b8bbcd5892@default(draft) addb | - o 5:005fe5914f78@default(draft) adda + @ 5:005fe5914f78@default(draft) adda | | * 3:7a7552255fb5@default(draft) addc | | @@ -89,10 +90,8 @@ Test stabilizing a descendant predecessor's child - $ hg up -r 005fe5914f78 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg debugobsolete > successors.old - $ hg evolve -v + $ hg evolve -v --update move:[3] addc atop:[6] addb hg rebase -r 7a7552255fb5 -d 81b8bbcd5892 @@ -239,7 +238,7 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: addroot - $ hg evolve + $ hg evolve --no-all abort: multiple evolve candidates (select one of *, * with --rev) (glob) [255]
--- a/tests/test-stack-branch.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-stack-branch.t Tue Jun 04 11:08:44 2019 +0200 @@ -87,14 +87,14 @@ Test "t#" reference ------------------- - $ hg up b2 + $ hg up s2 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg up foo 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg up b42 - abort: cannot resolve "b42": branch "foo" has only 4 non-public changesets + $ hg up s42 + abort: cannot resolve "s42": branch "foo" has only 4 non-public changesets [255] - $ hg up b2 + $ hg up s2 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg summary parent: 3:f61adbacd17a @@ -132,7 +132,7 @@ s2@ c_d (current) s1: c_c s0^ c_b (base) - $ hg up b3 + $ hg up s3 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg stack ### target: foo (branch) @@ -141,7 +141,7 @@ s2: c_d s1: c_c s0^ c_b (base) - $ hg up b2 + $ hg up s2 1 files updated, 0 files merged, 1 files removed, 0 files unresolved Also test the revset: @@ -294,7 +294,7 @@ s2@ c_D (current) s1: c_c s0^ c_b (base) - $ hg phase --public b1 + $ hg phase --public s1 $ hg stack ### target: foo (branch) (2 heads) s5: c_h @@ -308,7 +308,7 @@ Check that stack doesn't show changeset with a topic ---------------------------------------------------- - $ hg topic --rev b4::b5 sometopic + $ hg topic --rev s4::s5 sometopic changed topic on 2 changesets to "sometopic" $ hg stack ### target: foo (branch)
--- a/tests/test-topic-flow-publish-bare.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-topic-flow-publish-bare.t Tue Jun 04 11:08:44 2019 +0200 @@ -294,3 +294,30 @@ |/ o 0:ea207398892e ROOT public default + +Checking the option to prevent publishing +========================================= + +Alone the option is a bit too restrictive to be useful. However combined with +other tooling or extensions is can become an important permission tool. + + $ hg log -r 'draft()' + changeset: 8:858be9a8daaf + topic: bar + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: c_dH0 + + changeset: 10:abb5c84eb9e9 + topic: bar + parent: 8:858be9a8daaf + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: c_dJ0 + + $ hg phase --public -r 8 --config experimental.topic.allow-publish=no + abort: rejecting publishing of changeset 858be9a8daaf + [255] + $ hg phase --public -r 10 --config experimental.topic.allow-publish=no + abort: rejecting publishing of changeset 858be9a8daaf and 1 others + [255]
--- a/tests/test-topic-stack-complex.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-topic-stack-complex.t Tue Jun 04 11:08:44 2019 +0200 @@ -142,12 +142,11 @@ move:[s3] split2 atop:[s2] split1 move:[s4] Added e and f - working directory is now at ec94a1ed1330 $ hg up s4 - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg id -r . ec94a1ed1330 tip - $ hg up --hidden 'min(precursors(.))' + $ hg up --hidden 'min(predecessors(.))' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved updated to hidden changeset f1d3649d6a8b (hidden revision 'f1d3649d6a8b' was rewritten as: ec94a1ed1330) @@ -173,7 +172,5 @@ merge:[s5] Added e and f with: [s4] Added e and f base: [3] Added e and f - updating to "local" side of the conflict: ec94a1ed1330 - merging "other" content-divergent changeset 'f2eff98490d2' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 8faad6276dc6
--- a/tests/test-topic-stack-data.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-topic-stack-data.t Tue Jun 04 11:08:44 2019 +0200 @@ -172,10 +172,10 @@ basic output $ hg topic - bar (5 changesets, 1 troubled, 2 heads) + bar (5 changesets, 1 unstable, 2 heads) baz (2 changesets) * foo (2 changesets) - fuz (3 changesets, 2 troubled) + fuz (3 changesets, 2 unstable) quiet version @@ -188,10 +188,10 @@ verbose $ hg topic --verbose - bar (on branch: default, 5 changesets, 1 troubled, 2 heads) + bar (on branch: default, 5 changesets, 1 unstable, 2 heads) baz (on branch: default, 2 changesets, 2 behind) * foo (on branch: lake, 2 changesets, ambiguous destination: branch 'lake' has 2 heads) - fuz (on branch: default, 3 changesets, 2 troubled, 1 behind) + fuz (on branch: default, 3 changesets, 2 unstable, 1 behind) json @@ -202,7 +202,7 @@ "changesetcount": 5, "headcount": 2, "topic": "bar", - "troubledcount": 1 + "unstablecount": 1 }, { "active": false, @@ -218,7 +218,7 @@ "active": false, "changesetcount": 3, "topic": "fuz", - "troubledcount": 2 + "unstablecount": 2 } ] @@ -232,7 +232,7 @@ "changesetcount": 5, "headcount": 2, "topic": "bar", - "troubledcount": 1 + "unstablecount": 1 }, { "active": false, @@ -254,7 +254,7 @@ "branches+": "default", "changesetcount": 3, "topic": "fuz", - "troubledcount": 2 + "unstablecount": 2 } ]
--- a/tests/test-topic-stack.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-topic-stack.t Tue Jun 04 11:08:44 2019 +0200 @@ -107,105 +107,117 @@ $ hg stack -Tjson | python -m json.tool [ { + "desc": "c_f", "isentry": true, - "topic.stack.desc": "c_f", - "topic.stack.index": 4, - "topic.stack.state": [ + "node": "6559e6d93aeadba940874f54f106c61931b5b8cf", + "stack_index": 4, + "state": [ "current" ], - "topic.stack.state.symbol": "@" + "symbol": "@" }, { + "desc": "c_e", "isentry": true, - "topic.stack.desc": "c_e", - "topic.stack.index": 3, - "topic.stack.state": [ + "node": "0f9ac936c87d1d991011862aff4e86d0c3300a89", + "stack_index": 3, + "state": [ "clean" ], - "topic.stack.state.symbol": ":" + "symbol": ":" }, { + "desc": "c_d", "isentry": true, - "topic.stack.desc": "c_d", - "topic.stack.index": 2, - "topic.stack.state": [ + "node": "e629654d70505107cca3d12782d9c5a50d8fb9c8", + "stack_index": 2, + "state": [ "clean" ], - "topic.stack.state.symbol": ":" + "symbol": ":" }, { + "desc": "c_c", "isentry": true, - "topic.stack.desc": "c_c", - "topic.stack.index": 1, - "topic.stack.state": [ + "node": "8522f9e3fee92d4ec4e688ac3fbd2ee0f8fd5036", + "stack_index": 1, + "state": [ "clean" ], - "topic.stack.state.symbol": ":" + "symbol": ":" }, { + "desc": "c_b", "isentry": false, - "topic.stack.desc": "c_b", - "topic.stack.index": 0, - "topic.stack.state": [ + "node": "ea705abc4f51e26d356ed94b3443e8c19b76cedf", + "stack_index": 0, + "state": [ "base" ], - "topic.stack.state.symbol": "^" + "symbol": "^" } ] $ hg stack -v -Tjson | python -m json.tool [ { + "desc": "c_f", "isentry": true, - "topic.stack.desc": "c_f", - "topic.stack.index": 4, - "topic.stack.shortnode": "6559e6d93aea", - "topic.stack.state": [ + "node": "6559e6d93aeadba940874f54f106c61931b5b8cf", + "stack_index": 4, + "state": [ "current" ], - "topic.stack.state.symbol": "@" + "symbol": "@" }, { + "desc": "c_e", "isentry": true, - "topic.stack.desc": "c_e", - "topic.stack.index": 3, - "topic.stack.shortnode": "0f9ac936c87d", - "topic.stack.state": [ + "node": "0f9ac936c87d1d991011862aff4e86d0c3300a89", + "stack_index": 3, + "state": [ "clean" ], - "topic.stack.state.symbol": ":" + "symbol": ":" }, { + "desc": "c_d", "isentry": true, - "topic.stack.desc": "c_d", - "topic.stack.index": 2, - "topic.stack.shortnode": "e629654d7050", - "topic.stack.state": [ + "node": "e629654d70505107cca3d12782d9c5a50d8fb9c8", + "stack_index": 2, + "state": [ "clean" ], - "topic.stack.state.symbol": ":" + "symbol": ":" }, { + "desc": "c_c", "isentry": true, - "topic.stack.desc": "c_c", - "topic.stack.index": 1, - "topic.stack.shortnode": "8522f9e3fee9", - "topic.stack.state": [ + "node": "8522f9e3fee92d4ec4e688ac3fbd2ee0f8fd5036", + "stack_index": 1, + "state": [ "clean" ], - "topic.stack.state.symbol": ":" + "symbol": ":" }, { + "desc": "c_b", "isentry": false, - "topic.stack.desc": "c_b", - "topic.stack.index": 0, - "topic.stack.shortnode": "ea705abc4f51", - "topic.stack.state": [ + "node": "ea705abc4f51e26d356ed94b3443e8c19b76cedf", + "stack_index": 0, + "state": [ "base" ], - "topic.stack.state.symbol": "^" + "symbol": "^" } ] + $ hg stack -T '{rev}: [{branch}] [{topic}] {desc}\n' + 5: [default] [foo] c_f + 4: [default] [foo] c_e + 3: [default] [foo] c_d + 2: [default] [foo] c_c + 1: [default] [] c_b + check that topics and stack are available even if ui.strict=true $ hg topics @@ -347,13 +359,13 @@ s1: c_c s0^ c_b (base) $ hg topic --list --color=debug - [topic.stack.summary.topic|### topic: [topic.active|foo]] - [topic.stack.summary.branches|### target: default (branch)] - [topic.stack.index topic.stack.index.orphan|s4][topic.stack.state topic.stack.state.orphan|$] [topic.stack.desc topic.stack.desc.orphan|c_f][topic.stack.state topic.stack.state.orphan| (orphan)] - [topic.stack.index topic.stack.index.current topic.stack.index.orphan|s3][topic.stack.state topic.stack.state.current topic.stack.state.orphan|@] [topic.stack.desc topic.stack.desc.current topic.stack.desc.orphan|c_e][topic.stack.state topic.stack.state.current topic.stack.state.orphan| (current orphan)] - [topic.stack.index topic.stack.index.clean|s2][topic.stack.state topic.stack.state.clean|:] [topic.stack.desc topic.stack.desc.clean|c_d] - [topic.stack.index topic.stack.index.clean|s1][topic.stack.state topic.stack.state.clean|:] [topic.stack.desc topic.stack.desc.clean|c_c] - [topic.stack.index topic.stack.index.base|s0][topic.stack.state topic.stack.state.base|^] [topic.stack.desc topic.stack.desc.base|c_b][topic.stack.state topic.stack.state.base| (base)] + [stack.summary.topic|### topic: [topic.active|foo]] + [stack.summary.branches|### target: default (branch)] + [stack.index stack.index.orphan|s4][stack.state stack.state.orphan|$] [stack.desc stack.desc.orphan|c_f][stack.state stack.state.orphan| (orphan)] + [stack.index stack.index.current stack.index.orphan|s3][stack.state stack.state.current stack.state.orphan|@] [stack.desc stack.desc.current stack.desc.orphan|c_e][stack.state stack.state.current stack.state.orphan| (current orphan)] + [stack.index stack.index.clean|s2][stack.state stack.state.clean|:] [stack.desc stack.desc.clean|c_d] + [stack.index stack.index.clean|s1][stack.state stack.state.clean|:] [stack.desc stack.desc.clean|c_c] + [stack.index stack.index.base|s0][stack.state stack.state.base|^] [stack.desc stack.desc.base|c_b][stack.state stack.state.base| (base)] $ hg up s2 1 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -616,6 +628,22 @@ s1: c_D s0^ c_c (base) + $ hg stack -v + ### topic: foobar + ### target: default (branch), 3 behind + s2(ea0f882ce093)@ c_e (current) + ^ c_h + s1(d2f548af67ab): c_D + s0(8522f9e3fee9)^ c_c (base) + + $ hg stack --debug + ### topic: foobar + ### target: default (branch), 3 behind + s2(ea0f882ce093a2ad63db49083c5cb98a24a9470e)@ c_e (current) + ^ c_h + s1(d2f548af67ab55b08452a3e00a539319490fcd5b): c_D + s0(8522f9e3fee92d4ec4e688ac3fbd2ee0f8fd5036)^ c_c (base) + $ hg stack foo ### topic: foo ### target: default (branch), ambiguous rebase destination - topic 'foo' has 3 heads
--- a/tests/test-topic-tutorial.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-topic-tutorial.t Tue Jun 04 11:08:44 2019 +0200 @@ -1370,7 +1370,7 @@ $ hg next --evolve move:[s2] Adding saw atop:[s1] Adding hammer to the shopping list - working directory now at d5c51ee5762a + working directory is now at d5c51ee5762a $ hg stack ### topic: tools @@ -1385,7 +1385,7 @@ $ hg next --evolve move:[s3] Adding drill atop:[s2] Adding saw - working directory now at bae3758e46bf + working directory is now at bae3758e46bf $ hg stack ### topic: tools
--- a/tests/test-topic.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-topic.t Tue Jun 04 11:08:44 2019 +0200 @@ -115,6 +115,11 @@ used, the pushed revisions are published if the push succeeds. It also applies to common revisions selected by the push. + One can prevent any publishing to happens in a repository using: + + [experimental] + topic.allow-publish = no + list of commands: stack list all changesets in a topic and other information
--- a/tests/test-touch.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-touch.t Tue Jun 04 11:08:44 2019 +0200 @@ -54,7 +54,7 @@ $ hg prune 3 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 000000000000 + working directory is now at 000000000000 1 changesets pruned Duplicate
--- a/tests/test-tutorial.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-tutorial.t Tue Jun 04 11:08:44 2019 +0200 @@ -547,7 +547,7 @@ $ hg prune . # "." is for working directory parent 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory now at 41aff6a42b75 + working directory is now at 41aff6a42b75 1 changesets pruned The silly changeset is gone. @@ -1379,14 +1379,13 @@ move:[13] animals atop:[12] bathroom stuff merging shopping - working directory is now at 2a2b36e14660 The old version of bathroom is hidden again. $ hg log -G - @ 2a2b36e14660 (draft): animals + o 2a2b36e14660 (draft): animals | - o 682004e81e71 (draft): bathroom stuff + @ 682004e81e71 (draft): bathroom stuff | o 57e9caedbcb8 (public): SPAM SPAM | @@ -1399,6 +1398,11 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list +And let's update to the newly evolved changeset. + + $ hg update + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + #if docgraph-ext $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore .. graphviz:: @@ -1524,6 +1528,7 @@ update:[8] animals 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 2a2b36e14660 + no troubled changesets Relocating unstable change after prune ---------------------------------------------- @@ -1673,7 +1678,7 @@ $ hg prune 2a2b36e14660 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory now at 682004e81e71 + working directory is now at 682004e81e71 1 changesets pruned 1 new orphan changesets @@ -1830,7 +1835,10 @@ } #endif - $ hg evolve +The --update flag of `hg evolve` automatically updates to the tipmost evolved +changeset. + + $ hg evolve --update move:[15] SPAM SPAM SPAM atop:[12] bathroom stuff merging shopping
--- a/tests/test-uncommit-interactive.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-uncommit-interactive.t Tue Jun 04 11:08:44 2019 +0200 @@ -449,7 +449,7 @@ $ hg prune . 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory now at 42cc15efbec2 + working directory is now at 42cc15efbec2 1 changesets pruned $ hg revert --all undeleting a
--- a/tests/test-uncommit.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-uncommit.t Tue Jun 04 11:08:44 2019 +0200 @@ -361,9 +361,9 @@ b: no such file in rev 5b27f6b17da2 [1] -Test uncommiting precursors +Test uncommiting predecessors - $ hg uncommit --hidden --rev 'precursors(.)' b --traceback + $ hg uncommit --hidden --rev 'predecessors(.)' b --traceback $ hg cat b --rev . b b
--- a/tests/test-unstability-resolution-result.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-unstability-resolution-result.t Tue Jun 04 11:08:44 2019 +0200 @@ -85,7 +85,7 @@ $ echo 'a' > a $ hg amend 1 new orphan changesets - $ hg evolve + $ hg evolve --update move:[4] newer a atop:[5] changea merging a
--- a/tests/test-unstable-orphan.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-unstable-orphan.t Tue Jun 04 11:08:44 2019 +0200 @@ -65,11 +65,10 @@ $ hg evo --all --any --orphan move:[2] add _c atop:[3] bprime - working directory is now at fdcf3523a74d $ hg log -G - @ 4:fdcf3523a74d@default(draft) add _c + o 4:fdcf3523a74d@default(draft) add _c | - o 3:36050226a9b9@default(draft) bprime + @ 3:36050226a9b9@default(draft) bprime | o 0:135f39f4bd78@default(draft) add _a @@ -117,11 +116,10 @@ $ hg evo --all --any --orphan move:[2] add _c atop:[6] add bsecondsplit2 - working directory is now at 98e3f21461ff $ hg log -G - @ 7:98e3f21461ff@default(draft) add _c + o 7:98e3f21461ff@default(draft) add _c | - o 6:59b942dbda14@default(draft) add bsecondsplit2 + @ 6:59b942dbda14@default(draft) add bsecondsplit2 | o 5:8ffdae67d696@default(draft) add bsecondsplit1 |
--- a/tests/test-userguide.t Sat Jun 01 02:30:14 2019 +0200 +++ b/tests/test-userguide.t Tue Jun 04 11:08:44 2019 +0200 @@ -63,7 +63,7 @@ $ hg commit -m 'debug hack' $ hg prune . 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory now at 934359450037 + working directory is now at 934359450037 1 changesets pruned $ hg parents --template '{rev}:{node|short} {desc|firstline}\n' 2:934359450037 implement feature Y @@ -122,7 +122,7 @@ ~ $ hg --hidden log -q -r 'successors(05e61aab8294) | successors(be6d5bc8e4cc) | successors(35f432d9f7c1)' 9:171c6a79a27b - $ hg --hidden log -q -r 'precursors(171c6a79a27b)' + $ hg --hidden log -q -r 'predecessors(171c6a79a27b)' 6:05e61aab8294 7:be6d5bc8e4cc 8:35f432d9f7c1 @@ -179,7 +179,7 @@ o 9:171c6a79a27b draft fix bug 64 | ~ - $ hg evolve -q --all + $ hg evolve -q --all --update $ hg shortlog -G -r 171c6a79a27b:: @ 15:91b4b0f8b5c5 draft feature 23 | @@ -219,7 +219,7 @@ x 17:b23d06b457a8 draft debug hack | ~ - $ hg evolve -q --all --any + $ hg evolve -q --all --any --update $ hg --hidden shortlog -G -r 1f33e68b18b9:: @ 19:4393e5877437 draft more work | @@ -253,7 +253,7 @@ $ hg status M file2.c $ hg revert file2.c - $ hg evolve --all --any + $ hg evolve --all --any --update move:[21] fix bug 67 atop:[22] fix bug 53 working directory is now at 0d972d6888e6 @@ -305,7 +305,7 @@ o 23:0d972d6888e6 draft fix bug 67 | ~ - $ hg evolve --all --any + $ hg evolve --all --any --update move:[25] new feature atop:[26] fix a bug working directory is now at 166c1c368ab6