77
78
O_BINARY = getattr(os, 'O_BINARY', 0)
81
def get_unicode_argv():
83
user_encoding = get_user_encoding()
84
return [a.decode(user_encoding) for a in sys.argv[1:]]
85
except UnicodeDecodeError:
86
raise errors.BzrError(("Parameter '%r' is unsupported by the current "
80
90
def make_readonly(filename):
81
91
"""Make a filename read-only."""
82
92
mod = os.lstat(filename).st_mode
390
400
def rmtree(path, ignore_errors=False, onerror=_win32_delete_readonly):
391
401
"""Replacer for shutil.rmtree: could remove readonly dirs/files"""
392
402
return shutil.rmtree(path, ignore_errors, onerror)
404
f = win32utils.get_unicode_argv # special function or None
393
408
elif sys.platform == 'darwin':
394
409
getcwd = _mac_getcwd
853
868
return pathjoin(*p)
871
def parent_directories(filename):
872
"""Return the list of parent directories, deepest first.
874
For example, parent_directories("a/b/c") -> ["a/b", "a"].
877
parts = splitpath(dirname(filename))
879
parents.append(joinpath(parts))
857
885
from bzrlib._chunks_to_lines_pyx import chunks_to_lines
858
886
except ImportError:
1800
1828
termios.tcsetattr(fd, termios.TCSADRAIN, settings)
1832
if sys.platform == 'linux2':
1833
def _local_concurrency():
1835
prefix = 'processor'
1836
for line in file('/proc/cpuinfo', 'rb'):
1837
if line.startswith(prefix):
1838
concurrency = int(line[line.find(':')+1:]) + 1
1840
elif sys.platform == 'darwin':
1841
def _local_concurrency():
1842
return subprocess.Popen(['sysctl', '-n', 'hw.availcpu'],
1843
stdout=subprocess.PIPE).communicate()[0]
1844
elif sys.platform[0:7] == 'freebsd':
1845
def _local_concurrency():
1846
return subprocess.Popen(['sysctl', '-n', 'hw.ncpu'],
1847
stdout=subprocess.PIPE).communicate()[0]
1848
elif sys.platform == 'sunos5':
1849
def _local_concurrency():
1850
return subprocess.Popen(['psrinfo', '-p',],
1851
stdout=subprocess.PIPE).communicate()[0]
1852
elif sys.platform == "win32":
1853
def _local_concurrency():
1854
# This appears to return the number of cores.
1855
return os.environ.get('NUMBER_OF_PROCESSORS')
1857
def _local_concurrency():
1862
_cached_local_concurrency = None
1864
def local_concurrency(use_cache=True):
1865
"""Return how many processes can be run concurrently.
1867
Rely on platform specific implementations and default to 1 (one) if
1868
anything goes wrong.
1870
global _cached_local_concurrency
1871
if _cached_local_concurrency is not None and use_cache:
1872
return _cached_local_concurrency
1875
concurrency = _local_concurrency()
1876
except (OSError, IOError):
1879
concurrency = int(concurrency)
1880
except (TypeError, ValueError):
1883
_cached_concurrency = concurrency