~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/local.py

  • Committer: Jelmer Vernooij
  • Date: 2016-04-03 16:32:31 UTC
  • mto: This revision was merged to the branch mainline in revision 6617.
  • Revision ID: jelmer@jelmer.uk-20160403163231-h72bo0uyek2gikw0
Don't put French text in doc/en/user-reference when LANGUAGE=fr_CH.UTF_8.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011 Canonical Ltd
 
1
# Copyright (C) 2005-2012, 2016 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
19
19
This is a fairly thin wrapper on regular file IO.
20
20
"""
21
21
 
 
22
from __future__ import absolute_import
 
23
 
22
24
import os
23
25
from stat import ST_MODE, S_ISDIR, S_IMODE
24
26
import sys
50
52
    def __init__(self, base):
51
53
        """Set the base path where files will be stored."""
52
54
        if not base.startswith('file://'):
53
 
            symbol_versioning.warn(
54
 
                "Instantiating LocalTransport with a filesystem path"
55
 
                " is deprecated as of bzr 0.8."
56
 
                " Please use bzrlib.transport.get_transport()"
57
 
                " or pass in a file:// url.",
58
 
                 DeprecationWarning,
59
 
                 stacklevel=2
60
 
                 )
61
 
            base = urlutils.local_path_to_url(base)
 
55
            raise AssertionError("not a file:// url: %r" % base)
62
56
        if base[-1] != '/':
63
57
            base = base + '/'
64
58
 
72
66
 
73
67
        super(LocalTransport, self).__init__(base)
74
68
        self._local_base = urlutils.local_path_from_url(base)
 
69
        if self._local_base[-1] != '/':
 
70
            self._local_base = self._local_base + '/'
75
71
 
76
72
    def clone(self, offset=None):
77
73
        """Return a new LocalTransport with root at self.base + offset
144
140
        if abspath is None:
145
141
            abspath = u'.'
146
142
 
147
 
        return urlutils.file_relpath(
148
 
            urlutils.strip_trailing_slash(self.base),
149
 
            urlutils.strip_trailing_slash(abspath))
 
143
        return urlutils.file_relpath(self.base, abspath)
150
144
 
151
145
    def has(self, relpath):
152
146
        return os.access(self._abspath(relpath), os.F_OK)
190
184
            fp.close()
191
185
        return length
192
186
 
193
 
    def put_bytes(self, relpath, bytes, mode=None):
 
187
    def put_bytes(self, relpath, raw_bytes, mode=None):
194
188
        """Copy the string into the location.
195
189
 
196
190
        :param relpath: Location to put the contents, relative to base.
197
 
        :param bytes:   String
 
191
        :param raw_bytes:   String
198
192
        """
199
 
 
 
193
        if not isinstance(raw_bytes, str):
 
194
            raise TypeError(
 
195
                'raw_bytes must be a plain string, not %s' % type(raw_bytes))
200
196
        path = relpath
201
197
        try:
202
198
            path = self._abspath(relpath)
206
202
            self._translate_error(e, path)
207
203
        try:
208
204
            if bytes:
209
 
                fp.write(bytes)
 
205
                fp.write(raw_bytes)
210
206
            fp.commit()
211
207
        finally:
212
208
            fp.close()
329
325
    def open_write_stream(self, relpath, mode=None):
330
326
        """See Transport.open_write_stream."""
331
327
        abspath = self._abspath(relpath)
332
 
        handle = osutils.open_file(abspath, 'wb')
 
328
        try:
 
329
            handle = osutils.open_file(abspath, 'wb')
 
330
        except (IOError, OSError),e:
 
331
            self._translate_error(e, abspath)
333
332
        handle.truncate()
334
333
        if mode is not None:
335
334
            self._check_mode_and_size(abspath, handle.fileno(), mode)
536
535
            """See Transport.symlink."""
537
536
            abs_link_dirpath = urlutils.dirname(self.abspath(link_name))
538
537
            source_rel = urlutils.file_relpath(
539
 
                urlutils.strip_trailing_slash(abs_link_dirpath),
540
 
                urlutils.strip_trailing_slash(self.abspath(source))
541
 
            )
 
538
                abs_link_dirpath, self.abspath(source))
542
539
 
543
540
            try:
544
541
                os.symlink(source_rel, self._abspath(link_name))