annotate docs/obs-concept.rst @ 184:f047cd4f1235

backout obs-concept.rst changes too much conflict with changes in another branch
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Wed, 28 Mar 2012 11:07:02 +0200
parents 4da5ecfb5d41
children 0698376bb13c 0f1b8119a281
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
5 Current DVCS are great tool to forge a series of flawless changeset on your own.
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
6 But they perform poorly whe is comes to **share** work in progress and
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
7 **collaborate** on such work in progress.
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
8
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
9 When people forge new version of a changeset they create a new changeset and get
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
10 ride of the original changeset. Difficultis to collaborate mostly came from the
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
11 way old content are *removed* from repository.
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
12
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
13 Mercurial Approach: Strip
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
14 -----------------------------------------------------
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
15
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
16 With current version of mercurial, every changesets that exist in your
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
17 repository are *visible* and *meaningful*. To get ride of old changeset you
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
18 rewrote mercurial remove them from the repository storage. with an operation
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
19 called *strip*. After the *strip* the repository looks like if the changeset
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
20 never existed.
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
21
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
22 This approach is simple and effective but have a very big drawnback: You can
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
23 remove changesets from **your repository only**. If strip exists in other
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
24 repositories it will show of again and again. This only cure for this is to
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
25 strip the offending changeset from all repository. And operation at best
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
26 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
27
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
28
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
29 As consequence, **you can not rewrite something once you exchange it with
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
30 others**. The old version will still exists along side the new one [#]_.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
31
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
32 Moreover backup are create stripped changeset in most case. This allow
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
33 restoration of old changeset but the process is painful.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
34
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
35 Finally, as the repository format is not optimized for deletion. stripping a
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
36 changeset may be slow in some situation.
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
37
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
38
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
39 To sum up, the strip approach is very simple but does not handle interaction
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
40 with the outer world. Which is unfortunate for a *Distributed* VCS.
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
41
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
42 .. [#] various work around exists but they are work around with their own flow.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
43
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
44 Git Approach: Overwrite Reference
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
45 -----------------------------------------------------
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
46
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
47 Git approach for repository is a bit more complex: They can be any amount of
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
48 changeset can exist in a repository. but **only changesets referenced by a git
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
49 branch** are *visible* and *meaningful*.
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
50
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
51
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
52 .. warning:: add a schema::
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
53
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
54 C
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
55 | B---<foo>
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
56 |/
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
57 |
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
58 A
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 Only B and A are visible.
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
61
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
62 This ease the process of getting ride of old changeset. You can just leave them
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
63 in place and move the reference on the new one. You can then propagate those
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
64 change by moving the git-branch on remote host, newer version overwritting the
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
65 older one.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
66
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
67 This approach goes a bit further but still have major drawback:
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
68
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
69
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
70 Because you **overwrite** git-branch you have no conflit resolution. The last
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
71 to spoke win. This make collaboration on multiple changeset difficult because
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
72 you can't merge concurent update on changeset.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
73
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
74 Every overwrite is forced operation where the operator say "Yes I want this to
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
75 replace that. On higly distributed environment user may end with conflicting
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
76 reference with and no proper way to choose.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
77
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
78 Because of this way to visualize a repository, git-branches are a very core
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
79 part of git. This make user interface more complicated and move through history
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
80 more constrainted.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
81
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
82 Finally, even if all older changeset still exist in the repository acces to them
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
83 is still painful.
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
84
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
85
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
86 -----------------------------------------------------
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
87 The Obsolete Marker Concept
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
88 -----------------------------------------------------
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
89
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
90
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
91
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
92
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
93
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
94 As None of the concept was powerful enough to embrace the need to safely rewrite
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
95 history, easily share and collaborate on mutable history we needed another one.
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
96
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
97
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 Basic concept
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
100 -----------------------------------------------------
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
101
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 Every history rewriting operation stores the information that old rewritten
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
104 changesets has newer version available in a set of changeset.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
105
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
106 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
107
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
108
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
109 .. figure:: ./figures/example-1-update.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
110
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
111 *Updating* a changeset
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 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
114
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
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
117 .. figure:: ./figures/example-2-split.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
118
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
119 *Splitting* a changeset in multiple one
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
120
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
121 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
122
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
123
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
124 .. figure:: ./figures/example-3-merge.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
125
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
126 *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
127
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
128 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
129
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
130 .. figure:: ./figures/example-4-reorder.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
131
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
132 *Moving* changeset around
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 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
135 ``([A'] obsolete A), ([B'] obsolete B)``
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
136
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
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
139 .. figure:: ./figures/example-5-delete.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
140
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
141 *Removing* a changeset:
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 One obselete marker ``([] obsolete B)``
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
144
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 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
147 changesets to **1** old changeset.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
148
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
149 Basic Usage
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
150 -----------------------------------------------------
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
151
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
152 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
153 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
154 versioned files but applied to changeset:
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
155
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
156 First: we can display a **coherent view** of the history graph with only a
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
157 single version of your changeset are displayed by the UI.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
158
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
159 Second, because obsolete changeset content are still **available**. You can
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
160
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
161 * **browse** the content of your obsolete commit,
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
162
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
163 * **compare** newer and older version of a changeset,
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
164
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
165 * **restore** content of previously obsolete changeset.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
166
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
167 Finally, obsolete marker can be **exchanged between repositories**. You are able to
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
168 share the result on your history rewriting operation with other and **collaborate
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
169 on mutable part of the history**.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
170
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
171 Conflicting history rewriting operation can be detected and **resolved** as easily
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
172 as conflicting changes on file.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
173
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
174
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
175 Detecting and solving tricky situation
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
176 -----------------------------------------------------
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
177
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
178 History rewriting can lead to complex situation. Obsolete marker introduce a
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
179 simple representation this complex reality. But people using complex workflow
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
180 will one day or another you have to face the intrinsics complexity of some
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
181 situation.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
182
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
183 This section describe possible situations, define precise set of changesets
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
184 involved in such situation and explains how error case can we automatically
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
185 resolved using available information.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
186
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
187
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
188 obsolete changesets
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
189 ````````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
190
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
191 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
192
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
193 With current version of mercurial, this *obsolete* part is stripped from the
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
194 repository before the end of every rewritting 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
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
204 In most case the obsolete set will be fully hidden to both UI and discovery so
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
205 user do not have to care about them unless he wants to audit history rewriting
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
206 operation.
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
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
211 While exploring obsolete marker possibility a bit further you way end up with
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
212 *obsolete* changeset with *non-obsolete* children. There is two common ways to
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
213 achieve this:
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
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
233 Proper warning should be issued when part of the history become unstable. UI
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
234 will be able to use the obsolete marker to automatically suggest resolution to
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
235 the user of even carry them out for him.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
236
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
237
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
238 XXX details automatic resolution for
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
239
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
240 * movement
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 * handling deletion
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
243
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
244 * handling split on multiple head
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
245
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 .. [#] 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
248 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
249
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
250 The two part of the obsolete set
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
251 ``````````````````````````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
252
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
253 The previous section show that it could be two kinds of *obsolete* changeset:
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
254
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
255
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
256 * *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
257
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
258 * *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
259
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
260
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
261 .. figure:: ./figures/error-extinct.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
262
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
263 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
264
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
265 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
266 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
267 `B` is *unstable* as before.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
268
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 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
271 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
272 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
273 in stable version.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
274
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
275
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
276 Conflicting rewriting
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
277 ``````````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
278
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
279 If people start to concurrently edit the same part of the history they will
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
280 likely meet conflicting situation when a changeset have been rewritten in two
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
281 different versions.
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
282
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
283
163
92b073d13f2d more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 161
diff changeset
284 .. figure:: ./figures/error-conflicting.*
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
285
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
286 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
287
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
288 This kind of conflict is easy to detect with obsolete marker because an obsolete
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
289 changeset have more than one new version. It may be seen as the multiple heads
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
290 case Mercurial warn you about on pull. It is resolved the same way by a merge of
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
291 A' and A'' that will keep the same parent than `A'` and `A''` with two obsolete
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
292 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
293
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
294 .. 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
295 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
296
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
297 Allowing multiple new changesets to obsolete a single one allow to distinct a
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
298 splitted changeset from history rewriting conflict.
161
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 Reliable history
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
301 ``````````````````````
161
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
302
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
303 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
304 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
305 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
306 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
307 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
308 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
309
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
310 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
311
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
312 * Public changesets are excluded from the obsolete set (public changeset are
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
313 never hidden or candidate to garbage collection)
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
314
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
315 * *newer* version of public changeset are said **latecomer** and highlighted as
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
316 error case.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
317
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
318
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
319 Solving such error is easy. Because we know what changeset a *latecomer* try to
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
320 rewrite, we can easily compute a smaller changeset containing only the change
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
321 from the old *public* to the new *latecomer*.
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
322
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
323
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
324 .. warning:: add a schema
4e3f25ba5401 More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
325
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
326
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
327 Conclusion
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
328 ----------------
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
329
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
330 Obsolete marker is a powerful concept that allow mercurial to safely handle
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
331 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
332 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
333
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
334 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
335
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 - Very fast history rewriting operations,
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
338
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
339 - auditable and reversible history rewritting process,
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
340
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
341 - clean final history,
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
342
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
343 - 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
344
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
345 - gracefully handle history rewriting conflict,
166
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
346
184
f047cd4f1235 backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 176
diff changeset
347 - 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
348
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
349 .. list-table:: Comparison on solution [#]_
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
350 :header-rows: 1
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
351
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
352 * - Solution
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
353 - Remove changeset locally
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
354 - Works on any point of your history
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
355 - Propagation
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
356 - Collaboration
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
357 - Speed
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
358 - Access to older version
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
359
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
360 * - Strip
8f8a52cd0b9f big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 163
diff changeset
361 - `+`
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 * - Reference
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 - `-`
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 * - Obsolete
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 - `+`
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 .. [#] 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
387 goes to the defended solution.