Mercurial > public > mercurial-scm > hg-stable
diff mercurial/phases.py @ 34326:5779d096a696
phases: move binary encoding into a reusable function
We want to use binary phases for pushing and pulling. We extract the encoding
function out of the bundle2 module first.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Tue, 19 Sep 2017 22:01:31 +0200 |
parents | 57a017f79e96 |
children | 12c42bcd4133 |
line wrap: on
line diff
--- a/mercurial/phases.py Tue Sep 19 22:08:09 2017 +0200 +++ b/mercurial/phases.py Tue Sep 19 22:01:31 2017 +0200 @@ -103,6 +103,7 @@ from __future__ import absolute_import import errno +import struct from .i18n import _ from .node import ( @@ -119,6 +120,8 @@ util, ) +_fphasesentry = struct.Struct('>i20s') + allphases = public, draft, secret = range(3) trackedphases = allphases[1:] phasenames = ['public', 'draft', 'secret'] @@ -154,6 +157,18 @@ dirty = True return roots, dirty +def binaryencode(phasemapping): + """encode a 'phase -> nodes' mapping into a binary stream + + Since phases are integer the mapping is actually a python list: + [[PUBLIC_HEADS], [DRAFTS_HEADS], [SECRET_HEADS]] + """ + binarydata = [] + for phase, nodes in enumerate(phasemapping): + for head in nodes: + binarydata.append(_fphasesentry.pack(phase, head)) + return ''.join(binarydata) + def _trackphasechange(data, rev, old, new): """add a phase move the <data> dictionnary