Comments
Patch
@@ -171,13 +171,32 @@ def _readmarkers(data):
meta = decodemeta(metadata)
try:
date = util.parsedate(decodemeta(metadata).pop('date', '0 0'))
except util.Abort:
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:
+ try:
+ parents = tuple(node.bin(p) for p in parents)
+ # if parent conent is not nodeid drop the data
+ for p in parents:
+ if len(p) != 20:
+ parents = None
+ break
+ except TypeError:
+ # if content cannot be translated to nodeid drop the data.
+ parents = None
+
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."""
@@ -362,10 +381,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)