15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
from cStringIO import StringIO
19
from bzrlib.lazy_import import lazy_import
20
lazy_import(globals(), """
32
from bzrlib.decorators import (
36
from bzrlib.symbol_versioning import (
22
from bzrlib.decorators import (needs_read_lock,
24
import bzrlib.errors as errors
25
from bzrlib.errors import BzrError
26
from bzrlib.osutils import file_iterator, safe_unicode
27
from bzrlib.symbol_versioning import (deprecated_method,
29
from bzrlib.trace import mutter, note
30
import bzrlib.transactions as transactions
31
import bzrlib.urlutils as urlutils
42
34
# XXX: The tracking here of lock counts and whether the lock is held is
123
118
self._lock.break_lock()
125
120
def _escape(self, file_or_path):
126
"""DEPRECATED: Do not use outside this class"""
127
121
if not isinstance(file_or_path, basestring):
128
122
file_or_path = '/'.join(file_or_path)
129
123
if file_or_path == '':
131
return urlutils.escape(osutils.safe_unicode(file_or_path))
125
return urlutils.escape(safe_unicode(file_or_path))
133
127
def _find_modes(self):
134
"""Determine the appropriate modes for files and directories.
136
:deprecated: Replaced by BzrDir._find_modes.
128
"""Determine the appropriate modes for files and directories."""
139
130
st = self._transport.stat('.')
140
131
except errors.TransportNotPossible:
148
139
self._dir_mode = (st.st_mode & 07777) | 00700
149
140
# Remove the sticky and execute bits for files
150
141
self._file_mode = self._dir_mode & ~07111
142
if not self._set_dir_mode:
143
self._dir_mode = None
144
if not self._set_file_mode:
145
self._file_mode = None
152
@deprecated_method(deprecated_in((1, 6, 0)))
153
147
def controlfilename(self, file_or_path):
154
"""Return location relative to branch.
156
:deprecated: Use Transport methods instead.
148
"""Return location relative to branch."""
158
149
return self._transport.abspath(self._escape(file_or_path))
161
@deprecated_method(deprecated_in((1, 5, 0)))
162
152
def get(self, relpath):
163
"""Get a file as a bytestream.
165
:deprecated: Use a Transport instead of LockableFiles.
153
"""Get a file as a bytestream."""
167
154
relpath = self._escape(relpath)
168
155
return self._transport.get(relpath)
171
@deprecated_method(deprecated_in((1, 5, 0)))
172
158
def get_utf8(self, relpath):
173
"""Get a file as a unicode stream.
175
:deprecated: Use a Transport instead of LockableFiles.
159
"""Get a file as a unicode stream."""
177
160
relpath = self._escape(relpath)
178
161
# DO NOT introduce an errors=replace here.
179
162
return codecs.getreader('utf-8')(self._transport.get(relpath))
181
164
@needs_write_lock
182
@deprecated_method(deprecated_in((1, 6, 0)))
183
165
def put(self, path, file):
186
168
:param path: The path to put the file, relative to the .bzr control
188
:param file: A file-like or string object whose contents should be copied.
190
:deprecated: Use Transport methods instead.
170
:param f: A file-like or string object whose contents should be copied.
192
172
self._transport.put_file(self._escape(path), file, mode=self._file_mode)
194
174
@needs_write_lock
195
@deprecated_method(deprecated_in((1, 6, 0)))
196
175
def put_bytes(self, path, a_string):
197
176
"""Write a string of bytes.
199
178
:param path: The path to put the bytes, relative to the transport root.
200
:param a_string: A string object, whose exact bytes are to be copied.
202
:deprecated: Use Transport methods instead.
179
:param string: A string object, whose exact bytes are to be copied.
204
181
self._transport.put_bytes(self._escape(path), a_string,
205
182
mode=self._file_mode)
207
184
@needs_write_lock
208
@deprecated_method(deprecated_in((1, 6, 0)))
209
185
def put_utf8(self, path, a_string):
210
186
"""Write a string, encoding as utf-8.
212
188
:param path: The path to put the string, relative to the transport root.
213
189
:param string: A string or unicode object whose contents should be copied.
215
:deprecated: Use Transport methods instead.
217
191
# IterableFile would not be needed if Transport.put took iterables
218
192
# instead of files. ADHB 2005-12-25