Differences between revisions 5 and 9 (spanning 4 versions)
Revision 5 as of 2014-01-24 23:46:05
Size: 3358
Comment:
Revision 9 as of 2014-01-25 01:21:30
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 ← pruned changeset
     ← a changeset,
     ← a changeset that exist remotly before the push.
     ← pruned changeset
Line 29: Line 29:
    @ ← changeset being pushed      ← changeset being pushed
Line 39: Line 39:
    @ A
    |
    * O
    ⇠◔ A
  |
     ● O
Line 60: Line 60:
    @ B
    |
    @ A
    |
    * O
     ◔ B
  |
    ⇠◔ A
  |
     ● O
Line 84: Line 84:
  o B
  | @ A
     ○ 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 87: 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 106: 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 142: Line 219:
 * B (prune)
Line 150: 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 ==

=== C.1 Multiple pruned changeset atop each other ===

{{{
  x B
  |
  x A
  |
  * O
}}}

Marker exist from:
Line 221: Line 231:
Command run:

 * hg push -r O
 * hg push

Expected exchange:

 * A (prune)
 * B (prune)
Line 234: Line 234:
  B x
    |
  A ø⇠@ A'
  B
    |
  A ø⇠ A'
Line 238: Line 238:
    * O      O
Line 259: Line 259:
  B x
    |
  A ø⇠x A'
  B
    |
  A ø⇠ A'
Line 263: Line 263:
    * O      O

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)

5. D. Partial Information Case

CEDObsmarkersExchange (last edited 2018-03-04 20:25:36 by BorisFeld)