~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/atomicfile.py

  • Committer: John Arbash Meinel
  • Date: 2006-08-09 15:14:47 UTC
  • mto: This revision was merged to the branch mainline in revision 1912.
  • Revision ID: john@arbash-meinel.com-20060809151447-02e7a4ac00dc7eee
Make AtomicFile not do anything if not supplied a mode, clean up LocalTransport now that we do the right thing for None

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
    place or abort() to cancel.
45
45
    """
46
46
 
47
 
    __slots__ = ['tmpfilename', 'realfilename', '_fd', '_new_mode']
 
47
    __slots__ = ['tmpfilename', 'realfilename', '_fd']
48
48
 
49
 
    def __init__(self, filename, mode='wb', new_mode=0666):
 
49
    def __init__(self, filename, mode='wb', new_mode=None):
50
50
        self._fd = None
51
51
        assert mode in ('wb', 'wt'), \
52
52
            "invalid AtomicFile mode %r" % mode
58
58
        flags = os.O_EXCL | os.O_CREAT | os.O_WRONLY
59
59
        if mode == 'wb':
60
60
            flags |= osutils.O_BINARY
 
61
 
 
62
        if new_mode is not None:
 
63
            local_mode = new_mode
 
64
        else:
 
65
            local_mode = 0666
61
66
        
62
 
        self._new_mode = new_mode
63
67
        # Use a low level fd operation to avoid chmodding later.
64
68
        # This may not succeed, but it should help most of the time
65
 
        self._fd = os.open(self.tmpfilename, flags, new_mode)
66
 
        st = os.fstat(self._fd)
67
 
        if stat.S_IMODE(st.st_mode) != new_mode:
68
 
            os.chmod(self.tmpfilename, new_mode)
 
69
        self._fd = os.open(self.tmpfilename, flags, local_mode)
 
70
 
 
71
        if new_mode is not None:
 
72
            # Because of umask issues, we may need to chmod anyway
 
73
            # the common case is that we won't, though.
 
74
            st = os.fstat(self._fd)
 
75
            if stat.S_IMODE(st.st_mode) != new_mode:
 
76
                os.chmod(self.tmpfilename, new_mode)
69
77
 
70
78
    def _get_closed(self):
71
79
        symbol_versioning.warn('AtomicFile.closed deprecated in bzr 0.10',