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:

?. 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
    ◌ ← changeset that does not exist locally but are present in marker history
    ⇠ ← obsolescence marker from that point

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:

Command run:

Expected exchange:

2.1.2. A.1.2 pushing a multiple changeset into a single head

     ◔ B
     |
    ⇠◔ A
     |
     ● O

Marker exist from:

Command run:

Expected exchange:

2.2. A.2 Two heads

     ○ B
  ⇠◔ | A
   |/
   ● O

Marker exist from:

Command run:

Expected exchange:

Expected Exclude:

3. A.3 new branch created

  B' ○⇢ø B
     | |
     \Aø⇠◔ A'
      \|/
       ● O

Marker exist from:

Command run:

Expected exchange:

Expected Exclude:

Extra node:

* hg push will complain about the new head * hg push should complain about unstable history creation

4. B. Deletion Case

4.1. B.1 Pruned changeset atop the pushed set

    ✕ B
    |
    ◔ A
    |
    ● O

Marker exist from:

Command run:

Expected exchange:

4.2. B.2 Pruned changeset on head. nothing pushed

    ✕ A
    |
    ● O

Marker exist from:

Command run:

Expected exchange:

4.3. B.3 Pruned changeset on non-pushed part of the history

  ✕ C
  |
  ○ B
  | ◔ A
  |/
  ● O

Marker exist from:

Command run:

Expected exchange:

Expected Exclude:

4.4. B.4 Pruned changeset on common part of history

  ✕ C
  | ● B
  | |
  | ● A
  |/
  ● O

Marker exist from:

Command run:

Expected exchange:

5. C. Advance Case

5.1. C.1 Multiple pruned changeset atop each other

  ✕ B
  |
  ✕ A
  |
  ● O

Marker exist from:

Command run:

Expected exchange:

5.2. C.2 Pruned changeset on precursors

  B ✕
    |
  A ø⇠◔ A'
    |/
    ● O

Marker exist from:

Command run:

Expected exchange:

5.3. C.3 Pruned changeset on precursors of another pruned one

  B ✕
    |
  A ø⇠✕ A'
    |/
    ● O

Marker exist from:

Command run:

Expected exchange:

6. D. Partial Information Case

From then we have changeset missing from the repo but still referenced in obsolescence marker. This has an impact on the knowledge we have from the graph topology.

6.1. D.1 Pruned changeset based on a missing precursors of something we miss

Marker exist from:

Command run:

Expected exchange:

7. Z. Crazy case

When I'm note very sure about what we should do

=== Z.1 partial push of split===

   D'○⇢ø D
     | | A
   B ○⇢ø⇠◔ C
      \|/
       ● O

Marker exist from:

Command run:

Expected exchange:

Expected exclude: