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…

    o ← a changeset,
    * ← a changeset that exist remotly before the push.
    x ← 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:

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

  o B
  | @ A
  |/
  * O

Marker exist from:

Command run:

Expected exchange:

Expected Exclude:

3. B. Deletion Case

3.1. B.1 Pruned changeset atop the pushed set

    x B
    |
    @ A
    |
    * O

Marker exist from:

Command run:

Expected exchange:

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

    x A
    |
    * O

Marker exist from:

Command run:

Expected exchange:

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

  x C
  |
  o B
  | @ A
  |/
  * O

Marker exist from:

Command run:

Expected exchange:

Expected Exclude:

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

  x C
  | * B
  | |
  | * A
  |/
  * O

Marker exist from:

Command run:

Expected exchange:

4. C. Advance Case

4.1. C.1 Multiple pruned changeset atop each other

  x B
  |
  x A
  |
  * O

Marker exist from:

Command run:

Expected exchange:

4.2. C.2 Pruned changeset on precursors

  B x
    |
  A ø⇠o A'
    |/
    * O

Marker exist from:

Command run:

Expected exchange:

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

  B x
    |
  A ø⇠x A'
    |/
    * O

Marker exist from:

Command run:

Expected exchange:

5. D. Partial Information Case