~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/lockable_files.py

  • Committer: John Arbash Meinel
  • Date: 2008-05-28 21:53:46 UTC
  • mfrom: (3453 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3458.
  • Revision ID: john@arbash-meinel.com-20080528215346-l8plys9h9ps624pn
merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
    the object is constructed.  In older formats OSLocks are used everywhere.
60
60
    in newer formats a LockDir is used for Repositories and Branches, and 
61
61
    OSLocks for the local filesystem.
 
62
 
 
63
    This class is now deprecated; code should move to using the Transport 
 
64
    directly for file operations and using the lock or CountedLock for 
 
65
    locking.
62
66
    """
63
67
 
64
68
    # _lock_mode: None, or 'r' or 'w'
66
70
    # _lock_count: If _lock_mode is true, a positive count of the number of
67
71
    # times the lock has been taken *by this process*.   
68
72
    
69
 
    # If set to False (by a plugin, etc) BzrBranch will not set the
70
 
    # mode on created files or directories
71
 
    _set_file_mode = True
72
 
    _set_dir_mode = True
73
 
 
74
73
    def __init__(self, transport, lock_name, lock_class):
75
74
        """Create a LockableFiles group
76
75
 
126
125
        return urlutils.escape(safe_unicode(file_or_path))
127
126
 
128
127
    def _find_modes(self):
129
 
        """Determine the appropriate modes for files and directories."""
 
128
        """Determine the appropriate modes for files and directories.
 
129
        
 
130
        :deprecated: Replaced by BzrDir._find_modes.
 
131
        """
130
132
        try:
131
133
            st = self._transport.stat('.')
132
134
        except errors.TransportNotPossible:
140
142
            self._dir_mode = (st.st_mode & 07777) | 00700
141
143
            # Remove the sticky and execute bits for files
142
144
            self._file_mode = self._dir_mode & ~07111
143
 
        if not self._set_dir_mode:
144
 
            self._dir_mode = None
145
 
        if not self._set_file_mode:
146
 
            self._file_mode = None
147
145
 
 
146
    @deprecated_method(deprecated_in((1, 6, 0)))
148
147
    def controlfilename(self, file_or_path):
149
 
        """Return location relative to branch."""
 
148
        """Return location relative to branch.
 
149
        
 
150
        :deprecated: Use Transport methods instead.
 
151
        """
150
152
        return self._transport.abspath(self._escape(file_or_path))
151
153
 
152
154
    @needs_read_lock
 
155
    @deprecated_method(deprecated_in((1, 5, 0)))
153
156
    def get(self, relpath):
154
 
        """Get a file as a bytestream."""
 
157
        """Get a file as a bytestream.
 
158
        
 
159
        :deprecated: Use a Transport instead of LockableFiles.
 
160
        """
155
161
        relpath = self._escape(relpath)
156
162
        return self._transport.get(relpath)
157
163
 
158
164
    @needs_read_lock
159
165
    @deprecated_method(deprecated_in((1, 5, 0)))
160
166
    def get_utf8(self, relpath):
161
 
        """Get a file as a unicode stream."""
 
167
        """Get a file as a unicode stream.
 
168
        
 
169
        :deprecated: Use a Transport instead of LockableFiles.
 
170
        """
162
171
        relpath = self._escape(relpath)
163
172
        # DO NOT introduce an errors=replace here.
164
173
        return codecs.getreader('utf-8')(self._transport.get(relpath))
165
174
 
166
175
    @needs_write_lock
 
176
    @deprecated_method(deprecated_in((1, 6, 0)))
167
177
    def put(self, path, file):
168
178
        """Write a file.
169
179
        
170
180
        :param path: The path to put the file, relative to the .bzr control
171
181
                     directory
172
 
        :param f: A file-like or string object whose contents should be copied.
 
182
        :param file: A file-like or string object whose contents should be copied.
 
183
 
 
184
        :deprecated: Use Transport methods instead.
173
185
        """
174
186
        self._transport.put_file(self._escape(path), file, mode=self._file_mode)
175
187
 
176
188
    @needs_write_lock
 
189
    @deprecated_method(deprecated_in((1, 6, 0)))
177
190
    def put_bytes(self, path, a_string):
178
191
        """Write a string of bytes.
179
192
 
180
193
        :param path: The path to put the bytes, relative to the transport root.
181
 
        :param string: A string object, whose exact bytes are to be copied.
 
194
        :param a_string: A string object, whose exact bytes are to be copied.
 
195
 
 
196
        :deprecated: Use Transport methods instead.
182
197
        """
183
198
        self._transport.put_bytes(self._escape(path), a_string,
184
199
                                  mode=self._file_mode)
185
200
 
186
201
    @needs_write_lock
 
202
    @deprecated_method(deprecated_in((1, 6, 0)))
187
203
    def put_utf8(self, path, a_string):
188
204
        """Write a string, encoding as utf-8.
189
205
 
190
206
        :param path: The path to put the string, relative to the transport root.
191
207
        :param string: A string or unicode object whose contents should be copied.
 
208
 
 
209
        :deprecated: Use Transport methods instead.
192
210
        """
193
211
        # IterableFile would not be needed if Transport.put took iterables
194
212
        # instead of files.  ADHB 2005-12-25