docs/obs-terms.rst
changeset 4615 8406d9b06130
parent 2862 07ce6c063c61
child 4618 803d32f4e498
equal deleted inserted replaced
4614:091eab1223a4 4615:8406d9b06130
    10 
    10 
    11 The mutable concept is based on **obsolete markers**. Creating an obsolete
    11 The mutable concept is based on **obsolete markers**. Creating an obsolete
    12 marker registers a relation between an old obsoleted changeset and its newer
    12 marker registers a relation between an old obsoleted changeset and its newer
    13 version.
    13 version.
    14 
    14 
    15 Old changesets are called **precursors** while their new versions are called
    15 Old changesets are called **predecessors** while their new versions are called
    16 **successors**. A marker always registers a single *precursor* and:
    16 **successors**. A marker always registers a single *predecessor* and:
    17 
    17 
    18 - no *successor*: the *precursor* is just discarded.
    18 - no *successor*: the *predecessor* is just discarded.
    19 - one *successor*: the *precursor* has been rewritten
    19 - one *successor*: the *predecessor* has been rewritten
    20 - multiple *successors*: the *precursor* were splits in multiple
    20 - multiple *successors*: the *predecessor* were splits in multiple
    21   changesets.
    21   changesets.
    22 
    22 
    23 .. The *precursors* and *successors* terms can be used on changeset directly:
    23 .. The *predecessors* and *successors* terms can be used on changeset directly:
    24 
    24 
    25 .. :precursors: of a changeset `A` are changesets used as *precursors* by
    25 .. :predecessors: of a changeset `A` are changesets used as *predecessors* by
    26 ..              obsolete marker using changeset `A` as *successors*
    26 ..              obsolete marker using changeset `A` as *successors*
    27 
    27 
    28 .. :successors: of a changeset `B` are changesets used as *successors* by
    28 .. :successors: of a changeset `B` are changesets used as *successors* by
    29 ..              obsolete marker using changeset `B` as *precursors*
    29 ..              obsolete marker using changeset `B` as *predecessors*
    30 
    30 
    31 Chaining obsolete markers is allowed to rewrite a changeset that is already a
    31 Chaining obsolete markers is allowed to rewrite a changeset that is already a
    32 *successor*. This is a kind of *second order version control*.
    32 *successor*. This is a kind of *second order version control*.
    33 To clarify ambiguous situations one can use **direct precursors** or
    33 To clarify ambiguous situations one can use **direct predecessors** or
    34 **direct successors** to name changesets that are directly related.
    34 **direct successors** to name changesets that are directly related.
    35 
    35 
    36 The set of all *obsolete markers* forms a direct acyclic graph the same way
    36 The set of all *obsolete markers* forms a direct acyclic graph the same way
    37 standard *parents*/*children* relation does. In this graph we have:
    37 standard *parents*/*children* relation does. In this graph we have:
    38 
    38 
    39 :any precursors: are transitive precursors of a changeset: *direct precursors*
    39 :any predecessors: are transitive predecessors of a changeset: *direct predecessors*
    40                  and *precursors* of *precursors*.
    40                  and *predecessors* of *predecessors*.
    41 
    41 
    42 :any successors: are transitive successors of a changeset: *direct successors*
    42 :any successors: are transitive successors of a changeset: *direct successors*
    43                  and *successors*  of *successors*)
    43                  and *successors*  of *successors*)
    44 
    44 
    45 Obsolete markers may refer changesets that are not known locally.
    45 Obsolete markers may refer changesets that are not known locally.
    46 So, *direct precursors* of a changeset may be unknown locally.
    46 So, *direct predecessors* of a changeset may be unknown locally.
    47 This is why we usually focus on the **first known precursors**  of the rewritten
    47 This is why we usually focus on the **first known predecessors**  of the rewritten
    48 changeset. The same apply for *successors*.
    48 changeset. The same apply for *successors*.
    49 
    49 
    50 Changeset in *any successors* which are not **obsolete** are called
    50 Changeset in *any successors* which are not **obsolete** are called
    51 **newest successors**..
    51 **newest successors**..
    52 
    52 
    64 +---------------------+--------------------------+-----------------------------+
    64 +---------------------+--------------------------+-----------------------------+
    65 | **mutable**         | **obsolete**             | **extinct**                 |
    65 | **mutable**         | **obsolete**             | **extinct**                 |
    66 |                     |                          |                             |
    66 |                     |                          |                             |
    67 | Changeset in either | Obsolete changeset is    | *extinct* changeset is      |
    67 | Changeset in either | Obsolete changeset is    | *extinct* changeset is      |
    68 | *draft* or *secret* | *mutable* used as a      | *obsolete* which has only   |
    68 | *draft* or *secret* | *mutable* used as a      | *obsolete* which has only   |
    69 | phase.              | *precursor*.             | *obsolete* descendants.     |
    69 | phase.              | *predecessor*.           | *obsolete* descendants.     |
    70 |                     |                          |                             |
    70 |                     |                          |                             |
    71 |                     | A changeset is used as   | They can safely be:         |
    71 |                     | A changeset is used as   | They can safely be:         |
    72 |                     | a *precursor* when at    |                             |
    72 |                     | a *predecessor* when at  |                             |
    73 |                     | least one obsolete       | - hidden in the UI,         |
    73 |                     | least one obsolete       | - hidden in the UI,         |
    74 |                     | marker refers to it      | - silently excluded from    |
    74 |                     | marker refers to it      | - silently excluded from    |
    75 |                     | as precursors.           |   pull and push operations  |
    75 |                     | as predecessors.         |   pull and push operations  |
    76 |                     |                          | - mostly ignored            |
    76 |                     |                          | - mostly ignored            |
    77 |                     |                          | - garbage collected         |
    77 |                     |                          | - garbage collected         |
    78 |                     |                          |                             |
    78 |                     |                          |                             |
    79 |                     |                          +-----------------------------+
    79 |                     |                          +-----------------------------+
    80 |                     |                          |                             |
    80 |                     |                          |                             |
   128 |                     |                          | **divergent**               |
   128 |                     |                          | **divergent**               |
   129 |                     |                          |                             |
   129 |                     |                          |                             |
   130 |                     |                          | *divergent*   is changeset  |
   130 |                     |                          | *divergent*   is changeset  |
   131 |                     |                          | that appears when multiple  |
   131 |                     |                          | that appears when multiple  |
   132 |                     |                          | changesets are successors   |
   132 |                     |                          | changesets are successors   |
   133 |                     |                          | of the same precursor.      |
   133 |                     |                          | of the same predecessor.    |
   134 |                     |                          |                             |
   134 |                     |                          |                             |
   135 |                     |                          | *divergent*   are solved    |
   135 |                     |                          | *divergent*   are solved    |
   136 |                     |                          | through a three ways merge  |
   136 |                     |                          | through a three ways merge  |
   137 |                     |                          | between the two             |
   137 |                     |                          | between the two             |
   138 |                     |                          | *divergent*   ,             |
   138 |                     |                          | *divergent*   ,             |
   166 |                                                                              |
   166 |                                                                              |
   167 | Changesets in the *public* phases.                                           |
   167 | Changesets in the *public* phases.                                           |
   168 |                                                                              |
   168 |                                                                              |
   169 | Rewriting operation refuse to work on immutable changeset.                   |
   169 | Rewriting operation refuse to work on immutable changeset.                   |
   170 |                                                                              |
   170 |                                                                              |
   171 | Obsolete markers that refer an immutable changeset as precursors have        |
   171 | Obsolete markers that refer an immutable changeset as predecessors have      |
   172 | no effect on the precursors but may have effect on the successors.           |
   172 | no effect on the predecessors but may have effect on the successors.         |
   173 |                                                                              |
   173 |                                                                              |
   174 | When a *mutable* changeset becomes *immutable* (changing its phase from draft|
   174 | When a *mutable* changeset becomes *immutable* (changing its phase from draft|
   175 | to public) it is just *immutable* and loose any property of it's former      |
   175 | to public) it is just *immutable* and loose any property of it's former      |
   176 | state.                                                                       |
   176 | state.                                                                       |
   177 |                                                                              |
   177 |                                                                              |