/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: Robert Collins
  • Date: 2010-05-06 11:08:10 UTC
  • mto: This revision was merged to the branch mainline in revision 5223.
  • Revision ID: robertc@robertcollins.net-20100506110810-h3j07fh5gmw54s25
Cleaner matcher matching revised unlocking protocol.

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
18
17
import os
19
18
import re
20
19
import stat
26
25
from bzrlib.lazy_import import lazy_import
27
26
lazy_import(globals(), """
28
27
from datetime import datetime
29
 
import getpass
 
28
import errno
30
29
from ntpath import (abspath as _nt_abspath,
31
30
                    join as _nt_join,
32
31
                    normpath as _nt_normpath,
361
360
    return _win32_fixdrive(tempfile.mkdtemp(*args, **kwargs).replace('\\', '/'))
362
361
 
363
362
 
 
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
 
364
371
def _win32_rename(old, new):
365
372
    """We expect to be able to atomically replace 'new' with old.
366
373
 
368
375
    and then deleted.
369
376
    """
370
377
    try:
371
 
        fancy_rename(old, new, rename_func=os.rename, unlink_func=os.unlink)
 
378
        fancy_rename(old, new, rename_func=_wrapped_rename, unlink_func=os.unlink)
372
379
    except OSError, e:
373
380
        if e.errno in (errno.EPERM, errno.EACCES, errno.EBUSY, errno.EINVAL):
374
381
            # If we try to rename a non-existant file onto cwd, we get
379
386
        raise
380
387
 
381
388
 
 
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
 
382
399
def _mac_getcwd():
383
400
    return unicodedata.normalize('NFC', os.getcwdu())
384
401
 
389
406
realpath = _posix_realpath
390
407
pathjoin = os.path.join
391
408
normpath = os.path.normpath
 
409
rename = _wrapped_rename # overridden below on win32
392
410
getcwd = os.getcwdu
393
 
rename = os.rename
394
411
dirname = os.path.dirname
395
412
basename = os.path.basename
396
413
split = os.path.split
2285
2302
        return os.fdopen(os.open(filename, flags), mode, bufsize)
2286
2303
else:
2287
2304
    open_file = open
2288
 
 
2289
 
 
2290
 
def getuser_unicode():
2291
 
    """Return the username as unicode.
2292
 
    """
2293
 
    try:
2294
 
        user_encoding = get_user_encoding()
2295
 
        username = getpass.getuser().decode(user_encoding)
2296
 
    except UnicodeDecodeError:
2297
 
        raise errors.BzrError("Can't decode username as %s." % \
2298
 
                user_encoding)
2299
 
    return username