515 # meta: binary blob, encoded metadata dictionary |
515 # meta: binary blob, encoded metadata dictionary |
516 # date: (float, int) tuple, date of marker creation |
516 # date: (float, int) tuple, date of marker creation |
517 # parents: (tuple of nodeid) or None, parents of precursors |
517 # parents: (tuple of nodeid) or None, parents of precursors |
518 # None is used when no data has been recorded |
518 # None is used when no data has been recorded |
519 |
519 |
520 def __init__(self, sopener, defaultformat=_fm1version, readonly=False): |
520 def __init__(self, svfs, defaultformat=_fm1version, readonly=False): |
521 # caches for various obsolescence related cache |
521 # caches for various obsolescence related cache |
522 self.caches = {} |
522 self.caches = {} |
523 self._all = [] |
523 self._all = [] |
524 self.sopener = sopener |
524 self.svfs = svfs |
525 data = sopener.tryread('obsstore') |
525 data = svfs.tryread('obsstore') |
526 self._version = defaultformat |
526 self._version = defaultformat |
527 self._readonly = readonly |
527 self._readonly = readonly |
528 if data: |
528 if data: |
529 self._version, markers = _readmarkers(data) |
529 self._version, markers = _readmarkers(data) |
530 self._addmarkers(markers) |
530 self._addmarkers(markers) |
586 for m in markers: |
586 for m in markers: |
587 if m not in known: |
587 if m not in known: |
588 known.add(m) |
588 known.add(m) |
589 new.append(m) |
589 new.append(m) |
590 if new: |
590 if new: |
591 f = self.sopener('obsstore', 'ab') |
591 f = self.svfs('obsstore', 'ab') |
592 try: |
592 try: |
593 offset = f.tell() |
593 offset = f.tell() |
594 transaction.add('obsstore', offset) |
594 transaction.add('obsstore', offset) |
595 # offset == 0: new file - add the version header |
595 # offset == 0: new file - add the version header |
596 for bytes in encodemarkers(new, offset == 0, self._version): |
596 for bytes in encodemarkers(new, offset == 0, self._version): |