docs/unstability.rst
author Pierre-Yves.David@ens-lyon.org
Wed, 09 May 2012 13:08:46 +0200
changeset 227 abe52cf492ee
parent 221 d43b72724b84
child 228 5a17c0d41a00
permissions -rw-r--r--
doc: several update and review.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
     1
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     2
-----------------------------------
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     3
The Unstability Principle
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     4
-----------------------------------
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     5
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     6
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     7
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     8
An intrinsic contradiction
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     9
-----------------------------------
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    10
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    11
XXX starts by talking about getting ride of changeset.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    12
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    13
DVCS bring two new major concepts to the Version Control Scene:
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    14
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    15
    * Organisation of the history with robust DAG,
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    16
    * Mutation of history.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    17
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    18
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    19
However, the two concepts opposes them self:
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    20
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    21
To achieve a robust history, three key elements are gathered in *changeset*:
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    22
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    23
    * Full snapshot of the versioned content,
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    24
    * Reference to the previous full snapshot used to build the new one,
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    25
    * A description of the change who lead from the old content to the new old.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    26
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    27
All three elements are used generate a *unique* hash that identify the changeset
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    28
(with various other metadata). This identification is a key part of DVCS design.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    29
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    30
XXX missing lines ?
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    31
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    32
::
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    33
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    34
  Schema base,  A, B and B'
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    35
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    36
The old changeset is usually discarded
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    37
t in DVCS history.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    38
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    39
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    40
::
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    41
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    42
  Schema base,  A and A' and B.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    43
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    44
Rewriting a changeset with children does not changes children parent! And
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    45
because children of the rewritten changeset still **depends** on the older
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    46
"dead" version of the changeset with can not get ride of this dead version.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    47
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    48
This is a very useful property because Changing B parent means changing B
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    49
content too.  This require the creation of **another** changeset.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    50
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    51
I'll qualify those children as **unstable** because they are based one a dead
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    52
changeset and prevent people to get ride of it.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    53
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    54
This instability is an **unavoidable consequence** of the strict dependency of
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    55
changese.  History Rewriting history alway  need to take it in account and
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    56
provide a way to rewrite the descendant on the new changeset to avoid
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    57
coexistence of the old and new version of a rewritten changeset..
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    58
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    59
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    60
Everybody is working around the issue
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    61
------------------------------------------------
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    62
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    63
I'm not claiming that rewriting history is impossible. People are successfully
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    64
doing for years. However they all need to work around this unstability:
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    65
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    66
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    67
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    68
Rewriting all at once
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    69
``````````````````````````
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    70
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    71
The simplest way to avoid unstability is to ensure rewritting operation always
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    72
ends in a stable situation. This is achieve by rewriting all impacted changeset
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    73
at the same time.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    74
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    75
rewritting all descendants at the same time that the rewritting of a changeset.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    76
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    77
::
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    78
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    79
  Schema!
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    80
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    81
Several Mercurial command follow this idea: rebase, collapse, histedit.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    82
Mercurial also refuse to amend changeset with descendant.  The git brnach design enforce such approach in git too.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    83
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    84
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    85
However, DVCS are **Distributed**. This means that you do not control what
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    86
happen outside your repository. Once a changeset have been exchanged *outside*,
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    87
you can't be sure of it's descendant. Therefore** if you rewritte changeset that
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    88
exists elsewere, you can't erradicate the risk of unstability.**
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    89
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    90
Do not rewrite exchanged changeset
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    91
```````````````````````````````````
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    92
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    93
To work around this issue mercurial introduced phases that prevent you to
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    94
rewrite exchanged changeset and ensure other can't pull certain changeset from
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    95
you. But this is a very frustrating limitation that prevent you to
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    96
efficiently share, review and collaborate on mutable changeset.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    97
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    98
Git world use another approach to prevent unstability.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
    99
By convention only a single developper works on a changeset contained in a named
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   100
branch. But once again this is a huge blocker for collaborating and clueless people
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   101
**will** mess up social convention soon or later.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   102
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   103
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   104
Loose the DAG robustness
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   105
````````````````````````````
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   106
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   107
The other approach use in Mercurial is to keep the mutable part of the history
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   108
outside the DVCS constraint. This is the MQ approach of sticking a quilt queue
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   109
over Mercurial.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   110
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   111
This allow much more flexible workflow two major feature are lost in the
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   112
process:
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   113
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   114
  * Graceful merge. MQ use plain-patch to store changeset content and patch have
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   115
    trouble to apply in changing context. applying you queu can because very
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   116
    painful if context changeset.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   117
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   118
  * easy branching. A quilt queue is by definition a linear queue.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   119
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   120
It is possible to collaborate over versionned mq! But you are going ahead a lot
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   121
of trouble.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   122
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   123
.. Ignore conflicts
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   124
.. ```````````````````````````````````
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   125
.. 
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   126
.. Another ignored issue is conflicting rewritting of the same changeset. If a
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   127
.. changeset is rewritten two times we have two newer version, duplicated history
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   128
.. complicate to merge.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   129
.. 
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   130
.. Mercurial work around by
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   131
.. 
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   132
.. The "One set of mutable changset == One developper" mantra is also a way to work
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   133
.. around conflicting rewritting of changeset. If two different people are able to
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   134
.. 
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   135
.. The git branch model allow to overwrite changeset version by another one. But it
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   136
.. does not care about divergent version. It is the equilent of "common ftp" source
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   137
.. management for changeset.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   138
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   139
Facing The Danger Once And For All
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   140
------------------------------------------------
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   141
The more effort you put to avoid instability, the more option you deny. And even
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   142
most restrictive work flow can't garantee that instability will never show up!
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   143
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   144
Obsolete marker can handle the job
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   145
```````````````````````````````````
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   146
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   147
It is time to provide a full featured solution to deal with instability and to
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   148
stop working around the issue! This is why I developing a new feature for
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   149
mercurial called "Obsolete marker". Obsolete marker have two key property:
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   150
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   151
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   152
* Any changeset is we want to get ride of is **explicitly** marked as "obsolete"
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   153
  by history rewritting operation.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   154
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   155
  By explicitly marking the obsolete part of the history, we will be able to
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   156
  easily detect appearance of unstability. 
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   157
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   158
* Relations between old and new version of changesets are tracked by Obsolete
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   159
  markers.
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   160
227
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   161
  By Storing a meta-history of changeset evolution we are able to easily resolve
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   162
  instability and edition conflict [#]_ .
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   163
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   164
.. [#] edition conflict is another major obstable to collaboration. See the
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   165
       section dedicated to obsolete marker for details.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   166
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   167
Improving robusness improves simplicity
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   168
````````````````````````````````````````````````
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   169
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   170
This proposal should **first** be seen as a safety measure.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   171
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   172
It allow to detect unstability as soon as possible
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   173
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   174
::
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   175
    $ hg pull
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   176
    added 3 changeset
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   177
    +2 unstable changeset
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   178
    (do you want "hg stabilize" ?)
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   179
    working directory parent is obsolete!
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   180
    $ hg push
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   181
    outgoing unstable changesets
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   182
    (use "hg stabilize" or force the push)
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   183
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   184
And should not not encourage people to create unstability
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   185
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   186
::
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   187
    $ hg up 42
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   188
    $ hg commit --amend
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   189
    changeset have descendant.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   190
    $ hg commit --amend -f
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   191
    +5 unstable changeset
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   192
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   193
    $ hg rebase -D --rev 40::44
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   194
    rebasing already obsolete changeset 42:AAA will conflict with newer version 48:BBB
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   195
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   196
While allowing powerful feature
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   197
````````````````````````````````````````````````
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   198
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   199
* "kill" changeset remotely.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   200
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   201
* track resulting changeset when submitting patch//pull request.
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   202
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   203
* Focus on what you do:
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   204
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   205
  I do not like the "all at once" model of history rewriting. I'm confortable
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   206
  with unstability and obsolete marker offer all the tool to safely create and
abe52cf492ee doc: several update and review.
Pierre-Yves.David@ens-lyon.org
parents: 221
diff changeset
   207
  handle unstability locally.
221
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   208
d43b72724b84 doc: unstability principle
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   209