39
39
from bzrlib.transport import LateReadError
42
from bzrlib.transport import Transport, Server
42
from bzrlib import transport
45
45
_append_flags = os.O_CREAT | os.O_APPEND | os.O_WRONLY | osutils.O_BINARY | osutils.O_NOINHERIT
46
46
_put_non_atomic_flags = os.O_CREAT | os.O_TRUNC | os.O_WRONLY | osutils.O_BINARY | osutils.O_NOINHERIT
49
class LocalTransport(Transport):
49
class LocalTransport(transport.Transport):
50
50
"""This is the transport agent for local filesystem access."""
52
52
def __init__(self, base):
515
515
except (IOError, OSError),e:
516
516
self._translate_error(e, path)
518
if osutils.host_os_dereferences_symlinks():
519
def readlink(self, relpath):
520
"""See Transport.readlink."""
521
return osutils.readlink(self._abspath(relpath))
523
if osutils.hardlinks_good():
524
def hardlink(self, source, link_name):
525
"""See Transport.link."""
527
os.link(self._abspath(source), self._abspath(link_name))
528
except (IOError, OSError), e:
529
self._translate_error(e, source)
531
if osutils.has_symlinks():
532
def symlink(self, source, link_name):
533
"""See Transport.symlink."""
534
abs_link_dirpath = urlutils.dirname(self.abspath(link_name))
535
source_rel = urlutils.file_relpath(
536
urlutils.strip_trailing_slash(abs_link_dirpath),
537
urlutils.strip_trailing_slash(self.abspath(source))
541
os.symlink(source_rel, self._abspath(link_name))
542
except (IOError, OSError), e:
543
self._translate_error(e, source_rel)
518
545
def _can_roundtrip_unix_modebits(self):
519
546
if sys.platform == 'win32':
554
581
return EmulatedWin32LocalTransport(abspath)
557
class LocalURLServer(Server):
558
"""A pretend server for local transports, using file:// urls.
560
Of course no actual server is required to access the local filesystem, so
561
this just exists to tell the test code how to get to it.
564
def start_server(self):
568
"""See Transport.Server.get_url."""
569
return urlutils.local_path_to_url('')
572
584
def get_test_permutations():
573
585
"""Return the permutations to be used in testing."""
575
(LocalTransport, LocalURLServer),
586
from bzrlib.tests import test_server
587
return [(LocalTransport, test_server.LocalURLServer),]