mercurial/obsolete.py
changeset 22258 cf414981978a
parent 22257 4bc96685a40c
child 22259 2e6f03a193f9
equal deleted inserted replaced
22257:4bc96685a40c 22258:cf414981978a
   171         meta = decodemeta(metadata)
   171         meta = decodemeta(metadata)
   172         try:
   172         try:
   173             date = util.parsedate(decodemeta(metadata).pop('date', '0 0'))
   173             date = util.parsedate(decodemeta(metadata).pop('date', '0 0'))
   174         except util.Abort:
   174         except util.Abort:
   175             date = (0., 0)
   175             date = (0., 0)
       
   176         parents = None
       
   177         if 'p2' in meta:
       
   178             parents = (meta.pop('p1', None), meta.pop('p2', None))
       
   179         elif 'p1' in meta:
       
   180             parents = (meta.pop('p1', None),)
       
   181         elif 'p0' in meta:
       
   182             parents = ()
       
   183         if parents is not None:
       
   184             try:
       
   185                 parents = tuple(node.bin(p) for p in parents)
       
   186                 # if parent content is not a nodeid, drop the data
       
   187                 for p in parents:
       
   188                     if len(p) != 20:
       
   189                         parents = None
       
   190                         break
       
   191             except TypeError:
       
   192                 # if content cannot be translated to nodeid drop the data.
       
   193                 parents = None
       
   194 
   176         metadata = encodemeta(meta)
   195         metadata = encodemeta(meta)
   177 
   196 
   178         yield (pre, sucs, flags, metadata, date, None)
   197         yield (pre, sucs, flags, metadata, date, parents)
   179 
   198 
   180 def encodemeta(meta):
   199 def encodemeta(meta):
   181     """Return encoded metadata string to string mapping.
   200     """Return encoded metadata string to string mapping.
   182 
   201 
   183     Assume no ':' in key and no '\0' in both key and value."""
   202     Assume no ':' in key and no '\0' in both key and value."""
   369 
   388 
   370 def _encodeonemarker(marker):
   389 def _encodeonemarker(marker):
   371     pre, sucs, flags, metadata, date, parents = marker
   390     pre, sucs, flags, metadata, date, parents = marker
   372     metadata = decodemeta(metadata)
   391     metadata = decodemeta(metadata)
   373     metadata['date'] = '%d %i' % date
   392     metadata['date'] = '%d %i' % date
       
   393     if parents is not None:
       
   394         if not parents:
       
   395             # mark that we explicitly recorded no parents
       
   396             metadata['p0'] = ''
       
   397         for i, p in enumerate(parents, 1):
       
   398             metadata['p%i' % i] = node.hex(p)
   374     metadata = encodemeta(metadata)
   399     metadata = encodemeta(metadata)
   375     nbsuc = len(sucs)
   400     nbsuc = len(sucs)
   376     format = _fmfixed + (_fmnode * nbsuc)
   401     format = _fmfixed + (_fmnode * nbsuc)
   377     data = [nbsuc, len(metadata), flags, pre]
   402     data = [nbsuc, len(metadata), flags, pre]
   378     data.extend(sucs)
   403     data.extend(sucs)