mercurial/obsolete.py
changeset 22254 b8a0e8176693
parent 22253 4cdc3c333806
child 22255 adb3798dce49
equal deleted inserted replaced
22253:4cdc3c333806 22254:b8a0e8176693
   171         try:
   171         try:
   172             date = util.parsedate(decodemeta(metadata).pop('date', '0 0'))
   172             date = util.parsedate(decodemeta(metadata).pop('date', '0 0'))
   173         except util.Abort:
   173         except util.Abort:
   174             date = (0., 0)
   174             date = (0., 0)
   175 
   175 
   176         yield (pre, sucs, flags, metadata, date)
   176         yield (pre, sucs, flags, metadata, date, None)
   177 
   177 
   178 def encodemeta(meta):
   178 def encodemeta(meta):
   179     """Return encoded metadata string to string mapping.
   179     """Return encoded metadata string to string mapping.
   180 
   180 
   181     Assume no ':' in key and no '\0' in both key and value."""
   181     Assume no ':' in key and no '\0' in both key and value."""
   240     Markers can be accessed with two mappings:
   240     Markers can be accessed with two mappings:
   241     - precursors[x] -> set(markers on precursors edges of x)
   241     - precursors[x] -> set(markers on precursors edges of x)
   242     - successors[x] -> set(markers on successors edges of x)
   242     - successors[x] -> set(markers on successors edges of x)
   243     """
   243     """
   244 
   244 
   245     fields = ('prec', 'succs', 'flag', 'meta', 'date')
   245     fields = ('prec', 'succs', 'flag', 'meta', 'date', 'parents')
   246     # prec:   nodeid, precursor changesets
   246     # prec:    nodeid, precursor changesets
   247     # succs: tuple of nodeid, successor changesets (0-N length)
   247     # succs:   tuple of nodeid, successor changesets (0-N length)
   248     # flag:   integer, flag field carrying modifier for the markers (see doc)
   248     # flag:    integer, flag field carrying modifier for the markers (see doc)
   249     # meta:   binary blob, encoded metadata dictionary
   249     # meta:    binary blob, encoded metadata dictionary
   250     # date:   (float, int) tuple, date of marker creation
   250     # date:    (float, int) tuple, date of marker creation
       
   251     # parents: (tuple of nodeid) or None, parents of precursors
       
   252     #          None is used when no data has been recorded
   251 
   253 
   252     def __init__(self, sopener):
   254     def __init__(self, sopener):
   253         # caches for various obsolescence related cache
   255         # caches for various obsolescence related cache
   254         self.caches = {}
   256         self.caches = {}
   255         self._all = []
   257         self._all = []
   298             if len(succ) != 20:
   300             if len(succ) != 20:
   299                 raise ValueError(succ)
   301                 raise ValueError(succ)
   300         if prec in succs:
   302         if prec in succs:
   301             raise ValueError(_('in-marker cycle with %s') % node.hex(prec))
   303             raise ValueError(_('in-marker cycle with %s') % node.hex(prec))
   302         marker = (str(prec), tuple(succs), int(flag), encodemeta(metadata),
   304         marker = (str(prec), tuple(succs), int(flag), encodemeta(metadata),
   303                   date)
   305                   date, None)
   304         return bool(self.add(transaction, [marker]))
   306         return bool(self.add(transaction, [marker]))
   305 
   307 
   306     def add(self, transaction, markers):
   308     def add(self, transaction, markers):
   307         """Add new markers to the store
   309         """Add new markers to the store
   308 
   310 
   362     for marker in markers:
   364     for marker in markers:
   363         yield _encodeonemarker(marker)
   365         yield _encodeonemarker(marker)
   364 
   366 
   365 
   367 
   366 def _encodeonemarker(marker):
   368 def _encodeonemarker(marker):
   367     pre, sucs, flags, metadata, date = marker
   369     pre, sucs, flags, metadata, date, parents = marker
   368     metadata = decodemeta(metadata)
   370     metadata = decodemeta(metadata)
   369     metadata['date'] = '%d %i' % date
   371     metadata['date'] = '%d %i' % date
   370     metadata = encodemeta(metadata)
   372     metadata = encodemeta(metadata)
   371     nbsuc = len(sucs)
   373     nbsuc = len(sucs)
   372     format = _fmfixed + (_fmnode * nbsuc)
   374     format = _fmfixed + (_fmnode * nbsuc)