~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/local.py

  • Committer: abentley
  • Date: 2006-04-20 23:47:53 UTC
  • mfrom: (1681 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1683.
  • Revision ID: abentley@lappy-20060420234753-6a6874b76f09f86d
Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 
21
21
import os
22
22
import shutil
 
23
import sys
23
24
from stat import ST_MODE, S_ISDIR, ST_SIZE
24
25
import tempfile
25
26
import urllib
57
58
            return LocalTransport(self.abspath(offset))
58
59
 
59
60
    def abspath(self, relpath):
60
 
        """Return the full url to the given relative URL.
61
 
        This can be supplied with a string or a list
62
 
        """
 
61
        """Return the full url to the given relative URL."""
63
62
        assert isinstance(relpath, basestring), (type(relpath), relpath)
64
 
        return pathjoin(self.base, urllib.unquote(relpath))
 
63
        result = normpath(pathjoin(self.base, urllib.unquote(relpath)))
 
64
        #if result[-1] != '/':
 
65
        #    result += '/'
 
66
        return result
65
67
 
66
68
    def relpath(self, abspath):
67
69
        """Return the local path portion from a given absolute path.
69
71
        from bzrlib.osutils import relpath
70
72
        if abspath is None:
71
73
            abspath = u'.'
72
 
        if abspath.endswith('/'):
 
74
        if len(abspath) > 1 and abspath.endswith('/'):
73
75
            abspath = abspath[:-1]
74
 
        return relpath(self.base[:-1], abspath)
 
76
        if self.base == '/':
 
77
            root = '/'
 
78
        else:
 
79
            root = self.base[:-1]
 
80
        return relpath(root, abspath)
75
81
 
76
82
    def has(self, relpath):
77
83
        return os.access(self.abspath(relpath), os.F_OK)
130
136
        except (IOError, OSError),e:
131
137
            self._translate_error(e, path)
132
138
 
133
 
    def append(self, relpath, f):
 
139
    def append(self, relpath, f, mode=None):
134
140
        """Append the text in the file-like object into the final
135
141
        location.
136
142
        """
137
143
        try:
138
144
            fp = open(self.abspath(relpath), 'ab')
 
145
            if mode is not None:
 
146
                os.chmod(self.abspath(relpath), mode)
139
147
        except (IOError, OSError),e:
140
148
            self._translate_error(e, relpath)
141
149
        # win32 workaround (tell on an unwritten file returns 0)
227
235
        path = self.abspath(relpath)
228
236
        try:
229
237
            return [urllib.quote(entry) for entry in os.listdir(path)]
230
 
        except (IOError, OSError),e:
 
238
        except (IOError, OSError), e:
231
239
            self._translate_error(e, path)
232
240
 
233
241
    def stat(self, relpath):
270
278
        except (IOError, OSError),e:
271
279
            self._translate_error(e, path)
272
280
 
 
281
    def _can_roundtrip_unix_modebits(self):
 
282
        if sys.platform == 'win32':
 
283
            # anyone else?
 
284
            return False
 
285
        else:
 
286
            return True
 
287
 
273
288
 
274
289
class ScratchTransport(LocalTransport):
275
290
    """A transport that works in a temporary dir and cleans up after itself.