/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Vincent Ladeuil
  • Date: 2010-04-23 16:22:41 UTC
  • mto: (5186.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5187.
  • Revision ID: v.ladeuil+lp@free.fr-20100423162241-9h3r8un7oewk0j3n
Workaround ``Crypto.Random`` check leading to spurious test failures

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
import os
18
18
import re
19
19
import stat
20
 
from stat import S_ISREG, S_ISDIR, S_ISLNK, ST_MODE, ST_SIZE
 
20
from stat import (S_ISREG, S_ISDIR, S_ISLNK, ST_MODE, ST_SIZE,
 
21
                  S_ISCHR, S_ISBLK, S_ISFIFO, S_ISSOCK)
21
22
import sys
22
23
import time
23
24
import codecs
 
25
import warnings
24
26
 
25
27
from bzrlib.lazy_import import lazy_import
26
28
lazy_import(globals(), """
360
362
    return _win32_fixdrive(tempfile.mkdtemp(*args, **kwargs).replace('\\', '/'))
361
363
 
362
364
 
363
 
def _add_rename_error_details(e, old, new):
364
 
    new_e = OSError(e.errno, "failed to rename %s to %s: %s"
365
 
        % (old, new, e.strerror))
366
 
    new_e.filename = old
367
 
    new_e.to_filename = new
368
 
    return new_e
369
 
 
370
 
 
371
365
def _win32_rename(old, new):
372
366
    """We expect to be able to atomically replace 'new' with old.
373
367
 
375
369
    and then deleted.
376
370
    """
377
371
    try:
378
 
        fancy_rename(old, new, rename_func=_wrapped_rename, unlink_func=os.unlink)
 
372
        fancy_rename(old, new, rename_func=os.rename, unlink_func=os.unlink)
379
373
    except OSError, e:
380
374
        if e.errno in (errno.EPERM, errno.EACCES, errno.EBUSY, errno.EINVAL):
381
375
            # If we try to rename a non-existant file onto cwd, we get
386
380
        raise
387
381
 
388
382
 
389
 
def _wrapped_rename(old, new):
390
 
    """Rename a file or directory"""
391
 
    try:
392
 
        os.rename(old, new)
393
 
    except (IOError, OSError), e:
394
 
        # this is eventually called by all rename-like functions, so should 
395
 
        # catch all of them
396
 
        raise _add_rename_error_details(e, old, new)
397
 
 
398
 
 
399
383
def _mac_getcwd():
400
384
    return unicodedata.normalize('NFC', os.getcwdu())
401
385
 
406
390
realpath = _posix_realpath
407
391
pathjoin = os.path.join
408
392
normpath = os.path.normpath
409
 
rename = _wrapped_rename # overridden below on win32
410
393
getcwd = os.getcwdu
 
394
rename = os.rename
411
395
dirname = os.path.dirname
412
396
basename = os.path.basename
413
397
split = os.path.split
1147
1131
 
1148
1132
 
1149
1133
def relpath(base, path):
1150
 
    """Return path relative to base, or raise PathNotChild exception.
 
1134
    """Return path relative to base, or raise exception.
1151
1135
 
1152
1136
    The path may be either an absolute path or a path relative to the
1153
1137
    current working directory.
1155
1139
    os.path.commonprefix (python2.4) has a bad bug that it works just
1156
1140
    on string prefixes, assuming that '/u' is a prefix of '/u2'.  This
1157
1141
    avoids that problem.
1158
 
 
1159
 
    NOTE: `base` should not have a trailing slash otherwise you'll get
1160
 
    PathNotChild exceptions regardless of `path`.
1161
1142
    """
1162
1143
 
1163
1144
    if len(base) < MIN_ABS_PATHLENGTH:
1846
1827
            real_handlers[kind](abspath, relpath)
1847
1828
 
1848
1829
 
1849
 
def copy_ownership_from_path(dst, src=None):
 
1830
def copy_ownership(dst, src=None):
1850
1831
    """Copy usr/grp ownership from src file/dir to dst file/dir.
1851
1832
 
1852
1833
    If src is None, the containing directory is used as source. If chown
1868
1849
        trace.warning("Unable to copy ownership from '%s' to '%s': IOError: %s." % (src, dst, e))
1869
1850
 
1870
1851
 
 
1852
def mkdir_with_ownership(path, ownership_src=None):
 
1853
    """Create the directory 'path' with specified ownership.
 
1854
 
 
1855
    If ownership_src is given, copies (chown) usr/grp ownership
 
1856
    from 'ownership_src' to 'path'. If ownership_src is None, use the
 
1857
    containing dir ownership.
 
1858
    """
 
1859
    os.mkdir(path)
 
1860
    copy_ownership(path, ownership_src)
 
1861
 
 
1862
 
 
1863
def open_with_ownership(filename, mode='r', bufsize=-1, ownership_src=None):
 
1864
    """Open the file 'filename' with the specified ownership.
 
1865
 
 
1866
    If ownership_src is specified, copy usr/grp ownership from ownership_src
 
1867
    to filename. If ownership_src is None, copy ownership from containing
 
1868
    directory.
 
1869
    Returns the opened file object.
 
1870
    """
 
1871
    f = open(filename, mode, bufsize)
 
1872
    copy_ownership(filename, ownership_src)
 
1873
    return f
 
1874
 
 
1875
 
1871
1876
def path_prefix_key(path):
1872
1877
    """Generate a prefix-order path key for path.
1873
1878