# HG changeset patch # User Pierre-Yves David # Date 1342547348 -7200 # Node ID de3d112db51b4341a421b2091645b798d9fea04e # Parent 5bc3e5dc26370540aa9f0131ffb4dc2cdedf5a71# Parent 381ce7036d6dd6f67335469ca3f6f8ef08806c30 merge with 0.5 diff -r 5bc3e5dc2637 -r de3d112db51b .hgtags --- a/.hgtags Sun Jul 15 14:51:52 2012 +0200 +++ b/.hgtags Tue Jul 17 19:49:08 2012 +0200 @@ -3,3 +3,4 @@ c046b083a5e0b21af69027f31cee141800cf894b 0.3.0 9bbcd274689829d9239978236e16610688978233 0.4.0 4ecbaec1d664b1e6f8ebc78292e1ced77a8e69c0 0.4.1 +7ef8ab8c6feadb8a9d9e13af144a17cb23e9a38d 0.5 diff -r 5bc3e5dc2637 -r de3d112db51b docs/obs-terms.rst --- a/docs/obs-terms.rst Sun Jul 15 14:51:52 2012 +0200 +++ b/docs/obs-terms.rst Tue Jul 17 19:49:08 2012 +0200 @@ -2,83 +2,83 @@ Terminology of the obsolete concept ----------------------------------------------------------- -Obsolete marker them self +Obsolete markers --------------------------------- -The mutable concept is based on the creation of **obsolete marker**. An obsolete -marker register a relation between the old obsoleted changeset and its newer +The mutable concept is based on **obsolete markers**. Creating an obsolete +marker registers a relation between an old obsoleted changeset and its newer version. -The old changesets is called **precursors**. Its newer version are called -*successors*. A marker always register a single *precursors* but can refer -to: +Old changesets are called **precursors** while their new versions are called +**successors**. A marker always registers a single *precursor* and: + +- no *successor*: the *precursor* is just discarded. +- one *successor*: the *precursor* has been rewritten +- multiple *successors*: the *precursor* were splits in multiple + changesets. -- No *successors* at all if the *precursors* if just discarded. -- One *successor* at all if the *precursors* have been rewritten -- Multiple *successors* if the *precursors* have been splitted in myltiple - changeset. +.. The *precursors* and *successors* terms can be used on changeset directy: -The **precursors** and **successors** terms can be used on changeset directy: +.. :precursors: of a changeset `A` are changesets used as *precursors* by +.. obsolete marker using changeset `A` as *successors* -:precursors: of a changeset `A` are changesets used as *precursors* 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* +.. :successors: of a changeset `B` are changesets used as *successors* by +.. obsolete marker using changeset `B` as *precursors* -*Precursors* and *successors* directly related within the same marker are called -**direct precursors** and **direct successors** in ambiguous situation. +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 +**direct successors** to name changesets that are directly related. -The set of all *obsolete markers* create a direct acyclic graph the same way -standard *parent* and *children* relation do. In this graph we have: +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: of a `A` are transitive precursors of `A`. (*direct - precursors* of `A` and *precursors* of *precursors*) +:any precursors: are transitive precursors of a changeset: *direct precursors* + and *precursors* of *precursors*. -:any successors: of a `A` are transitive successors of `A`. (*direct - successors* of `A` and *precursors* of *precursors*) +:any successors: are transitive successors of a changeset: *direct successors* + and *successors* of *successors*) -Obsolete markers may revert to changesets that are not known locally. *Direct -precursors* of a changeset may be unknown locally. This is why we usually focus -on the **first known precursors** of changeset +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 +changeset. The same apply for *successors*. -(The same apply for successors) - -Item in *Any successors* which are not *obsolete* are called **newest -successors** +Changeset in *any successors* which are not **obsolete** are called +**newest successors**.. .. note:: I'm not very happy with this naming scheme and I'm looking for a - better distinction between direct-successors, any-successors. + better distinction between *direct successors* and **any successors*. Possible changesets "type" --------------------------------- -The following table describe name and behavior of changesets affected by -obsolete marker. Left column describe generic category and right column are -about sub-category. +The following table describes names and behaviors of changesets affected by +obsolete markers. The left column describes generic categories and the right +columns are about sub-categories. +---------------------+--------------------------+-----------------------------+ | **mutable** | **obsolete** | **extinct** | | | | | -| Changeset in either | Obsolete changesets are | Extinct changesets are | -| *draft* or *secret* | mutable changeset used | obsolete one with obsolete | -| phases. | as a precursors. | only descendants. | +| Changeset in either | Obsolete changeset is | *extinct* changeset is | +| *draft* or *secret* | *mutable* used as a | *obsolete* which has only | +| phase. | *precursor*. | *obsolete* descendants. | | | | | -| | A changeset is used as | They can be safely: | -| | a precursors when at | | +| | A changeset is used as | They can safely be: | +| | a *precursor* when at | | | | least one obsolete | - hidden in the UI, | -| | refer to it in the | - silently excluded from pp | -| | precursors field. | pull and push,t operation | -| | | - ignored by most operation | -| | | - garbage collected. | +| | marker refers to it | - silently excluded from | +| | as precursors. | pull and push operations | +| | | - mostly ignored | +| | | - garbage collected | | | | | | | +-----------------------------+ | | | | | | | **suspended** | | | | | -| | | Suspended changesets are | -| | | obsolete one with at least | +| | | *suspended* changeset is | +| | | *obsolete* with at least | | | | one non-obsolete descendant | | | | | | | | Thoses descendants prevent | @@ -91,54 +91,53 @@ | | | | | | **troublesome** | **unstable** | | | | | -| | Troublesome commit have | Unstable changesets are | -| | unresolved issue caused | changesets with obsolete | -| | by obsolete relations. | ancestors. | +| | *troublesome* has | *unstable* is a changeset | +| | unresolved issue caused | with obsolete ancestors. | +| | by *obsolete* relations. | | | | | | -| | Possible issues are | They must be rebased on a | -| | listed in the next | better base to solve the | -| | column. It is possible | situation. | -| | for troublesome | | +| | Possible issues are | It must be rebased on a | +| | listed in the next | non *troublesome* base to | +| | column. It is possible | solve the problem. | +| | for *troublesome* | | | | changeset to combine | (possible alternative name: | | | multiple issue at once. | precarious) | -| | (eg: conflicting and | | +| | (a.k.a. conflicting and | | | | unstable) +-----------------------------+ | | | | | | (possible alternative | **latecomer** | -| | name: unsettled, | | -| | troubled) | Latecomer changesets are | -| | | changesets that try to | -| | | be successors of public | -| | | changesets. | +| | names: unsettled, | | +| | troubled) | *latecomer* is a changeset | +| | | that tries to be successor | +| | | of public changesets. | | | | | | | | Public changeset can't | -| | | be obsolete. Latecomer | -| | | changeset need to be | -| | | rewritten as an overlay | -| | | to this public changeset. | +| | | be deleted and replace | +| | | *latecomer* | +| | | need to be converted into | +| | | an overlay to this public | +| | | changeset. | | | | | -| | | (possible alternative names | +| | | (possible alternative names:| | | | mislead, naive, unaware, | | | | mindless, disenchanting) | | | | | | | +-----------------------------+ | | | **conflicting** | | | | | -| | | Conflicting changesets | -| | | happen when multiple | +| | | *conflicting* is changeset | +| | | that appears when multiple | | | | changesets are successors | -| | | of the same obsolete | -| | | changeset. | +| | | of the same precursor. | | | | | -| | | Conflicting changesets are | -| | | resolve through a three | -| | | ways merging between the | -| | | two conflicting changesets, | +| | | *conflicting* are solved | +| | | through a three ways merge | +| | | between the two | +| | | *conflictings*, | | | | using the last "obsolete- | | | | -common-ancestor" as the | | | | base. | | | | | -| | | (Changeset splitting is | +| | | (*splitting* is | | | | properly not detected as a | | | | conflict) | | | | | @@ -163,14 +162,13 @@ | Rewriting operation refuse to work on immutable changeset. | | | | Obsolete markers that refer an immutable changeset as precursors have | -| no effect on the precussors changeset (but may have effect on the | -| successors) | +| no effect on the precussors but may have effect on the successors. | | | -| When a mutable changeset becomes immutable its is just *immutable* and loose | -| any property of it's former state. | +| 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 | +| state. | | | -| By phase property, once a changeset becomes a public immutable changeset, | -| you can expect it to remain as such forever. | +| The phase properties says that public changesets stay as *immutable* forever.| | | +------------------------------------------------------------------------------+ @@ -190,64 +188,52 @@ Existing terms `````````````` -Mercurial already use the following terms: +Mercurial core already uses the following terms: -:amend: rewrite a changeset -:graft: copy a changeset -:rebase: move a changeset +:amend: to rewrite a changeset +:graft: to copy a changeset +:rebase: to move a changeset Uncommit ````````````` -remove files from a commit (and leave them as dirty in the working directory) +Remove files from a commit (and leave them as dirty in the working directory) -The evolve extension have an `uncommit` command that aims to replace most +The *evolve* extension have an `uncommit` command that aims to replace most `rollback` usage. Fold `````````` -Collapse multiple changeset into one +Collapse multiple changesets into a unique one. -The evolve extensions *will* have a `fold` commands +The *evolve* extension will have a `fold` command. Prune `````````` Make a changeset obsolete without successors. -This an important operation as it should replace strip in 95% of the case. +This an important operation as it should mostly replace *strip*. -alternative name: +Alternative names: -- kill: nice name for effect when you forget the "hg" in front on "hg kill". -- obsolete: too vague, long and generic. +- kill: shall has funny effects when you forget "hg" in front of ``hg kill``. +- obsolete: too vague, too long and too generic. Stabilize ``````````````` -Automatically resolve troublesome changesets -(unstable, latecomer and conflicting) +Automatically resolve *troublesome* changesets +(*unstable*, *latecomer* and *conflicting*) -This is an important name as hg pull/pussh will suggest it the same way it +This is an important name as hg pull/push will suggest it the same way it suggest merging when you add heads. I do not like stabilize much. -alternative name: +alternative names: - solve (too generic ?) - evolve (too vague) - - - - - -.. note:: I'm not very happy with the naming of: - - - "ok" changeset - - latecomer - - troublesome - - Any better idea are welcome.