Mercurial > evolve
annotate docs/obs-concept.rst @ 186:0698376bb13c
merge with arne change
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Wed, 28 Mar 2012 11:07:53 +0200 |
parents | 4d44a37d51d1 f047cd4f1235 |
children | 706a3a57b567 |
rev | line source |
---|---|
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
1 ----------------------------------------------------------- |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
2 Why Do We Need a New Concept |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
3 ----------------------------------------------------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
4 |
173 | 5 Current DVCS are great tools to forge a series of flawless changeset on your own. |
6 But they perform poorly when it comes to **sharing** some work in progress and | |
7 **collaborating** on such work in progress. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
8 |
173 | 9 When people forge a new version of a changeset they actually create a |
10 new changeset and get rid of the original changeset. Difficultis to | |
11 collaborate mostly came from the way old content is *removed* from | |
12 a repository. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
13 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
14 Mercurial Approach: Strip |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
15 ----------------------------------------------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
16 |
173 | 17 With the current version of mercurial, every changeset that exists in |
18 your repository is *visible* and *meaningful*. To delete old | |
19 (rewritten) changesets, mercurial removes them from the repository | |
20 storage with an operation called *strip*. After the *stripping*, the | |
21 repository looks like if the changeset never existed. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
22 |
173 | 23 This approach is simple and effective except there is a very big |
24 drawback: you can remove changesets from **your repository only**. If | |
25 a stripped changeset exists in another repository it touches, it will | |
26 show up again. This is because a shared changeset becomes | |
27 part of a shared global history. Stripping a changeset from all | |
28 repositories is at best impractical and in most case impossible! | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
29 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
30 As consequence, **you can not rewrite something once you exchange it with |
173 | 31 others**. The old version will still exist along side the new one [#]_. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
32 |
173 | 33 However backups are created while stripping a changeset in most |
34 cases. This allow restoration of an old changeset but the process is | |
35 painful. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
36 |
173 | 37 Finally, as the repository format is not optimized for deletion, |
38 stripping a changeset may be slow in some situation. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
39 |
173 | 40 To sum up, the strip approach is very simple but does not handle |
41 interaction with the outer world, which is very unfortunate for a | |
42 *Distributed* VCS. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
43 |
173 | 44 .. [#] various workarounds exist but they are workarounds with their own flow. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
45 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
46 Git Approach: Overwrite Reference |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
47 ----------------------------------------------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
48 |
173 | 49 The Git approach to repository structure is a bit more complex: there |
50 can be any amount of unrelated changesets in a repository, and **only | |
51 changesets referenced by a git branch** are *visible* and | |
52 *meaningful*. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
53 |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
54 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
55 .. warning:: add a schema:: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
56 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
57 C |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
58 | B---<foo> |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
59 |/ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
60 | |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
61 A |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
62 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
63 Only B and A are visible. |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
64 |
173 | 65 This ease the process of getting rid of old changesets. You can just |
66 leave them in place and move the reference on the new one. You can | |
67 then propagate those changes by moving the git-branch on remote host, | |
68 the newer versions overwritting the older ones. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
69 |
173 | 70 This approach goes a bit further but still have a major drawback: |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
71 |
173 | 72 Because you **overwrite** git-branch you have no conflit resolution. The last |
73 to speak wins. This makes collaboration on multiple changesets difficult because | |
74 you can't merge concurent updates on a changeset. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
75 |
173 | 76 Every overwrite is a forced operation where the operator says "Yes I |
77 want this to replace that". On a higly distributed environment, a user may | |
78 end with conflicting references and with no proper way to choose. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
79 |
173 | 80 Because of this way to visualize a repository, git-branches are a very |
81 core part of git. This makes the user interface more complicated and | |
82 moving through history more constrained. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
83 |
173 | 84 Finally, even if all older changesets still exist in the repository, accesing them |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
85 is still painful. |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
86 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
87 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
88 ----------------------------------------------------- |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
89 The Obsolete Marker Concept |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
90 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
91 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
92 |
173 | 93 As none of these concepts were powerful enough to embrace the need to |
94 safely share rewritten history we needed another one. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
95 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
96 Basic concept |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
97 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
98 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
99 |
173 | 100 Every history rewriting operation stores the information that old rewritten |
101 changesets has a newer version available in a set of changesets. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
102 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
103 All basic history rewriting operation can create a appropriate obsolete marker. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
104 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
105 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
106 .. figure:: ./figures/example-1-update.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
107 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
108 *Updating* a changeset |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
109 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
110 Create one obsolete marker: ``([A'] obsolete A)`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
111 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
112 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
113 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
114 .. figure:: ./figures/example-2-split.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
115 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
116 *Splitting* a changeset in multiple one |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
117 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
118 Create one obsolete marker ``([B1, B2] obsolete B)]`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
119 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
120 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
121 .. figure:: ./figures/example-3-merge.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
122 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
123 *Merging* multiple changeset in a single one |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
124 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
125 Create two obsolete markers ``([C] obsolete A), ([C] obsolete B)`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
126 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
127 .. figure:: ./figures/example-4-reorder.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
128 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
129 *Moving* changeset around |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
130 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
131 Reordering those two changesets need two obsolete markers: |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
132 ``([A'] obsolete A), ([B'] obsolete B)`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
133 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
134 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
135 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
136 .. figure:: ./figures/example-5-delete.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
137 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
138 *Removing* a changeset: |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
139 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
140 One obselete marker ``([] obsolete B)`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
141 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
142 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
143 To conclude, a single obsolete marker express a relation from **0..n** new |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
144 changesets to **1** old changeset. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
145 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
146 Basic Usage |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
147 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
148 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
149 Obsolete markers create a perpendicular history: **a versionned version of the |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
150 changeset graph**. This means that we can have the same feature we have for |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
151 versioned files but applied to changeset: |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
152 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
153 First: we can display a **coherent view** of the history graph with only a |
173 | 154 single version of your changeset displayed by the UI. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
155 |
173 | 156 Second, because obsolete changeset contents are still **available**, |
157 you can | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
158 |
173 | 159 * **browse** the contents of your obsolete commits, |
160 | |
161 * **compare** newer and older versions of a changeset, | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
162 |
173 | 163 * **restore** contents of previously obsolete changesets. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
164 |
173 | 165 Finally, the obsolete marker can be **exchanged between |
166 repositories**. You are able to share the result on your history | |
167 rewriting operations with other prople and **collaborate on the | |
168 mutable part of the history**. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
169 |
173 | 170 Conflicting history rewriting operation can be detected and |
171 **resolved** as easily as conflicting changes on a file. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
172 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
173 |
173 | 174 Detecting and solving tricky situations |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
175 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
176 |
173 | 177 History rewriting can lead to complex situations. The obsolete marker |
178 introduces a simple representation for this complex reality. But | |
179 people using complex workflows will one day or another have to face | |
180 the intrinsic complexity of some real-world situation. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
181 |
173 | 182 This section describes possible situations, define precise sets of |
183 changesets involved in such situations and explains how the error | |
184 cases can be automatically resolved using available information. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
185 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
186 |
173 | 187 Obsolete changesets |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
188 ```````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
189 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
190 Old changesets left behind by obsolete operation are said **obsolete**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
191 |
173 | 192 With the current version of mercurial, this *obsolete* part is |
193 stripped from the repository before the end of every rewritting | |
194 operation. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
195 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
196 .. figure:: ./figures/error-obsolete.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
197 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
198 Rebasing `B` and `C` on `A` (as `B'`, `C'`) |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
199 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
200 This rebase operation added two obsolete markers from new changesets to old |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
201 changesets. These Two old changesets are now part of the *obsolete* part of the |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
202 history. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
203 |
173 | 204 In most cases the obsolete set will be fully hidden to both the UI and |
205 discovery, hence users do not have to care about them unless they want to | |
206 audit history rewriting operations. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
207 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
208 Unstable changesets |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
209 ``````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
210 |
173 | 211 While exploring the obsolete marker possibility a bit further you may |
212 end up with *obsolete* changeset with *non-obsolete* children. There | |
213 are two common ways to achieve this: | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
214 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
215 * Pull a changeset based of an old version of a changeset [#]_. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
216 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
217 * Use a partial rewriting operation. For example amend on a changeset with |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
218 childrens. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
219 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
220 *Non-obsolete* changeset based on *obsolete* one are said **unstable** |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
221 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
222 .. figure:: ./figures/error-unstable.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
223 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
224 Amend `A` into `A'` leaving `B` behind. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
225 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
226 In this situation we can not consider `B` as *obsolete*. But we have all |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
227 necessary data to detect `B` as an *unstable* branch of the history because |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
228 its parent `A` is *obsolete*. In addition, we have enough data to |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
229 automatically resolve this instability: we know that the new version of `B` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
230 parent (`A`) is `A'`, We can deduce that we should rebase `B` on `A'` to get |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
231 a stable history again. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
232 |
173 | 233 Proper warnings should be issued when part of the history becomes |
234 unstable. The UI will be able to use the obsolete marker to | |
235 automatically suggest a resolution to the user of even carry them out | |
236 for him. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
237 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
238 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
239 XXX details automatic resolution for |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
240 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
241 * movement |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
242 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
243 * handling deletion |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
244 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
245 * handling split on multiple head |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
246 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
247 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
248 .. [#] For this to happen one needs to explicitly enable exchange of draft |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
249 changeset. See phase help for details. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
250 |
173 | 251 The two parts of the obsolete set |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
252 `````````````````````````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
253 |
173 | 254 The previous section shows that there could be two kinds of *obsolete* |
255 changesets: | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
256 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
257 * *obsolete* changeset with no or *obsolete* only descendants, said **extinct**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
258 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
259 * *obsolete* changeset with *unstable* descendants, said **suspended**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
260 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
261 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
262 .. figure:: ./figures/error-extinct.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
263 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
264 Amend `A` and `C` leaving `B` behind. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
265 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
266 In this example we have two *obsolete* changesets: `C` with no *unstable* |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
267 children is *extinct*. `A` with *unstable* descendant (`B`) is *suspended*. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
268 `B` is *unstable* as before. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
269 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
270 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
271 Because nothing outside the obsolete set default on *extinct* changesets, they |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
272 can be safely hidden in the UI and even garbage collected. *Suspended* changeset |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
273 have to stay visible and available until they unstable descendant are rewritten |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
274 in stable version. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
275 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
276 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
277 Conflicting rewriting |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
278 `````````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
279 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
280 If people start to concurrently edit the same part of the history they will |
173 | 281 likely meet conflicting situations when a changeset have been rewritten in two |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
282 different versions. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
283 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
284 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
285 .. figure:: ./figures/error-conflicting.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
286 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
287 Conflicting rewriting of `A` into `A'` and `A''` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
288 |
173 | 289 This kind of conflict is easy to detect with an obsolete marker |
290 because an obsolete changeset can have more than one new version. It | |
291 may be seen as the multiple heads case. Mercurial warns you about this | |
292 on pull. It is resolved the same way by a merge of A' and A'' that | |
293 will keep the same parent than `A'` and `A''` with two obsolete | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
294 markers pointing to both `A` and `A'` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
295 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
296 .. warning:: TODO: Add a schema of the resolution. (merge A' and A'' with A as |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
297 ancestor and graft the result of A^) |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
298 |
173 | 299 Allowing multiple new changesets to obsolete a single one allows to |
300 distinguish a split changeset from an history rewriting conflict. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
301 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
302 Reliable history |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
303 `````````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
304 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
305 Obsolete marker really help to smooth rewriting operation process. However they |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
306 do not change the fact that **you should only rewrite the mutable part of the |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
307 history**. The phase concept enforce this rules by explicitly defining a |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
308 public immutable set of changeset. Rewriting operation refuse to work on |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
309 public changeset, but they is still some corner case where changesets |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
310 rewritten in the past are made public. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
311 |
173 | 312 Special rules apply for obsolete marker pointing to public changeset: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
313 |
173 | 314 * Public changesets are excluded from the obsolete set (public |
315 changesets are never hidden or candidate to garbage collection) | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
316 |
173 | 317 * *newer* version of a public changeset are said **latecomer** and highlighted as |
318 an error case. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
319 |
173 | 320 Solving such an error is easy. Because we know what changeset a |
321 *latecomer* tries to rewrite, we can easily compute a smaller | |
322 changeset containing only the change from the old *public* to the new | |
323 *latecomer*. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
324 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
325 .. warning:: add a schema |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
326 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
327 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
328 Conclusion |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
329 ---------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
330 |
173 | 331 Obsolete marker is a powerful concept that allows mercurial to safely handle |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
332 history rewriting operations. It is a new type of relation between Mercurial |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
333 changesets that track the result of history rewriting operations. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
334 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
335 This concept is simple to define and provides a very solid base to: |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
336 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
337 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
338 - Very fast history rewriting operations, |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
339 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
340 - auditable and reversible history rewritting process, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
341 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
342 - clean final history, |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
343 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
344 - share and collaborate on mutable part of the history, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
345 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
346 - gracefully handle history rewriting conflict, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
347 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
348 - allows various history rewriting UI to collaborate with a underlying common API. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
349 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
350 .. list-table:: Comparison on solution [#]_ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
351 :header-rows: 1 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
352 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
353 * - Solution |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
354 - Remove changeset locally |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
355 - Works on any point of your history |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
356 - Propagation |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
357 - Collaboration |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
358 - Speed |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
359 - Access to older version |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
360 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
361 * - Strip |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
362 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
363 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
364 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
365 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
366 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
367 - `- -` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
368 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
369 * - Reference |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
370 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
371 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
372 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
373 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
374 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
375 - `-` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
376 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
377 * - Obsolete |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
378 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
379 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
380 - `++` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
381 - `++` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
382 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
383 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
384 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
385 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
386 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
387 .. [#] To preserve good tradition in comparison table, an overwhelming advantage |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
388 goes to the defended solution. |