~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

  • Committer: Robert Collins
  • Date: 2006-03-07 12:17:32 UTC
  • mto: (1594.2.4 integration)
  • mto: This revision was merged to the branch mainline in revision 1596.
  • Revision ID: robertc@robertcollins.net-20060307121732-1a219b872ef18ecc
cleanup deprecation warnings and finish conversion so the inventory is knit based too.

Show diffs side-by-side

added added

removed removed

Lines of Context:
253
253
        self._index = _KnitIndex(transport, relpath + INDEX_SUFFIX,
254
254
            access_mode, create=create)
255
255
        self._data = _KnitData(transport, relpath + DATA_SUFFIX,
256
 
            access_mode)
 
256
            access_mode, create=not len(self.versions()))
257
257
 
258
258
    def copy_to(self, name, transport):
259
259
        """See VersionedFile.copy_to()."""
635
635
 
636
636
    def get_ancestry(self, versions):
637
637
        """See VersionedFile.get_ancestry."""
638
 
        version_idxs = []
639
 
        for version_id in versions:
640
 
            version_idxs.append(self._history.index(version_id))
641
 
        i = set(versions)
642
 
        for v in xrange(max(version_idxs), 0, -1):
643
 
            if self._history[v] in i:
644
 
                # include all its parents
645
 
                i.update(self._cache[self._history[v]][4])
646
 
        return list(i)
 
638
        # get a graph of all the mentioned versions:
 
639
        graph = {}
 
640
        pending = set(versions)
 
641
        while len(pending):
 
642
            version = pending.pop()
 
643
            parents = self._cache[version][4]
 
644
            for parent in parents:
 
645
                if parent not in graph:
 
646
                    pending.add(parent)
 
647
            graph[version] = parents
 
648
        return topo_sort(graph.items())
647
649
 
648
650
    def num_versions(self):
649
651
        return len(self._history)
712
714
 
713
715
    HEADER = "# bzr knit data 7\n"
714
716
 
715
 
    def __init__(self, transport, filename, mode):
 
717
    def __init__(self, transport, filename, mode, create=False):
716
718
        _KnitComponentFile.__init__(self, transport, filename, mode)
717
719
        self._file = None
718
720
        self._checked = False
 
721
        if create:
 
722
            self._transport.put(self._filename, StringIO(''))
719
723
 
720
724
    def _open_file(self):
721
725
        if self._file is None: