~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/local.py

  • Committer: Robert Collins
  • Date: 2010-04-08 04:34:03 UTC
  • mfrom: (5138 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5139.
  • Revision ID: robertc@robertcollins.net-20100408043403-56z0d07vdqrx7f3t
Update bugfix for 528114 to trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
from bzrlib.transport import LateReadError
40
40
""")
41
41
 
42
 
from bzrlib.transport import Transport, Server
 
42
from bzrlib import transport
43
43
 
44
44
 
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
47
47
 
48
48
 
49
 
class LocalTransport(Transport):
 
49
class LocalTransport(transport.Transport):
50
50
    """This is the transport agent for local filesystem access."""
51
51
 
52
52
    def __init__(self, base):
481
481
        path = relpath
482
482
        try:
483
483
            path = self._abspath(relpath)
484
 
            return os.stat(path)
 
484
            return os.lstat(path)
485
485
        except (IOError, OSError),e:
486
486
            self._translate_error(e, path)
487
487
 
515
515
        except (IOError, OSError),e:
516
516
            self._translate_error(e, path)
517
517
 
 
518
    if osutils.host_os_dereferences_symlinks():
 
519
        def readlink(self, relpath):
 
520
            """See Transport.readlink."""
 
521
            return osutils.readlink(self._abspath(relpath))
 
522
 
 
523
    if osutils.hardlinks_good():
 
524
        def hardlink(self, source, link_name):
 
525
            """See Transport.link."""
 
526
            try:
 
527
                os.link(self._abspath(source), self._abspath(link_name))
 
528
            except (IOError, OSError), e:
 
529
                self._translate_error(e, source)
 
530
 
 
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))
 
538
            )
 
539
 
 
540
            try:
 
541
                os.symlink(source_rel, self._abspath(link_name))
 
542
            except (IOError, OSError), e:
 
543
                self._translate_error(e, source_rel)
 
544
 
518
545
    def _can_roundtrip_unix_modebits(self):
519
546
        if sys.platform == 'win32':
520
547
            # anyone else?
554
581
            return EmulatedWin32LocalTransport(abspath)
555
582
 
556
583
 
557
 
class LocalURLServer(Server):
558
 
    """A pretend server for local transports, using file:// urls.
559
 
 
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.
562
 
    """
563
 
 
564
 
    def start_server(self):
565
 
        pass
566
 
 
567
 
    def get_url(self):
568
 
        """See Transport.Server.get_url."""
569
 
        return urlutils.local_path_to_url('')
570
 
 
571
 
 
572
584
def get_test_permutations():
573
585
    """Return the permutations to be used in testing."""
574
 
    return [
575
 
            (LocalTransport, LocalURLServer),
576
 
            ]
 
586
    from bzrlib.tests import test_server
 
587
    return [(LocalTransport, test_server.LocalURLServer),]