annotate docs/troubles-handling.rst @ 5491:1a238a9313da

unstable-list: some details about phase divergence
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 26 Aug 2020 12:39:47 +0200
parents 8f9dd2414416
children 76963e896ea6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
1 .. Copyright 2020 Sushil Khanchi <sushilkhanchi97@gmail.com>
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
2 .. Octobus SAS <contact@octobus.net>
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
3
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
4 -----------------------------------------------------------
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
5 Possible troubles in rewriting history and their resolution
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
6 -----------------------------------------------------------
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
7
5483
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
8 Rewriting history, and especially rewriting draft history that have been
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
9 exchanged can lead to "unstable" situation.
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
10
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
11 This document is intended for developer of the changeset evolution concept. It
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
12 cover through the technical aspects of each "instability" a changeset can get
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
13 into. A aims at building an exhaustive list of each cases and sub-cases and the
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
14 status of automatic resolution for these cases.
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
15
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
16 Public changeset are part of the permanent history and are never considered
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
17 unstable.
e82d336bf31e unstable-list: add an introduction text
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5482
diff changeset
18
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
19 Orphan
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
20 #########
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
21
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
22 Basics
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23 ******
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
24
5484
e3302ad5ad77 unstable-list: add the basic about orphan changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5483
diff changeset
25 A changeset is orphan when there is at least one obsolete ancestor.
e3302ad5ad77 unstable-list: add the basic about orphan changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5483
diff changeset
26
e3302ad5ad77 unstable-list: add the basic about orphan changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5483
diff changeset
27 As a resolution, we need to find a new appropriate parents for the
e3302ad5ad77 unstable-list: add the basic about orphan changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5483
diff changeset
28 changeset and rebase the orphan there.
e3302ad5ad77 unstable-list: add the basic about orphan changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5483
diff changeset
29
e3302ad5ad77 unstable-list: add the basic about orphan changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5483
diff changeset
30 If the parents of an orphan changeset are orphan themself, they will have to be
e3302ad5ad77 unstable-list: add the basic about orphan changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5483
diff changeset
31 "stabilised" fist.
e3302ad5ad77 unstable-list: add the basic about orphan changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5483
diff changeset
32
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
33 Cause of trouble
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
34 ****************
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
35
5485
457d8003e840 unstable-list: add information about when/why orphan appears
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5484
diff changeset
36 Orphan can appears because the use locally rewrite changeset with descendants.
457d8003e840 unstable-list: add information about when/why orphan appears
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5484
diff changeset
37 In this case the orphan are created when the command run.
457d8003e840 unstable-list: add information about when/why orphan appears
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5484
diff changeset
38
457d8003e840 unstable-list: add information about when/why orphan appears
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5484
diff changeset
39 Orphan can also happens when the users created new changeset on draft that got
457d8003e840 unstable-list: add information about when/why orphan appears
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5484
diff changeset
40 rewritten in another repository. The orphan are then "discovered" when the
457d8003e840 unstable-list: add information about when/why orphan appears
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5484
diff changeset
41 obsolescence information of the ancestors is pulled in the local repository.
457d8003e840 unstable-list: add information about when/why orphan appears
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5484
diff changeset
42
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
43 Source of Complexity
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
44 ********************
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
45
5486
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
46 There can be different situations we need to take care of when dealing with
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
47 resolution of an orphan changeset, like:
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
48
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
49 * parents might not be obsolete (yet) and orphan themself. They will need to be
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
50 resolved first.
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
51 * obsolete parent has conflicting rewrites (content-divergence), so there might
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
52 not be an obvious "good spot" to rebase the changeset too.
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
53 * obsolete parent could have been prune, so it has not direct successors,
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
54 * obsolete parent was split in multiple changesets. This comes with multiple
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
55 variants:
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
56 * successors could be linear of spread accross multiple branches,
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
57 * successors could have been reordered after the initial split,
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
58 * Some of the successors could have been pruned.
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
59 * the orphan changeset can be a merge and orphan may come any numbers of parents
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
60 * rebasing might lead to conflict.
381df06460e8 unstable-list: add list the source of complexity during resolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5485
diff changeset
61
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
62 Details of Sub cases
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
63 ********************
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
64
5487
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
65 O-A: Linear changeset (one parent)
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
66 ==================================
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
67
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
68 O-A1: parent has a single successors
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
69 ------------------------------------
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
70
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
71
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
72 Stabilisation Strategy
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
73 """"""""""""""""""""""
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
74
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
75 Solution is Clear.
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
76
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
77 Relocate the orphan changeset onto the single successor of obsolete parent.
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
78
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
79 Current Support Level
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
80 """""""""""""""""""""
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
81
7c543787d5c6 unstable-list: add a simple entry for the simplest orphan case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5486
diff changeset
82 Good: current implementation is expected to perform the planed stabilisation.
5488
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
83
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
84 O-A2: parent is pruned (no successors)
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
85 --------------------------------------
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
86
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
87
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
88 Stabilisation Strategy
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
89 """"""""""""""""""""""
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
90
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
91 find nearest "not-pruned" ancestor and treat it (or its successor, if apply) as
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
92 a resolution parent. (re-run Orphan resolution starting from these parent).
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
93
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
94 XXX what about if they are multiple heads to that set of "not-pruned" ancestor?
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
95 Especially when they are more then 2 ?
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
96
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
97 Current Support Level
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
98 """""""""""""""""""""
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
99
9920e8b4756d unstable-list: add a entry about pruned parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5487
diff changeset
100 Good support if there they are only one head to the set
5489
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
101
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
102 O-A3: parent has multiple successors sets
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
103 -----------------------------------------
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
104
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
105 Stabilisation Strategy
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
106 """"""""""""""""""""""
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
107
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
108 Current Support Level
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
109 """""""""""""""""""""
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
110
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
111 O-A4: parent is split into multiple successors
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
112 ----------------------------------------------
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
113
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
114 O-A4.1: parent are all one the same topological branch
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
115 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
116
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
117 Stabilisation Strategy
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
118 """"""""""""""""""""""
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
119 pick highest one as resolution parent if all the succs are in a single topo branch
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
120
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
121 Current Support Level
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
122 """""""""""""""""""""
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
123
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
124 O-A4.2: parent is split into multiple successors
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
125 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
126
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
127 In this case, the destination can be ambiguous
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
128
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
129 Stabilisation Strategy
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
130 """"""""""""""""""""""
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
131
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
132 prompt user to choose one
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
133
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
134 (could we do better in some case?)
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
135
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
136 Current Support Level
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
137 """""""""""""""""""""
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
138
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
139
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
140 Stabilisation Strategy
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
141 """"""""""""""""""""""
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
142 , otherwise prompt user to choose one
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
143
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
144
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
145
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
146 Current Support Level
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
147 """""""""""""""""""""
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
148
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
149 O-M: Parent are Merge (multiple parent)
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
150 =======================================
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
151
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
152 O-M1: Only one parent is obsolete
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
153 ---------------------------------
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
154
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
155 XXX Simple case are probably as good as any `O-A` case. However special case are
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
156 probably ignored right now (eg: successors of the obsolete parent is linear with
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
157 the other parent).
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
158
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
159 O-M2: both parent are obsolete
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
160 ------------------------------
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
161
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
162 XXX currently we evolve one after the other.
8b7036384f77 unstable-list: more entry for orphan SPLIT ME
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5488
diff changeset
163
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
164 Phase-Divergence
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
165 ##################
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
166
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
167 Basics
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
168 ******
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
169
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
170 Cause of trouble
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
171 ****************
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
172
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
173 Source of Complexity
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
174 ********************
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
175
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
176 Details of Sub cases
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
177 ********************
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
178
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
179 Content-Divergence
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
180 ##################
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
181
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
182 Basics
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
183 ******
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
184
5490
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
185
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
186 Independent rewrites of same changeset leads to content-divergence. So an
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
187 obsolete changeset have multiple "sets" of successors. And the content-divergent
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
188 changeset have some predecessors in common without the situation being the
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
189 result of a split.
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
190
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
191 To stabilise the situation, we need to "merge" the change introduced in each
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
192 side of the divergence and create a new changeset, that will superceed both the
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
193 of unstable one. The merged information can we both about file content and
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
194 metadata (author, parent, etc).
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
195
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
196 In practice there are a lot of corner case where this is "not that simple".
8f9dd2414416 unstable-list: add basic description of content divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5489
diff changeset
197
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
198 Cause of trouble
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
199 ****************
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
200
5491
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
201 XXX need details about local creation and remote creation. (revealed at pull
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
202 time).
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
203
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
204 Source of Complexity
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
205 ********************
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
206
5491
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
207
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
208 Before we perform a 3-way merge between the divergent changesets and common
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
209 predecessor as base, there are some situations we need to take care of, like:
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
210
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
211 * if divergent changesets moved, check which side moved in which direction,
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
212 and proceed accordingly
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
213 * they moved on different unrelated branches
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
214 * divergent changesets is orphan
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
215 * one side of divergence is in public phase
1a238a9313da unstable-list: some details about phase divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5490
diff changeset
216
5482
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
217 Details of Sub cases
3435822cd758 doc: add the bases of a developer doc for instability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
218 ********************