/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Ā lp:bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2001
2001
# data at once.
2002
2002
MAX_SOCKET_CHUNK = 64 * 1024
2003
2003
 
 
2004
_end_of_stream_errors = [errno.ECONNRESET]
 
2005
for _eno in ['WSAECONNRESET', 'WSAECONNABORTED']:
 
2006
    _eno = getattr(errno, _eno, None)
 
2007
    if _eno is not None:
 
2008
        _end_of_stream_errors.append(_eno)
 
2009
del _eno
 
2010
 
 
2011
 
2004
2012
def read_bytes_from_socket(sock, report_activity=None,
2005
2013
        max_read_size=MAX_SOCKET_CHUNK):
2006
2014
    """Read up to max_read_size of bytes from sock and notify of progress.
2014
2022
            bytes = sock.recv(max_read_size)
2015
2023
        except socket.error, e:
2016
2024
            eno = e.args[0]
2017
 
            if eno == getattr(errno, "WSAECONNRESET", errno.ECONNRESET):
 
2025
            if eno in _end_of_stream_errors:
2018
2026
                # The connection was closed by the other side.  Callers expect
2019
2027
                # an empty string to signal end-of-stream.
2020
2028
                return ""
2395
2403
    except (ImportError, AttributeError):
2396
2404
        # Either the fcntl module or specific constants are not present
2397
2405
        pass
 
2406
 
 
2407
 
 
2408
def find_executable_on_path(name):
 
2409
    """Finds an executable on the PATH.
 
2410
    
 
2411
    On Windows, this will try to append each extension in the PATHEXT
 
2412
    environment variable to the name, if it cannot be found with the name
 
2413
    as given.
 
2414
    
 
2415
    :param name: The base name of the executable.
 
2416
    :return: The path to the executable found or None.
 
2417
    """
 
2418
    path = os.environ.get('PATH')
 
2419
    if path is None:
 
2420
        return None
 
2421
    path = path.split(os.pathsep)
 
2422
    if sys.platform == 'win32':
 
2423
        exts = os.environ.get('PATHEXT', '').split(os.pathsep)
 
2424
        exts = [ext.lower() for ext in exts]
 
2425
        base, ext = os.path.splitext(name)
 
2426
        if ext != '':
 
2427
            if ext.lower() not in exts:
 
2428
                return None
 
2429
            name = base
 
2430
            exts = [ext]
 
2431
    else:
 
2432
        exts = ['']
 
2433
    for ext in exts:
 
2434
        for d in path:
 
2435
            f = os.path.join(d, name) + ext
 
2436
            if os.access(f, os.X_OK):
 
2437
                return f
 
2438
    return None