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-- |
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 |