Note:

This page is primarily intended for developers of Mercurial.

2.9 Sprint Obsolete Markers Notes

Notes from the 2.9 development sprint pertaining to obsolete markers.

1. Cycles

A'' and A' both mark A obsolete, so you have a divergence. If Alice and Bob handle that case separately, Alice may pick A'' (by adding an obsolete marker for A'' -> A') and Bob may pick A' (by adding a marker for A' -> A''), thus introducing a direct cycle between A'' and A'.

2. Exchange

Possible solutions for exchange, given we know the set of markers that should be on the destination:

Solution

sufficient

partial

hash tree

boxed

almost

rsync

time bucket

no?

sufficient = does the solution transmit everything MUST send - that is, the meta-history on both sides might mismatch, but the changeset history is correct on both sides

partial = can the solution transmit less than all the markers that have ever existed intelligently

box is "almost" sufficient for two reasons:

  1. We can't push isolated kills

3. Proposed Exchange Algorithms

  1. Push will inspect incoming draft-phase heads from the server. If any are dead locally, we push their kill marker to the server. We would exchange (pull or push):
    1. markers that apply to changesets being exchanged
    2. kill markers for ctx in common post-exchange
  2. We push [$NODE:↓:killed(heads(descendents($NODE)))]

2.9sprintObsoleteNotes (last edited 2013-11-20 17:57:44 by Sean Farley)