~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/local.py

  • Committer: Aaron Bentley
  • Date: 2006-02-22 14:39:42 UTC
  • mto: (2027.1.2 revert-subpath-56549)
  • mto: This revision was merged to the branch mainline in revision 1570.
  • Revision ID: abentley@panoramicfeedback.com-20060222143942-ae72299f2de66767
Fixed build_tree with symlinks

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
import urllib
26
26
 
27
27
from bzrlib.trace import mutter
28
 
from bzrlib.transport import Transport
 
28
from bzrlib.transport import Transport, Server
29
29
from bzrlib.osutils import abspath, realpath, normpath, pathjoin, rename
30
30
 
31
31
 
38
38
            base = base[7:]
39
39
        # realpath is incompatible with symlinks. When we traverse
40
40
        # up we might be able to normpath stuff. RBC 20051003
41
 
        super(LocalTransport, self).__init__(normpath(abspath(base)))
 
41
        base = normpath(abspath(base))
 
42
        if base[-1] != '/':
 
43
            base = base + '/'
 
44
        super(LocalTransport, self).__init__(base)
42
45
 
43
46
    def should_cache(self):
44
47
        return False
66
69
        from bzrlib.osutils import relpath
67
70
        if abspath is None:
68
71
            abspath = u'.'
69
 
        return relpath(self.base, abspath)
 
72
        if abspath.endswith('/'):
 
73
            abspath = abspath[:-1]
 
74
        return relpath(self.base[:-1], abspath)
70
75
 
71
76
    def has(self, relpath):
72
77
        return os.access(self.abspath(relpath), os.F_OK)
129
134
        """Append the text in the file-like object into the final
130
135
        location.
131
136
        """
132
 
        fp = open(self.abspath(relpath), 'ab')
 
137
        try:
 
138
            fp = open(self.abspath(relpath), 'ab')
 
139
        except (IOError, OSError),e:
 
140
            self._translate_error(e, relpath)
133
141
        self._pump(f, fp)
134
142
 
135
143
    def copy(self, rel_from, rel_to):
223
231
        :return: A lock object, which should be passed to Transport.unlock()
224
232
        """
225
233
        from bzrlib.lock import ReadLock
226
 
        return ReadLock(self.abspath(relpath))
 
234
        path = relpath
 
235
        try:
 
236
            path = self.abspath(relpath)
 
237
            return ReadLock(path)
 
238
        except (IOError, OSError), e:
 
239
            self._translate_error(e, path)
227
240
 
228
241
    def lock_write(self, relpath):
229
242
        """Lock the given file for exclusive (write) access.
234
247
        from bzrlib.lock import WriteLock
235
248
        return WriteLock(self.abspath(relpath))
236
249
 
 
250
    def rmdir(self, relpath):
 
251
        """See Transport.rmdir."""
 
252
        path = relpath
 
253
        try:
 
254
            path = self.abspath(relpath)
 
255
            os.rmdir(path)
 
256
        except (IOError, OSError),e:
 
257
            self._translate_error(e, path)
237
258
 
238
259
class ScratchTransport(LocalTransport):
239
260
    """A transport that works in a temporary dir and cleans up after itself.
250
271
    def __del__(self):
251
272
        shutil.rmtree(self.base, ignore_errors=True)
252
273
        mutter("%r destroyed" % self)
 
274
 
 
275
 
 
276
class LocalRelpathServer(Server):
 
277
    """A pretend server for local transports, using relpaths."""
 
278
 
 
279
    def get_url(self):
 
280
        """See Transport.Server.get_url."""
 
281
        return "."
 
282
 
 
283
 
 
284
class LocalAbspathServer(Server):
 
285
    """A pretend server for local transports, using absolute paths."""
 
286
 
 
287
    def get_url(self):
 
288
        """See Transport.Server.get_url."""
 
289
        return os.path.abspath("")
 
290
 
 
291
 
 
292
class LocalURLServer(Server):
 
293
    """A pretend server for local transports, using file:// urls."""
 
294
 
 
295
    def get_url(self):
 
296
        """See Transport.Server.get_url."""
 
297
        # FIXME: \ to / on windows
 
298
        return "file://%s" % os.path.abspath("")
 
299
 
 
300
 
 
301
def get_test_permutations():
 
302
    """Return the permutations to be used in testing."""
 
303
    return [(LocalTransport, LocalRelpathServer),
 
304
            (LocalTransport, LocalAbspathServer),
 
305
            (LocalTransport, LocalURLServer),
 
306
            ]