~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: John Arbash Meinel
  • Date: 2012-09-14 07:22:49 UTC
  • mfrom: (6015.57.3 2.4)
  • mto: (6015.57.7 2.4)
  • mto: This revision was merged to the branch mainline in revision 6579.
  • Revision ID: john@arbash-meinel.com-20120914072249-rvpderuqqme7sy88
Merge bzr/2.4 (6072) into client-reconnect code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
97
97
    mod = os.lstat(filename).st_mode
98
98
    if not stat.S_ISLNK(mod):
99
99
        mod = mod & 0777555
100
 
        os.chmod(filename, mod)
 
100
        chmod_if_possible(filename, mod)
101
101
 
102
102
 
103
103
def make_writable(filename):
104
104
    mod = os.lstat(filename).st_mode
105
105
    if not stat.S_ISLNK(mod):
106
106
        mod = mod | 0200
107
 
        os.chmod(filename, mod)
 
107
        chmod_if_possible(filename, mod)
 
108
 
 
109
 
 
110
def chmod_if_possible(filename, mode):
 
111
    # Set file mode if that can be safely done.
 
112
    # Sometimes even on unix the filesystem won't allow it - see
 
113
    # https://bugs.launchpad.net/bzr/+bug/606537
 
114
    try:
 
115
        # It is probably faster to just do the chmod, rather than
 
116
        # doing a stat, and then trying to compare
 
117
        os.chmod(filename, mode)
 
118
    except (IOError, OSError),e:
 
119
        # Permission/access denied seems to commonly happen on smbfs; there's
 
120
        # probably no point warning about it.
 
121
        # <https://bugs.launchpad.net/bzr/+bug/606537>
 
122
        if getattr(e, 'errno') in (errno.EPERM, errno.EACCES):
 
123
            trace.mutter("ignore error on chmod of %r: %r" % (
 
124
                filename, e))
 
125
            return
 
126
        raise
108
127
 
109
128
 
110
129
def minimum_path_selection(paths):
2513
2532
    fn = getattr(os, 'fdatasync', getattr(os, 'fsync', None))
2514
2533
    if fn is not None:
2515
2534
        fn(fileno)
 
2535
 
 
2536
 
 
2537
def ensure_empty_directory_exists(path, exception_class):
 
2538
    """Make sure a local directory exists and is empty.
 
2539
    
 
2540
    If it does not exist, it is created.  If it exists and is not empty, an
 
2541
    instance of exception_class is raised.
 
2542
    """
 
2543
    try:
 
2544
        os.mkdir(path)
 
2545
    except OSError, e:
 
2546
        if e.errno != errno.EEXIST:
 
2547
            raise
 
2548
        if os.listdir(path) != []:
 
2549
            raise exception_class(path)