Mercurial > evolve
annotate docs/obs-concept.rst @ 429:079b231b8ea4
obsolete: introduce an extension helper and use it
this extension helper allow most of setup operation to be declared in place
using decorator. This allow clear separation between independant part of the
code.
This is the first HUGE wave of changes related to this introduction.
The goal is to have a clear distinction and documention of every part of this
extension.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Tue, 07 Aug 2012 14:08:31 +0200 |
parents | b398e9c2dbd1 |
children | 9825c7da5b54 |
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 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
5 Current DVCSes are great tools for forging a series of flawless |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
6 changesets on your own. But they perform poorly when it comes to |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
7 **sharing** some work in progress and **collaborating** on such work |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
8 in progress. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
9 |
173 | 10 When people forge a new version of a changeset they actually create a |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
11 new changeset and get rid of the original changeset. Difficulties to |
173 | 12 collaborate mostly came from the way old content is *removed* from |
13 a repository. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
14 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
15 Mercurial Approach: Strip |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
16 ----------------------------------------------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
17 |
173 | 18 With the current version of mercurial, every changeset that exists in |
19 your repository is *visible* and *meaningful*. To delete old | |
20 (rewritten) changesets, mercurial removes them from the repository | |
21 storage with an operation called *strip*. After the *stripping*, the | |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
22 repository looks as if the changeset never existed. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
23 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
24 This approach is simple and effective except for one big |
173 | 25 drawback: you can remove changesets from **your repository only**. If |
26 a stripped changeset exists in another repository it touches, it will | |
27 show up again. This is because a shared changeset becomes | |
28 part of a shared global history. Stripping a changeset from all | |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
29 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
|
30 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
31 As consequence, **you can not rewrite something once you exchange it with |
173 | 32 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
|
33 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
34 Moreover stripping changesets creates backup bundles. This allows |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
35 restoration of the deleted changesets, but the process is painful. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
36 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
37 Finally, as the repository format is not optimized for deletion. stripping a |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
38 changeset may be slow in some situations. |
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 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
44 .. [#] various work around exists but they require their own workflows |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
45 which are distinct from the very elegant basic workflow of |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
46 Mercurial. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
47 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
48 Git Approach: Overwrite Reference |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
49 ----------------------------------------------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
50 |
173 | 51 The Git approach to repository structure is a bit more complex: there |
52 can be any amount of unrelated changesets in a repository, and **only | |
53 changesets referenced by a git branch** are *visible* and | |
54 *meaningful*. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
55 |
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 .. warning:: add a schema:: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
58 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
59 C |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
60 | B---<foo> |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
61 |/ |
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 A |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
64 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
65 Only B and A are visible. |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
66 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
67 This simplifies the process of getting rid of old changesets. You can |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
68 just leave them in place and move the reference on the new one. You |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
69 can then propagate this change by moving the git-branch on remote host |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
70 with the newer version of the marker overwriting the older one. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
71 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
72 This approach goes a bit further but still has a major drawback: |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
73 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
74 Because you **overwrite** the git-branch, you have no conflict |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
75 resolution. The last to act wins. This makes collaboration on multiple |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
76 changesets difficult because you can't merge concurrent updates on a |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
77 changeset. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
78 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
79 Every overwrite is a forced operation where the operator says, "yes I |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
80 want this to replace that". In highly distributed environments, a user |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
81 may end up with conflicting references and no proper way to choose. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
82 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
83 Because of this way to visualize a repository, git-branches are a core |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
84 part of git, which makes the user interface more complicated and |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
85 constrains moving through history. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
86 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
87 Finally, even if all older changesets still exist in the repository, |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
88 accesing them is still painful. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
89 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
90 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
91 ----------------------------------------------------- |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
92 The Obsolete Marker Concept |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
93 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
94 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
95 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
96 As none of the concepts was powerful enough to fulfill the need of |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
97 safely rewriting history, including easy sharing and collaboration on |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
98 mutable history, we needed another one. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
99 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
100 Basic concept |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
101 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
102 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
103 |
173 | 104 Every history rewriting operation stores the information that old rewritten |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
105 changeset is replaced by newer version in a given set of changesets. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
106 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
107 All basic history rewriting operation can create an appropriate obsolete marker. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
108 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
109 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
110 .. figure:: ./figures/example-1-update.* |
161
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 *Updating* a changeset |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
113 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
114 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
|
115 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
116 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
117 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
118 .. figure:: ./figures/example-2-split.* |
161
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 *Splitting* a changeset in multiple one |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
121 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
122 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
|
123 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
124 |
234 | 125 .. figure:: ./figures/simple-3-merge.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
126 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
127 *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
|
128 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
129 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
|
130 |
234 | 131 .. figure:: ./figures/simple-4-reorder.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
132 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
133 *Moving* changeset around |
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 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
|
136 ``([A'] obsolete A), ([B'] obsolete B)`` |
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 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
139 |
234 | 140 .. figure:: ./figures/simple-5-delete.* |
161
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 *Removing* a changeset: |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
143 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
144 One obselete marker ``([] obsolete B)`` |
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 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
147 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
|
148 changesets to **1** old changeset. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
149 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
150 Basic Usage |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
151 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
152 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
153 Obsolete markers create a perpendicular history: **a versioned |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
154 changeset graph**. This means that offers the same features we have |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
155 for versioned files but applied to changeset: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
156 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
157 First: we can display a **coherent view** of the history graph in which only a |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
158 single version of your changesets is displayed by the UI. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
159 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
160 Second, because obsolete changeset content is still **available**. You can |
173 | 161 you can |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
162 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
163 * **browse** the content of your obsolete commits, |
173 | 164 |
165 * **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
|
166 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
167 * **restore** content of previously obsolete changesets. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
168 |
173 | 169 Finally, the obsolete marker can be **exchanged between |
170 repositories**. You are able to share the result on your history | |
171 rewriting operations with other prople and **collaborate on the | |
172 mutable part of the history**. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
173 |
173 | 174 Conflicting history rewriting operation can be detected and |
175 **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
|
176 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
177 |
173 | 178 Detecting and solving tricky situations |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
179 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
180 |
173 | 181 History rewriting can lead to complex situations. The obsolete marker |
182 introduces a simple representation for this complex reality. But | |
183 people using complex workflows will one day or another have to face | |
184 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
|
185 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
186 This section describes possible situations, defines precise sets of |
173 | 187 changesets involved in such situations and explains how the error |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
188 cases can be resolved automatically using the available information. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
189 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
190 |
173 | 191 Obsolete changesets |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
192 ```````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
193 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
194 Old changesets left behind by obsolete operation are called **obsolete**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
195 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
196 With the current version of mercurial, this *obsolete* part is stripped from the |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
197 repository before the end of every rewriting operation. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
198 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
199 .. figure:: ./figures/error-obsolete.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
200 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
201 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
|
202 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
203 This rebase operation added two obsolete markers from new |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
204 changesets to old changesets. These two old changesets are now |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
205 part of the *obsolete* part of the history. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
206 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
207 In most cases, the obsolete set will be fully hidden to both the UI and |
173 | 208 discovery, hence users do not have to care about them unless they want to |
209 audit history rewriting operations. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
210 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
211 Unstable changesets |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
212 ``````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
213 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
214 While exploring the possibilities of the obsolete marker a bit |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
215 further, you may end up with *obsolete* changesets which have |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
216 *non-obsolete* children. There is 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
|
217 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
218 * 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
|
219 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
220 * Use a partial rewriting operation. For example amend on a changeset with |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
221 children. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
222 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
223 *Non-obsolete* changeset based on *obsolete* one are called **unstable** |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
224 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
225 .. figure:: ./figures/error-unstable.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
226 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
227 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
|
228 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
229 In this situation we cannot consider `B` as *obsolete*. But we |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
230 have all the necessary data to detect `B` as an *unstable* branch |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
231 of the history because its parent `A` is *obsolete*. In addition, |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
232 we have enough data to automatically resolve this instability: we |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
233 know that the new version of `B` parent (`A`) is `A'`. We can |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
234 deduce that we should rebase `B` on `A'` to get a stable history |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
235 again. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
236 |
173 | 237 Proper warnings should be issued when part of the history becomes |
238 unstable. The UI will be able to use the obsolete marker to | |
239 automatically suggest a resolution to the user of even carry them out | |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
240 for them. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
241 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
242 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
243 XXX details on automatic resolution for |
161
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 * movement |
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 * handling deletion |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
248 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
249 * handling split on multiple head |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
250 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
251 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
252 .. [#] For this to happen one needs to explicitly enable exchange of draft |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
253 changesets. See phase help for details. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
254 |
173 | 255 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
|
256 `````````````````````````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
257 |
173 | 258 The previous section shows that there could be two kinds of *obsolete* |
259 changesets: | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
260 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
261 * an *obsolete* changeset with no or *obsolete* only descendants is called **extinct**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
262 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
263 * an *obsolete* changeset with *unstable* descendants is called **suspended**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
264 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
265 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
266 .. figure:: ./figures/error-extinct.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
267 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
268 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
|
269 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
270 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
|
271 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
|
272 `B` is *unstable* as before. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
273 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
274 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
275 Because nothing outside the obsolete set default on *extinct* |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
276 changesets, they can be safely hidden in the UI and even garbage |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
277 collected. *Suspended* changesets have to stay visible and available |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
278 until their unstable descendant are rewritten into stable version. |
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 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
281 Conflicting rewrites |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
282 ```````````````````` |
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 If people start to concurrently edit the same part of the history they will |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
285 likely meet conflicting situations when a changeset has been rewritten in two |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
286 different ways. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
287 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
288 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
289 .. figure:: ./figures/error-conflicting.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
290 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
291 Conflicting rewrite 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
|
292 |
173 | 293 This kind of conflict is easy to detect with an obsolete marker |
294 because an obsolete changeset can have more than one new version. It | |
295 may be seen as the multiple heads case. Mercurial warns you about this | |
296 on pull. It is resolved the same way by a merge of A' and A'' that | |
297 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
|
298 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
|
299 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
300 .. 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
|
301 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
|
302 |
173 | 303 Allowing multiple new changesets to obsolete a single one allows to |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
304 distinguish a split changeset from a history rewriting conflict. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
305 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
306 Reliable history |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
307 `````````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
308 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
309 Obsolete markers help to smooth rewriting operation process. However |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
310 they do not change the fact that **you should only rewrite the mutable |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
311 part of the history**. The phase concept enforces this rule by |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
312 explicitly defining a public immutable set of changesets. Rewriting |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
313 operations refuse to work on public changesets, but there are still |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
314 some corner cases where previously rewritten changesets are made |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
315 public. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
316 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
317 Special rules apply for obsolete markers pointing to public changesets: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
318 |
173 | 319 * Public changesets are excluded from the obsolete set (public |
320 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
|
321 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
322 * *newer* version of a public changeset are called **latecomer** and |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
323 highlighted as an error case. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
324 |
173 | 325 Solving such an error is easy. Because we know what changeset a |
326 *latecomer* tries to rewrite, we can easily compute a smaller | |
327 changeset containing only the change from the old *public* to the new | |
328 *latecomer*. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
329 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
330 .. warning:: add a schema |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
331 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
332 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
333 Conclusion |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
334 ---------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
335 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
336 The 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
|
337 history rewriting operations. It is a new type of relation between Mercurial |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
338 changesets which tracks the result of history rewriting operations. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
339 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
340 This concept is simple to define and provides a very solid base for: |
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 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
343 - Very fast history rewriting operations, |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
344 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
345 - auditable and reversible history rewriting process, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
346 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
347 - clean final history, |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
348 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
349 - sharing and collaborating on the mutable part of the history, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
350 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
351 - gracefully handling history rewriting conflicts, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
352 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
353 - various history rewriting UI's collaborating with an underlying common API. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
354 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
355 .. list-table:: Comparison on solution [#]_ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
356 :header-rows: 1 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
357 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
358 * - Solution |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
359 - Remove changeset locally |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
360 - Works on any point of your history |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
361 - Propagation |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
362 - Collaboration |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
363 - Speed |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
364 - Access to older version |
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 * - Strip |
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 - \ |
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 * - Reference |
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 - `+` |
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 * - Obsolete |
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 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
388 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
389 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
390 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
391 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
392 .. [#] 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
|
393 goes to the defended solution. |