/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: Parth Malwankar
  • Date: 2010-05-05 14:02:53 UTC
  • mto: This revision was merged to the branch mainline in revision 5213.
  • Revision ID: parth.malwankar@gmail.com-20100505140253-fqdiwllq4o4htbsg
added comment to init/init-repo pass tests for lacking whoami.

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
 
31
import getpass
29
32
from ntpath import (abspath as _nt_abspath,
30
33
                    join as _nt_join,
31
34
                    normpath as _nt_normpath,
360
363
    return _win32_fixdrive(tempfile.mkdtemp(*args, **kwargs).replace('\\', '/'))
361
364
 
362
365
 
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
366
def _win32_rename(old, new):
372
367
    """We expect to be able to atomically replace 'new' with old.
373
368
 
375
370
    and then deleted.
376
371
    """
377
372
    try:
378
 
        fancy_rename(old, new, rename_func=_wrapped_rename, unlink_func=os.unlink)
 
373
        fancy_rename(old, new, rename_func=os.rename, unlink_func=os.unlink)
379
374
    except OSError, e:
380
375
        if e.errno in (errno.EPERM, errno.EACCES, errno.EBUSY, errno.EINVAL):
381
376
            # If we try to rename a non-existant file onto cwd, we get
386
381
        raise
387
382
 
388
383
 
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
384
def _mac_getcwd():
400
385
    return unicodedata.normalize('NFC', os.getcwdu())
401
386
 
406
391
realpath = _posix_realpath
407
392
pathjoin = os.path.join
408
393
normpath = os.path.normpath
409
 
rename = _wrapped_rename # overridden below on win32
410
394
getcwd = os.getcwdu
 
395
rename = os.rename
411
396
dirname = os.path.dirname
412
397
basename = os.path.basename
413
398
split = os.path.split
1147
1132
 
1148
1133
 
1149
1134
def relpath(base, path):
1150
 
    """Return path relative to base, or raise PathNotChild exception.
 
1135
    """Return path relative to base, or raise exception.
1151
1136
 
1152
1137
    The path may be either an absolute path or a path relative to the
1153
1138
    current working directory.
1155
1140
    os.path.commonprefix (python2.4) has a bad bug that it works just
1156
1141
    on string prefixes, assuming that '/u' is a prefix of '/u2'.  This
1157
1142
    avoids that problem.
1158
 
 
1159
 
    NOTE: `base` should not have a trailing slash otherwise you'll get
1160
 
    PathNotChild exceptions regardless of `path`.
1161
1143
    """
1162
1144
 
1163
1145
    if len(base) < MIN_ABS_PATHLENGTH:
2302
2284
        return os.fdopen(os.open(filename, flags), mode, bufsize)
2303
2285
else:
2304
2286
    open_file = open
 
2287
 
 
2288
 
 
2289
def getuser_unicode():
 
2290
    """Return the username as unicode.
 
2291
    """
 
2292
    try:
 
2293
        user_encoding = get_user_encoding()
 
2294
        username = getpass.getuser().decode(user_encoding)
 
2295
    except UnicodeDecodeError:
 
2296
        raise errors.BzrError("Can't decode username as %s." % \
 
2297
                user_encoding)
 
2298
    return username