comparison docs/obs-implementation.rst @ 357:b398e9c2dbd1 stable

doc: English proofreading
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Wed, 11 Jul 2012 13:59:06 -0400
parents 5eecfda0a5c7
children 9a17c48c2099
comparison
equal deleted inserted replaced
345:62de989b2a02 357:b398e9c2dbd1
9 9
10 10
11 What data should be contained in a Marker ? 11 What data should be contained in a Marker ?
12 ```````````````````````````````````````````````````` 12 ````````````````````````````````````````````````````
13 13
14 There is two critical data that **must** be stored in an obsolete Marker. 14 There are two critical pieces of information that **must** be stored
15 in an obsolete Marker.
15 16
16 :object: 17 :object:
17 the old obsoleted changeset 18 the old obsoleted changeset
18 19
19 :replacements: 20 :replacements:
21 22
22 Everybody agreed on this point. 23 Everybody agreed on this point.
23 24
24 --- 25 ---
25 26
26 This is probably a good idea to have an unique Identifier, for UI, transfert and 27 This is probably a good idea to have an unique Identifier, for UI, transfer and
27 access. 28 access.
28 29
29 :id: same as changeset but for marker. 30 :id: same as changeset but for marker.
30 31
31 The field below will depends of the way we exchange obsolete marker betwenn 32 The field below will depend on the way we exchange obsolete marker between
32 changeset. 33 changesets.
33 34
34 --- 35 ---
35 36
36 Having audit data will be very usefull. When it get messy you need all the 37 Having audit data will be very useful. When it gets messy you need all the
37 information you can to understand the situation. 38 information available to understand the situation.
38 39
39 I have the felling that we are versionning history. Therefor we will probably 40 I have the feeling that we are versioning history. Therefor we will probably
40 need the same kind of information than when versionning Files. 41 need the same kind of information than when versioning Files.
41 42
42 :date: date of the marker creation 43 :date: date of the marker creation
43 44
44 :user: ui.username 45 :user: ui.username
45 46
46 To go further: 47 To go further:
47 48
48 :description: "Optional reason for the rewrite (generated of added by the user)" 49 :description: "Optional reason for the rewrite (generated by the user)"
49 50
50 :tool: the automated too that made this 51 :tool: the automated tool that made this
51 52
52 :operation: Kind of rewritting operation that created the marker (delete, 53 :operation: Kind of rewritting operation that created the marker (delete,
53 update, split, fold, reordering) To help conflict resolution. 54 update, split, fold, reordering), to help conflict resolution.
54 55
55 Matt see this a "too complicated". I'll wait for him to meet a very hairy 56 Matt said this is "too complicated". I'll wait for him to meet a very hairy
56 situation to agree that they are needed. 57 situation to agree that they are needed.
57 58
58 Leaving the door open to any addition data is an option too. 59 Leaving the door open to any addition data is an option too.
59 60
60 How shall we store Marker on disk 61 How shall we store Marker on disk
93 94
94 95
95 Version with Metadata proposal 96 Version with Metadata proposal
96 ............................... 97 ...............................
97 98
98 An extra files is used to old metadata (date, user, etc) `.hg/store/obs-extra`:. The format of this 99 An extra files is used to old metadata (date, user, etc) `.hg/store/obs-extra`:.
99 field is undefined yet. This will add the following field at the end of a marker 100
101 The format of this field is undefined yet. This will add the following
102 field at the end of a marker
100 103
101 * offset of the metadata in obs-extra (8-Bytes integer) 104 * offset of the metadata in obs-extra (8-Bytes integer)
102 105
103 106
104 How shall we exchange Marker over the Wire ? 107 How shall we exchange Marker over the Wire ?
122 125
123 storing old changeset 126 storing old changeset
124 `````````````````````` 127 ``````````````````````
125 128
126 The new general delta format allows a very efficient storage of two very similar 129 The new general delta format allows a very efficient storage of two very similar
127 changesets. Storing obsolete childrens using general delta takes no more place 130 changesets. Storing obsolete children using general delta takes no more place
128 than storing the obsolete diff. Reverted file will even we reused. The whole 131 than storing the obsolete diff. Reverted file will even we reused. The whole
129 operation will take much less space the strip backup. 132 operation will take much less space the strip backup.
130 133
131 134
132 Abstraction from history rewriting UI 135 Abstraction from history rewriting UI
133 ``````````````````````````````````````````` 136 ```````````````````````````````````````````
134 137
135 How Mercurial handle obsolete marker is independent from who decide to create 138 How Mercurial handles obsolete marker is independent from what decides
136 them and what actual operation solve error case. Any of the existing history 139 to create them and what actual operation solves the error case. Any of
137 rewriting UI (rebase, mq, histedit) can lay obsolete marker and resolve 140 the existing history rewriting UI (rebase, mq, histedit) can lay
138 situation created by other. To go further a hook system of obsolete marker 141 obsolete markers and resolve situation created by others. To go
139 creation would allow each mechanism to collaborate with other though a standard 142 further, a hook system of obsolete marker creation would allow each
140 and central mechanism. 143 mechanism to collaborate with other though a standard and central
144 mechanism.
141 145
142 146
143 Obsolete marker storage 147 Obsolete marker storage
144 ``````````````````````````` 148 ```````````````````````````
145 149
146 Obsolete marker will most likely be stored outside standard history. They are 150 The Obsolete marker will most likely be stored outside standard
147 multiple reasons for that: 151 history. They are multiple reasons for this:
148 152
149 153 First, obsolete markers are really perpendicular to standard history
150 First, obsolete markers are really perpendicular to standard history there is not 154 there is no strong reason to include it here other than convenience.
151 strong reason to include it here other than convenience.
152 155
153 Second, storing obsolete marker inside standard history means: 156 Second, storing obsolete marker inside standard history means:
154
155 157
156 * A changeset must be created every time an obsolete relation is added. Very 158 * A changeset must be created every time an obsolete relation is added. Very
157 inconvenient for delete operation. 159 inconvenient for delete operation.
158 160
159 * Obsolete marker must be forged at the creation of the new changeset. This 161 * Obsolete marker must be forged at the creation of the new changeset. This
160 is very inconvenient for split operation. And in general it become 162 is very inconvenient for split operation. And in general it becomes
161 complicated to fix history afterward in particular when working with older 163 complicated to fix history afterward in particular when working with older
162 client. 164 clients.
163 165
164 Storing obsolete marker outside history have several pro: 166 Storing obsolete marker outside history have several pros:
165 167
166 * It ease Exchange of obsolete marker without unnecessary obsolete changeset content 168 * It eases Exchange of obsolete markers without unnecessary obsolete
167 169 changeset contents.
168 * It allow tuning the actual storage and protocol exchange while maintaining 170
169 compatibility with older client through the wire (as we do the repository 171 * It allows tuning the actual storage and protocol exchange while maintaining
170 format) 172 compatibility with older clients through the wire (as we do the repository
171 173 format).
172 * ease the exchange of obsolete related information during discovery to exchange 174
173 obsolete changeset relevant to conflict resolution. Exchanging such 175 * It eases the exchange of obsolete related information during
174 information deserve a dedicated protocol. 176 discovery to exchange obsolete changeset relevant to conflict
177 resolution. Exchanging such information deserves a dedicated
178 protocol.
175 179
176 Persistent 180 Persistent
177 ``````````````````````` 181 ```````````````````````
178 182
179 *Extinct* changeset and obsolete marker will most likely be garbage collected as 183 *Extinct* changeset and obsolete marker will most likely be garbage collected as
180 some point. However, archive server may decide to keep them forever in order to 184 some point. However, archive server may decide to keep them forever in order to
181 keep a fully auditable history in it's finest conception. 185 keep a fully auditable history in its finest conception.
182 186
183 187
184 Current status 188 Current status
185 ----------------------------------------------------- 189 -----------------------------------------------------
186 190
195 199
196 * compute obsolete, unstable, extinct and suspended set. 200 * compute obsolete, unstable, extinct and suspended set.
197 201
198 * hidden extinct changesets for UI. 202 * hidden extinct changesets for UI.
199 203
200 * Use secret phase to remove from discovery obsolete and unstable changeset (to 204 * Use secret phase to remove from discovery obsolete and unstable changesets (to
201 be improved soon) 205 be improved soon)
202 206
203 * alter rebase to use obsolete marker instead of stripping. 207 * alter rebase to use obsolete markers instead of stripping.
204 208
205 * Have an experimental mq-like extension to rewrite history (more on that later) 209 * Have an experimental mq-like extension to rewrite history (more on that later)
206 210
207 * Have an extension to update and mq repository according evolution of standard (more on that later) 211 * Have an extension to update and mq repository according evolution of
208 212 standard (more on that later)
213