Size: 2503
Comment:
|
Size: 3447
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 25: | Line 25: |
o ← a changeset, * ← a changeset that exist remotly before the push. x ← obsolete changeset @ ← changeset being pushed |
○ ← a changeset, ● ← a changeset that exist remotly before the push. ✕ ← pruned changeset ø ← obsolete changeset with a precursors ◔ ← changeset being pushed |
Line 38: | Line 39: |
@ A | * O |
⇠◔ A | ● O |
Line 59: | Line 60: |
@ B | @ A | * O |
◔ B | ⇠◔ A | ● O |
Line 80: | Line 81: |
==== A.2 Two heads ==== {{{ o B | @ A |
=== A.2 Two heads === {{{ ○ B ⇠◔ | A |/ ● O }}} Marker exist from: * A Command run: * hg push -r A Expected exchange: * chain from A Expected Exclude: * chain from B == B. Deletion Case == === B.1 Pruned changeset atop the pushed set === {{{ ✕ B | ◔ A | ● O }}} Marker exist from: * B (prune) Command run: * hg push -r A * hg push Expected exchange: * prune marker for B === B.2 Pruned changeset on head. nothing pushed === {{{ ✕ A | ● O }}} Marker exist from: * A (prune) Command run: * hg push -r O * hg push Expected exchange: * prune marker for A === B.3 Pruned changeset on non-pushed part of the history === {{{ ✕ C | ○ B | ◔ A |
Line 86: | Line 160: |
* O }}} Marker exist from: * A Command run: * hg push -r A Expected exchange: * chain from A |
● O }}} Marker exist from: * C (prune) Command run: * hg push -r A * hg push Expected exchange: * ø |
Line 105: | Line 180: |
== B. Deletion Case == ==== B.1 Pruned changeset atop the pushed set ==== {{{ x B | @ A | * O }}} Marker exist from: * B (prune) Command run: * hg push -r A * hg push Expected exchange: * prune marker for B ==== B.2 Pruned changeset on head. nothing pushed ==== {{{ x A | * O |
=== B.4 Pruned changeset on common part of history === {{{ ✕ C | ● B | | | ● A |/ ● O }}} Marker exist from: * C (prune) Command run: * hg push -r B * hg push Expected exchange: * prune for C == C. Advance Case == === C.1 Multiple pruned changeset atop each other === {{{ ✕ B | ✕ A | ● O |
Line 141: | Line 219: |
* B (prune) | |
Line 149: | Line 228: |
* prune marker for A ==== B.3 Pruned changeset on non-pushed part of the history ==== {{{ x C | o B | @ A |/ * O }}} Marker exist from: * C (prune) Command run: * hg push -r A * hg push Expected exchange: * ø Expected Exclude: * chain from B ==== B.4 Pruned changeset on common part of history ==== {{{ x C | * B | | | * A |/ * O }}} Marker exist from: * C (prune) Command run: * hg push -r B * hg push Expected exchange: * prune for C == C. Advance Case == |
* A (prune) * B (prune) === C.2 Pruned changeset on precursors === {{{ B ✕ | A ø⇠◔ A' |/ ● O }}} Marker exist from: * A' succeed to A * B (prune) Command run: * hg push -r A' * hg push Expected exchange: * `A ø⇠o A'` * B (prune) === C.3 Pruned changeset on precursors of another pruned one === {{{ B ✕ | A ø⇠◔ A' |/ ● O }}} Marker exist from: * A' succeed to A * A' (prune * B (prune) Command run: * hg push -r O * hg push Expected exchange: * `A ø⇠o A'` * B (prune) |
List of case and expected behavior when exchanging obsolesence marker
This page is intended for developer
1. Definition
1. You want all markers **relevant** changeset common between source and destination to be exchanged 2. Marker **relevant to a changeset** are:
- marker that use this changeset as successors
- prune marker of direct children on this changeset.
- recursive application of the two rules on successors store in those marker
?. What shall we do on partial split push…
○ ← a changeset, ● ← a changeset that exist remotly before the push. ✕ ← pruned changeset ø ← obsolete changeset with a precursors ◔ ← changeset being pushed
2. A. Simple Case
2.1. A.1 pushing a single heads
2.1.1. A.1.1 pushing a single head
⇠◔ A | ● O
Marker exist from:
- A
Command run:
- hg push -r A
- hg push
Expected exchange:
- chain from A
2.1.2. A.1.2 pushing a multiple changeset into a single head
◔ B | ⇠◔ A | ● O
Marker exist from:
- A
Command run:
- hg push -r B
- hg push
Expected exchange:
- chain from A
2.2. A.2 Two heads
○ B ⇠◔ | A |/ ● O
Marker exist from:
- A
Command run:
- hg push -r A
Expected exchange:
- chain from A
Expected Exclude:
- chain from B
3. B. Deletion Case
3.1. B.1 Pruned changeset atop the pushed set
✕ B | ◔ A | ● O
Marker exist from:
- B (prune)
Command run:
- hg push -r A
- hg push
Expected exchange:
- prune marker for B
3.2. B.2 Pruned changeset on head. nothing pushed
✕ A | ● O
Marker exist from:
- A (prune)
Command run:
- hg push -r O
- hg push
Expected exchange:
- prune marker for A
3.3. B.3 Pruned changeset on non-pushed part of the history
✕ C | ○ B | ◔ A |/ ● O
Marker exist from:
- C (prune)
Command run:
- hg push -r A
- hg push
Expected exchange:
- ø
Expected Exclude:
- chain from B
3.4. B.4 Pruned changeset on common part of history
✕ C | ● B | | | ● A |/ ● O
Marker exist from:
- C (prune)
Command run:
- hg push -r B
- hg push
Expected exchange:
- prune for C
4. C. Advance Case
4.1. C.1 Multiple pruned changeset atop each other
✕ B | ✕ A | ● O
Marker exist from:
- A (prune)
- B (prune)
Command run:
- hg push -r O
- hg push
Expected exchange:
- A (prune)
- B (prune)
4.2. C.2 Pruned changeset on precursors
B ✕ | A ø⇠◔ A' |/ ● O
Marker exist from:
- A' succeed to A
- B (prune)
Command run:
- hg push -r A'
- hg push
Expected exchange:
A ø⇠o A'
- B (prune)
4.3. C.3 Pruned changeset on precursors of another pruned one
B ✕ | A ø⇠◔ A' |/ ● O
Marker exist from:
- A' succeed to A
- A' (prune
- B (prune)
Command run:
- hg push -r O
- hg push
Expected exchange:
A ø⇠o A'
- B (prune)