Differences between revisions 1 and 2
Revision 1 as of 2013-11-19 20:05:11
Size: 2642
Editor: Sean Farley
Comment: init: add first draft from http://titanpad.com/mercurial29-obsstore
Revision 2 as of 2013-11-19 20:07:29
Size: 2666
Editor: Sean Farley
Comment: figure 2: add nodesep=1.0 to obsolete arrows
Deletions are marked like this. Additions are marked like this.
Line 42: Line 42:
   graph [nodesep=1.0]

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.

Contents

  1. Cycles

1. Cycles

o A''
|                 o A'
|        o  A     |
\        |        /
 \       |       /
  \      |      /
   \-----|-----/

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'.

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

  o C ==x
  |
  o B
  |
  o A
  • That is, if C is already on the server in draft phase, we can't push the kill marker for C with boxpush as it's currently defined. Proposal v1: 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):
  • markers that apply to changesets being exchanged
  • kill markers for ctx in common post-exchange Attempt two:

    We push [$NODE:↓:killed(heads(descendents($NODE)))]

  • You can't handle a marker appearing after a push. That is

        α'       α
  o A'' == o A' == o A

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