~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/lockable_files.py

  • Committer: John Arbash Meinel
  • Date: 2007-05-04 18:59:36 UTC
  • mto: This revision was merged to the branch mainline in revision 2643.
  • Revision ID: john@arbash-meinel.com-20070504185936-1mjdoqmtz74xe5mg
A C implementation of _fields_to_entry_0_parents drops the time from 400ms to 330ms for a 21k-entry tree

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
import bzrlib.errors as errors
25
25
from bzrlib.errors import BzrError
26
26
from bzrlib.osutils import file_iterator, safe_unicode
27
 
from bzrlib.symbol_versioning import (deprecated_method,
28
 
        )
 
27
from bzrlib.symbol_versioning import (deprecated_method, 
 
28
        zero_eight)
29
29
from bzrlib.trace import mutter, note
30
30
import bzrlib.transactions as transactions
31
31
import bzrlib.urlutils as urlutils
132
132
            self._dir_mode = 0755
133
133
            self._file_mode = 0644
134
134
        else:
135
 
            # Check the directory mode, but also make sure the created
136
 
            # directories and files are read-write for this user. This is
137
 
            # mostly a workaround for filesystems which lie about being able to
138
 
            # write to a directory (cygwin & win32)
139
 
            self._dir_mode = (st.st_mode & 07777) | 00700
 
135
            self._dir_mode = st.st_mode & 07777
140
136
            # Remove the sticky and execute bits for files
141
137
            self._file_mode = self._dir_mode & ~07111
142
138
        if not self._set_dir_mode:
148
144
        """Return location relative to branch."""
149
145
        return self._transport.abspath(self._escape(file_or_path))
150
146
 
 
147
    @deprecated_method(zero_eight)
 
148
    def controlfile(self, file_or_path, mode='r'):
 
149
        """Open a control file for this branch.
 
150
 
 
151
        There are two classes of file in a lockable directory: text
 
152
        and binary.  binary files are untranslated byte streams.  Text
 
153
        control files are stored with Unix newlines and in UTF-8, even
 
154
        if the platform or locale defaults are different.
 
155
 
 
156
        Such files are not openable in write mode : they are managed via
 
157
        put and put_utf8 which atomically replace old versions using
 
158
        atomicfile.
 
159
        """
 
160
 
 
161
        relpath = self._escape(file_or_path)
 
162
        # TODO: codecs.open() buffers linewise, so it was overloaded with
 
163
        # a much larger buffer, do we need to do the same for getreader/getwriter?
 
164
        if mode == 'rb': 
 
165
            return self.get(relpath)
 
166
        elif mode == 'wb':
 
167
            raise BzrError("Branch.controlfile(mode='wb') is not supported, use put[_utf8]")
 
168
        elif mode == 'r':
 
169
            return self.get_utf8(relpath)
 
170
        elif mode == 'w':
 
171
            raise BzrError("Branch.controlfile(mode='w') is not supported, use put[_utf8]")
 
172
        else:
 
173
            raise BzrError("invalid controlfile mode %r" % mode)
 
174
 
151
175
    @needs_read_lock
152
176
    def get(self, relpath):
153
177
        """Get a file as a bytestream."""