~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

  • Committer: Robert Collins
  • Date: 2006-03-01 05:43:15 UTC
  • mto: (1594.2.4 integration)
  • mto: This revision was merged to the branch mainline in revision 1596.
  • Revision ID: robertc@robertcollins.net-20060301054315-a9edc45a6c4061eb
Update versionedfile api tests to ensure that data is available after every operation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
67
67
# the possible relationships.
68
68
 
69
69
 
 
70
from cStringIO import StringIO
 
71
from difflib import SequenceMatcher
70
72
import os
71
73
import sha
72
74
import time
73
 
from difflib import SequenceMatcher
74
75
 
75
76
from bzrlib.trace import mutter
76
77
from bzrlib.errors import (WeaveError, WeaveFormatError, WeaveParentMismatch,
84
85
from bzrlib.symbol_versioning import *
85
86
from bzrlib.tsort import topo_sort
86
87
from bzrlib.versionedfile import VersionedFile
 
88
from bzrlib.weavefile import _read_weave_v5, write_weave_v5
87
89
 
88
90
 
89
91
class Weave(VersionedFile):
836
838
            setattr(self, attr, getattr(new_weave, attr))
837
839
 
838
840
 
 
841
class WeaveFile(Weave):
 
842
    """A WeaveFile represents a Weave on disk and writes on change."""
 
843
 
 
844
    def __init__(self, name, transport):
 
845
        super(WeaveFile, self).__init__(name)
 
846
        self._transport = transport
 
847
        try:
 
848
            _read_weave_v5(self._transport.get(name), self)
 
849
        except errors.NoSuchFile:
 
850
            # new file, no-op.
 
851
            pass
 
852
 
 
853
    def add_lines(self, version_id, parents, lines):
 
854
        """Add a version and save the weave."""
 
855
        super(WeaveFile, self).add_lines(version_id, parents, lines)
 
856
        self._save()
 
857
 
 
858
    def _save(self):
 
859
        """Save the weave."""
 
860
        sio = StringIO()
 
861
        write_weave_v5(self, sio)
 
862
        sio.seek(0)
 
863
        self._transport.put(self._weave_name, sio)
 
864
 
 
865
    def join(self, other, pb=None, msg=None, version_ids=None):
 
866
        """Join other into self and save."""
 
867
        super(WeaveFile, self).join(other, pb, msg, version_ids)
 
868
        self._save()
 
869
 
 
870
 
839
871
def reweave(wa, wb, pb=None, msg=None):
840
872
    """Combine two weaves and return the result.
841
873