~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

(mbp) (mbp) better message when rename fails inside TreeTransform (Martin
 Pool)

Show diffs side-by-side

added added

removed removed

Lines of Context:
361
361
    return _win32_fixdrive(tempfile.mkdtemp(*args, **kwargs).replace('\\', '/'))
362
362
 
363
363
 
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
364
def _win32_rename(old, new):
373
365
    """We expect to be able to atomically replace 'new' with old.
374
366
 
376
368
    and then deleted.
377
369
    """
378
370
    try:
379
 
        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)
380
372
    except OSError, e:
381
373
        if e.errno in (errno.EPERM, errno.EACCES, errno.EBUSY, errno.EINVAL):
382
374
            # If we try to rename a non-existant file onto cwd, we get
387
379
        raise
388
380
 
389
381
 
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
382
def _mac_getcwd():
401
383
    return unicodedata.normalize('NFC', os.getcwdu())
402
384
 
407
389
realpath = _posix_realpath
408
390
pathjoin = os.path.join
409
391
normpath = os.path.normpath
410
 
rename = _wrapped_rename # overridden below on win32
411
392
getcwd = os.getcwdu
 
393
rename = os.rename
412
394
dirname = os.path.dirname
413
395
basename = os.path.basename
414
396
split = os.path.split