/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: Martin Pool
  • Date: 2010-04-28 07:03:38 UTC
  • mfrom: (5188 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5189.
  • Revision ID: mbp@sourcefrog.net-20100428070338-2af8y3takgfkrkyp
merge news

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(), """
27
29
from datetime import datetime
28
30
import errno
29
 
import getpass
30
31
from ntpath import (abspath as _nt_abspath,
31
32
                    join as _nt_join,
32
33
                    normpath as _nt_normpath,
361
362
    return _win32_fixdrive(tempfile.mkdtemp(*args, **kwargs).replace('\\', '/'))
362
363
 
363
364
 
364
 
def _add_rename_error_details(e, old, new):
365
 
    new_e = OSError(e.errno, "failed to rename %s to %s: %s"
366
 
        % (old, new, e.strerror))
367
 
    new_e.filename = old
368
 
    new_e.to_filename = new
369
 
    return new_e
370
 
 
371
 
 
372
365
def _win32_rename(old, new):
373
366
    """We expect to be able to atomically replace 'new' with old.
374
367
 
376
369
    and then deleted.
377
370
    """
378
371
    try:
379
 
        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)
380
373
    except OSError, e:
381
374
        if e.errno in (errno.EPERM, errno.EACCES, errno.EBUSY, errno.EINVAL):
382
375
            # If we try to rename a non-existant file onto cwd, we get
387
380
        raise
388
381
 
389
382
 
390
 
def _wrapped_rename(old, new):
391
 
    """Rename a file or directory"""
392
 
    try:
393
 
        os.rename(old, new)
394
 
    except (IOError, OSError), e:
395
 
        # this is eventually called by all rename-like functions, so should 
396
 
        # catch all of them
397
 
        raise _add_rename_error_details(e, old, new)
398
 
 
399
 
 
400
383
def _mac_getcwd():
401
384
    return unicodedata.normalize('NFC', os.getcwdu())
402
385
 
407
390
realpath = _posix_realpath
408
391
pathjoin = os.path.join
409
392
normpath = os.path.normpath
410
 
rename = _wrapped_rename # overridden below on win32
411
393
getcwd = os.getcwdu
 
394
rename = os.rename
412
395
dirname = os.path.dirname
413
396
basename = os.path.basename
414
397
split = os.path.split
1148
1131
 
1149
1132
 
1150
1133
def relpath(base, path):
1151
 
    """Return path relative to base, or raise PathNotChild exception.
 
1134
    """Return path relative to base, or raise exception.
1152
1135
 
1153
1136
    The path may be either an absolute path or a path relative to the
1154
1137
    current working directory.
1156
1139
    os.path.commonprefix (python2.4) has a bad bug that it works just
1157
1140
    on string prefixes, assuming that '/u' is a prefix of '/u2'.  This
1158
1141
    avoids that problem.
1159
 
 
1160
 
    NOTE: `base` should not have a trailing slash otherwise you'll get
1161
 
    PathNotChild exceptions regardless of `path`.
1162
1142
    """
1163
1143
 
1164
1144
    if len(base) < MIN_ABS_PATHLENGTH:
2303
2283
        return os.fdopen(os.open(filename, flags), mode, bufsize)
2304
2284
else:
2305
2285
    open_file = open
2306
 
 
2307
 
 
2308
 
def getuser_unicode():
2309
 
    """Return the username as unicode.
2310
 
    """
2311
 
    try:
2312
 
        user_encoding = get_user_encoding()
2313
 
        username = getpass.getuser().decode(user_encoding)
2314
 
    except UnicodeDecodeError:
2315
 
        raise errors.BzrError("Can't decode username as %s." % \
2316
 
                user_encoding)
2317
 
    return username