Comments
Patch
@@ -168,13 +168,22 @@ def _readmarkers(data):
'short, %d bytes expected, got %d')
% (mdsize, len(metadata)))
off += mdsize
meta = decodemeta(metadata)
date = util.parsedate(meta.pop('date', '0 0'))
+ parents = None
+ if 'p2' in meta:
+ parents = (meta.pop('p1', None), meta.pop('p2', None))
+ elif 'p1' in meta:
+ parents = (meta.pop('p1', None),)
+ elif 'p0' in meta:
+ parents = ()
+ if parents is not None:
+ parents = tuple(node.bin(p) for p in parents)
metadata = encodemeta(meta)
- yield (pre, sucs, flags, metadata, date, None)
+ yield (pre, sucs, flags, metadata, date, parents)
def encodemeta(meta):
"""Return encoded metadata string to string mapping.
Assume no ':' in key and no '\0' in both key and value."""
@@ -359,10 +368,16 @@ def _encodemarkers(markers, addheader=Fa
def _encodeonemarker(marker):
pre, sucs, flags, metadata, date, parents = marker
metadata = decodemeta(metadata)
metadata['date'] = '%d %i' % date
+ if parents is not None:
+ if not parents:
+ # marks we explicitly recorded no parents.
+ metadata['p0'] = ''
+ for i, p in enumerate(parents, 1):
+ metadata['p%i' % i] = node.hex(p)
metadata = encodemeta(metadata)
nbsuc = len(sucs)
format = _fmfixed + (_fmnode * nbsuc)
data = [nbsuc, len(metadata), flags, pre]
data.extend(sucs)