/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

merge diff header work from my 2.1 branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
 
17
import errno
17
18
import os
18
19
import re
19
20
import stat
25
26
from bzrlib.lazy_import import lazy_import
26
27
lazy_import(globals(), """
27
28
from datetime import datetime
28
 
import errno
 
29
import getpass
29
30
from ntpath import (abspath as _nt_abspath,
30
31
                    join as _nt_join,
31
32
                    normpath as _nt_normpath,
360
361
    return _win32_fixdrive(tempfile.mkdtemp(*args, **kwargs).replace('\\', '/'))
361
362
 
362
363
 
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
364
def _win32_rename(old, new):
372
365
    """We expect to be able to atomically replace 'new' with old.
373
366
 
375
368
    and then deleted.
376
369
    """
377
370
    try:
378
 
        fancy_rename(old, new, rename_func=_wrapped_rename, unlink_func=os.unlink)
 
371
        fancy_rename(old, new, rename_func=os.rename, unlink_func=os.unlink)
379
372
    except OSError, e:
380
373
        if e.errno in (errno.EPERM, errno.EACCES, errno.EBUSY, errno.EINVAL):
381
374
            # If we try to rename a non-existant file onto cwd, we get
386
379
        raise
387
380
 
388
381
 
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
382
def _mac_getcwd():
400
383
    return unicodedata.normalize('NFC', os.getcwdu())
401
384
 
406
389
realpath = _posix_realpath
407
390
pathjoin = os.path.join
408
391
normpath = os.path.normpath
409
 
rename = _wrapped_rename # overridden below on win32
410
392
getcwd = os.getcwdu
 
393
rename = os.rename
411
394
dirname = os.path.dirname
412
395
basename = os.path.basename
413
396
split = os.path.split
1959
1942
    return user_encoding
1960
1943
 
1961
1944
 
 
1945
def get_diff_header_encoding():
 
1946
    if sys.platform == 'win32':
 
1947
        return 'mbcs'
 
1948
    else:
 
1949
        return 'utf8'
 
1950
 
 
1951
 
1962
1952
def get_host_name():
1963
1953
    """Return the current unicode host name.
1964
1954
 
2095
2085
    base = dirname(bzrlib.__file__)
2096
2086
    if getattr(sys, 'frozen', None):    # bzr.exe
2097
2087
        base = abspath(pathjoin(base, '..', '..'))
2098
 
    filename = pathjoin(base, resource_relpath)
2099
 
    return open(filename, 'rU').read()
2100
 
 
 
2088
    f = file(pathjoin(base, resource_relpath), "rU")
 
2089
    try:
 
2090
        return f.read()
 
2091
    finally:
 
2092
        f.close()
2101
2093
 
2102
2094
def file_kind_from_stat_mode_thunk(mode):
2103
2095
    global file_kind_from_stat_mode
2302
2294
        return os.fdopen(os.open(filename, flags), mode, bufsize)
2303
2295
else:
2304
2296
    open_file = open
 
2297
 
 
2298
 
 
2299
def getuser_unicode():
 
2300
    """Return the username as unicode.
 
2301
    """
 
2302
    try:
 
2303
        user_encoding = get_user_encoding()
 
2304
        username = getpass.getuser().decode(user_encoding)
 
2305
    except UnicodeDecodeError:
 
2306
        raise errors.BzrError("Can't decode username as %s." % \
 
2307
                user_encoding)
 
2308
    return username