docs/obs-terms.rst
changeset 372 de3d112db51b
parent 370 7ef8ab8c6fea
child 492 7ecd41520dae
equal deleted inserted replaced
367:5bc3e5dc2637 372:de3d112db51b
     1 -----------------------------------------------------------
     1 -----------------------------------------------------------
     2 Terminology of the obsolete concept
     2 Terminology of the obsolete concept
     3 -----------------------------------------------------------
     3 -----------------------------------------------------------
     4 
     4 
     5 Obsolete marker them self
     5 Obsolete markers
     6 ---------------------------------
     6 ---------------------------------
     7 
     7 
     8 The mutable concept is based on the creation of **obsolete marker**. An obsolete
     8 The mutable concept is based on **obsolete markers**. Creating an obsolete
     9 marker register a relation between the old obsoleted changeset and its newer
     9 marker registers a relation between an old obsoleted changeset and its newer
    10 version.
    10 version.
    11 
    11 
    12 The old changesets is called **precursors**. Its newer version are called
    12 Old changesets are called **precursors** while their new versions are called
    13 *successors*. A marker always register a single *precursors* but can refer
    13 **successors**. A marker always registers a single *precursor* and:
    14 to:
    14 
    15 
    15 - no *successor*: the *precursor* is just discarded.
    16 - No *successors* at all if the *precursors* if just discarded.
    16 - one *successor*: the *precursor* has been rewritten
    17 - One *successor* at all if the *precursors* have been rewritten
    17 - multiple *successors*: the *precursor* were splits in multiple
    18 - Multiple *successors* if the *precursors* have been splitted in myltiple
    18   changesets.
    19   changeset.
    19 
    20 
    20 .. The *precursors* and *successors* terms can be used on changeset directy:
    21 The **precursors** and **successors** terms can be used on changeset directy:
    21 
    22 
    22 .. :precursors: of a changeset `A` are changesets used as *precursors* by
    23 :precursors: of a changeset `A` are changesets used as *precursors* by
    23 ..              obsolete marker using changeset `A` as *successors*
    24              obsolete marker using changeset `A` as *successors*
    24 
    25 
    25 .. :successors: of a changeset `B` are changesets used as *successors* by
    26 :successors: of a changeset `B` are changesets used as *successors* by
    26 ..              obsolete marker using changeset `B` as *precursors*
    27              obsolete marker using changeset `B` as *precursors*
    27 
    28 
    28 Chaining obsolete markers is allowed to rewrite a changeset that is already a
    29 *Precursors* and *successors* directly related within the same marker are called
    29 *successor*. This is a kind of *second order version control*.
    30 **direct precursors** and **direct successors** in ambiguous situation.
    30 To clarify ambiguous situations one can use **direct precursors** or
    31 
    31 **direct successors** to name changesets that are directly related.
    32 The set of all *obsolete markers* create a direct acyclic graph the same way
    32 
    33 standard *parent* and *children* relation do. In this graph we have:
    33 The set of all *obsolete markers* forms a direct acyclic graph the same way
    34 
    34 standard *parents*/*children* relation does. In this graph we have:
    35 :any precursors: of a `A` are transitive precursors of `A`. (*direct
    35 
    36                  precursors* of `A` and *precursors*  of *precursors*)
    36 :any precursors: are transitive precursors of a changeset: *direct precursors*
    37 
    37                  and *precursors* of *precursors*.
    38 :any successors: of a `A` are transitive successors of `A`. (*direct
    38 
    39                  successors* of `A` and *precursors*  of *precursors*)
    39 :any successors: are transitive successors of a changeset: *direct successors*
    40 
    40                  and *successors*  of *successors*)
    41 Obsolete markers may revert to changesets that are not known locally. *Direct
    41 
    42 precursors* of a changeset may be unknown locally. This is why we usually focus
    42 Obsolete markers may refer changesets that are not known locally.
    43 on the **first known precursors**  of changeset
    43 So, *direct precursors* of a changeset may be unknown locally.
    44 
    44 This is why we usually focus on the **first known precursors**  of the rewritten
    45 (The same apply for successors)
    45 changeset. The same apply for *successors*.
    46 
    46 
    47 Item in *Any successors* which are not *obsolete* are called **newest
    47 Changeset in *any successors* which are not **obsolete** are called
    48 successors** 
    48 **newest successors**..
    49 
    49 
    50 .. note:: I'm not very happy with this naming scheme and I'm looking for a
    50 .. note:: I'm not very happy with this naming scheme and I'm looking for a
    51           better distinction between direct-successors, any-successors.
    51           better distinction between *direct successors* and **any successors*.
    52 
    52 
    53 Possible changesets "type"
    53 Possible changesets "type"
    54 ---------------------------------
    54 ---------------------------------
    55 
    55 
    56 The following table describe name and behavior of changesets affected by
    56 The following table describes names and behaviors of changesets affected by
    57 obsolete marker. Left column describe generic category and right column are
    57 obsolete markers. The left column describes generic categories and the right
    58 about sub-category.
    58 columns are about sub-categories.
    59 
    59 
    60 
    60 
    61 +---------------------+--------------------------+-----------------------------+
    61 +---------------------+--------------------------+-----------------------------+
    62 | **mutable**         | **obsolete**             | **extinct**                 |
    62 | **mutable**         | **obsolete**             | **extinct**                 |
    63 |                     |                          |                             |
    63 |                     |                          |                             |
    64 | Changeset in either | Obsolete changesets are  | Extinct changesets are      |
    64 | Changeset in either | Obsolete changeset is    | *extinct* changeset is      |
    65 | *draft* or *secret* | mutable changeset used   | obsolete one with obsolete  |
    65 | *draft* or *secret* | *mutable* used as a      | *obsolete* which has only   |
    66 | phases.             | as a precursors.         | only descendants.           |
    66 | phase.              | *precursor*.             | *obsolete* descendants.     |
    67 |                     |                          |                             |
    67 |                     |                          |                             |
    68 |                     | A changeset is used as   | They can be safely:         |
    68 |                     | A changeset is used as   | They can safely be:         |
    69 |                     | a precursors when at     |                             |
    69 |                     | a *precursor* when at    |                             |
    70 |                     | least one obsolete       | - hidden in the UI,         |
    70 |                     | least one obsolete       | - hidden in the UI,         |
    71 |                     | refer to it in the       | - silently excluded from pp |
    71 |                     | marker refers to it      | - silently excluded from    |
    72 |                     | precursors field.        |   pull and push,t operation |
    72 |                     | as precursors.           |   pull and push operations  |
    73 |                     |                          | - ignored by most operation |
    73 |                     |                          | - mostly ignored            |
    74 |                     |                          | - garbage collected.        |
    74 |                     |                          | - garbage collected         |
    75 |                     |                          |                             |
    75 |                     |                          |                             |
    76 |                     |                          +-----------------------------+
    76 |                     |                          +-----------------------------+
    77 |                     |                          |                             |
    77 |                     |                          |                             |
    78 |                     |                          | **suspended**               |
    78 |                     |                          | **suspended**               |
    79 |                     |                          |                             |
    79 |                     |                          |                             |
    80 |                     |                          | Suspended changesets are    |
    80 |                     |                          | *suspended* changeset is    |
    81 |                     |                          | obsolete one with at least  |
    81 |                     |                          | *obsolete* with at least    |
    82 |                     |                          | one non-obsolete descendant |
    82 |                     |                          | one non-obsolete descendant |
    83 |                     |                          |                             |
    83 |                     |                          |                             |
    84 |                     |                          | Thoses descendants prevent  |
    84 |                     |                          | Thoses descendants prevent  |
    85 |                     |                          | properties of extincts      |
    85 |                     |                          | properties of extincts      |
    86 |                     |                          | changesets to apply. But    |
    86 |                     |                          | changesets to apply. But    |
    89 |                     |                          |                             |
    89 |                     |                          |                             |
    90 |                     +--------------------------+-----------------------------+
    90 |                     +--------------------------+-----------------------------+
    91 |                     |                          |                             |
    91 |                     |                          |                             |
    92 |                     | **troublesome**          | **unstable**                |
    92 |                     | **troublesome**          | **unstable**                |
    93 |                     |                          |                             |
    93 |                     |                          |                             |
    94 |                     | Troublesome commit have  | Unstable changesets are     |
    94 |                     | *troublesome* has        | *unstable* is a changeset   |
    95 |                     | unresolved issue caused  | changesets with obsolete    |
    95 |                     | unresolved issue caused  | with obsolete ancestors.    |
    96 |                     | by obsolete relations.   | ancestors.                  |
    96 |                     | by *obsolete* relations. |                             |
    97 |                     |                          |                             |
    97 |                     |                          |                             |
    98 |                     | Possible issues are      | They must be rebased on a   |
    98 |                     | Possible issues are      | It must be rebased on a     |
    99 |                     | listed in the next       | better base to solve the    |
    99 |                     | listed in the next       | non *troublesome* base to   |
   100 |                     | column. It is possible   | situation.                  |
   100 |                     | column. It is possible   | solve the problem.          |
   101 |                     | for troublesome          |                             |
   101 |                     | for *troublesome*        |                             |
   102 |                     | changeset to combine     | (possible alternative name: |
   102 |                     | changeset to combine     | (possible alternative name: |
   103 |                     | multiple issue at once.  | precarious)                 |
   103 |                     | multiple issue at once.  | precarious)                 |
   104 |                     | (eg: conflicting and     |                             |
   104 |                     | (a.k.a. conflicting and  |                             |
   105 |                     | unstable)                +-----------------------------+
   105 |                     | unstable)                +-----------------------------+
   106 |                     |                          |                             |
   106 |                     |                          |                             |
   107 |                     | (possible alternative    | **latecomer**               |
   107 |                     | (possible alternative    | **latecomer**               |
   108 |                     | name: unsettled,         |                             |
   108 |                     | names: unsettled,        |                             |
   109 |                     | troubled)                | Latecomer changesets are    |
   109 |                     | troubled)                | *latecomer* is a changeset  |
   110 |                     |                          | changesets that try to      |
   110 |                     |                          | that tries to be successor  |
   111 |                     |                          | be successors of public     |
   111 |                     |                          | of  public changesets.      |
   112 |                     |                          | changesets.                 |
       
   113 |                     |                          |                             |
   112 |                     |                          |                             |
   114 |                     |                          | Public changeset can't      |
   113 |                     |                          | Public changeset can't      |
   115 |                     |                          | be obsolete. Latecomer      |
   114 |                     |                          | be deleted and replace      |
   116 |                     |                          | changeset need to be        |
   115 |                     |                          | *latecomer*                 |
   117 |                     |                          | rewritten as an overlay     |
   116 |                     |                          | need to be converted into   |
   118 |                     |                          | to this public changeset.   |
   117 |                     |                          | an overlay to this public   |
   119 |                     |                          |                             |
   118 |                     |                          | changeset.                  |
   120 |                     |                          | (possible alternative names |
   119 |                     |                          |                             |
       
   120 |                     |                          | (possible alternative names:|
   121 |                     |                          | mislead, naive, unaware,    |
   121 |                     |                          | mislead, naive, unaware,    |
   122 |                     |                          | mindless, disenchanting)    |
   122 |                     |                          | mindless, disenchanting)    |
   123 |                     |                          |                             |
   123 |                     |                          |                             |
   124 |                     |                          +-----------------------------+
   124 |                     |                          +-----------------------------+
   125 |                     |                          | **conflicting**             |
   125 |                     |                          | **conflicting**             |
   126 |                     |                          |                             |
   126 |                     |                          |                             |
   127 |                     |                          | Conflicting changesets      |
   127 |                     |                          | *conflicting* is changeset  |
   128 |                     |                          | happen when multiple        |
   128 |                     |                          | that appears when multiple  |
   129 |                     |                          | changesets are successors   |
   129 |                     |                          | changesets are successors   |
   130 |                     |                          | of the same obsolete        |
   130 |                     |                          | of the same precursor.      |
   131 |                     |                          | changeset.                  |
   131 |                     |                          |                             |
   132 |                     |                          |                             |
   132 |                     |                          | *conflicting* are solved    |
   133 |                     |                          | Conflicting changesets are  |
   133 |                     |                          | through a three ways merge  |
   134 |                     |                          | resolve through a three     |
   134 |                     |                          | between the two             |
   135 |                     |                          | ways merging between the    |
   135 |                     |                          | *conflictings*,             |
   136 |                     |                          | two conflicting changesets, |
       
   137 |                     |                          | using the last "obsolete-   |
   136 |                     |                          | using the last "obsolete-   |
   138 |                     |                          | -common-ancestor" as the    |
   137 |                     |                          | -common-ancestor" as the    |
   139 |                     |                          | base.                       |
   138 |                     |                          | base.                       |
   140 |                     |                          |                             |
   139 |                     |                          |                             |
   141 |                     |                          | (Changeset splitting is     |
   140 |                     |                          | (*splitting* is             |
   142 |                     |                          | properly not detected as a  |
   141 |                     |                          | properly not detected as a  |
   143 |                     |                          | conflict)                   |
   142 |                     |                          | conflict)                   |
   144 |                     |                          |                             |
   143 |                     |                          |                             |
   145 |                     +--------------------------+-----------------------------+
   144 |                     +--------------------------+-----------------------------+
   146 |                     |                                                        |
   145 |                     |                                                        |
   161 | Changesets in the *public* phases.                                           |
   160 | Changesets in the *public* phases.                                           |
   162 |                                                                              |
   161 |                                                                              |
   163 | Rewriting operation refuse to work on immutable changeset.                   |
   162 | Rewriting operation refuse to work on immutable changeset.                   |
   164 |                                                                              |
   163 |                                                                              |
   165 | Obsolete markers that refer an immutable changeset as precursors have        |
   164 | Obsolete markers that refer an immutable changeset as precursors have        |
   166 | no effect on the precussors changeset (but may have effect on the            |
   165 | no effect on the precussors but may have effect on the successors.           |
   167 | successors)                                                                  |
   166 |                                                                              |
   168 |                                                                              |
   167 | When a *mutable* changeset becomes *immutable* (changing its phase from draft|
   169 | When a mutable changeset becomes immutable its is just *immutable* and loose |
   168 | to public) it is just *immutable* and loose any property of it's former      |
   170 | any property of it's former state.                                           |
   169 | state.                                                                       |
   171 |                                                                              |
   170 |                                                                              |
   172 | By phase property, once a changeset becomes a public immutable changeset,    |
   171 | The phase properties says that public changesets stay as *immutable* forever.|
   173 | you can expect it to remain as such forever.                                 |
       
   174 |                                                                              |
   172 |                                                                              |
   175 +------------------------------------------------------------------------------+
   173 +------------------------------------------------------------------------------+
   176 
   174 
   177 .. note:: I'm not very happy with the naming of:
   175 .. note:: I'm not very happy with the naming of:
   178 
   176 
   188 
   186 
   189 
   187 
   190 Existing terms
   188 Existing terms
   191 ``````````````
   189 ``````````````
   192 
   190 
   193 Mercurial already use the following terms:
   191 Mercurial core already uses the following terms:
   194 
   192 
   195 :amend: rewrite a changeset
   193 :amend: to rewrite a changeset
   196 :graft: copy a changeset
   194 :graft: to copy a changeset
   197 :rebase: move a changeset
   195 :rebase: to move a changeset
   198 
   196 
   199 
   197 
   200 Uncommit
   198 Uncommit
   201 `````````````
   199 `````````````
   202 
   200 
   203 remove files from a commit (and leave them as dirty in the working directory)
   201 Remove files from a commit (and leave them as dirty in the working directory)
   204 
   202 
   205 The evolve extension have an `uncommit` command that aims to replace most
   203 The *evolve* extension have an `uncommit` command that aims to replace most
   206 `rollback` usage.
   204 `rollback` usage.
   207 
   205 
   208 Fold
   206 Fold
   209 ``````````
   207 ``````````
   210 
   208 
   211 Collapse multiple changeset into one
   209 Collapse multiple changesets into a unique one.
   212 
   210 
   213 The evolve extensions *will* have a `fold` commands
   211 The *evolve* extension will have a `fold` command.
   214 
   212 
   215 Prune
   213 Prune
   216 ``````````
   214 ``````````
   217 
   215 
   218 Make a changeset obsolete without successors.
   216 Make a changeset obsolete without successors.
   219 
   217 
   220 This an important operation as it should replace strip in 95% of the case.
   218 This an important operation as it should mostly replace *strip*.
   221 
   219 
   222 alternative name:
   220 Alternative names:
   223 
   221 
   224 - kill: nice name for effect when you forget the "hg" in front on "hg kill".
   222 - kill: shall has funny effects when you forget "hg" in front of ``hg kill``.
   225 - obsolete: too vague, long and generic.
   223 - obsolete: too vague, too long and too generic.
   226 
   224 
   227 Stabilize
   225 Stabilize
   228 ```````````````
   226 ```````````````
   229 
   227 
   230 Automatically resolve troublesome changesets
   228 Automatically resolve *troublesome* changesets
   231 (unstable, latecomer and conflicting)
   229 (*unstable*, *latecomer* and *conflicting*)
   232 
   230 
   233 This is an important name as hg pull/pussh will suggest it the same way it
   231 This is an important name as hg pull/push will suggest it the same way it
   234 suggest merging when you add heads.
   232 suggest merging when you add heads.
   235 
   233 
   236 I do not like stabilize much.
   234 I do not like stabilize much.
   237 
   235 
   238 alternative name:
   236 alternative names:
   239 
   237 
   240 - solve (too generic ?)
   238 - solve (too generic ?)
   241 - evolve (too vague)
   239 - evolve (too vague)
   242 
       
   243 
       
   244 
       
   245 
       
   246 
       
   247 .. note:: I'm not very happy with the naming of:
       
   248 
       
   249           - "ok" changeset
       
   250           - latecomer
       
   251           - troublesome
       
   252 
       
   253           Any better idea are welcome.