Show More
@@ -1231,6 +1231,10 b' coreconfigitem(' | |||
|
1231 | 1231 | b'ui', b'askusername', default=False, |
|
1232 | 1232 | ) |
|
1233 | 1233 | coreconfigitem( |
|
1234 | b'ui', b'available-memory', default=None, | |
|
1235 | ) | |
|
1236 | ||
|
1237 | coreconfigitem( | |
|
1234 | 1238 | b'ui', b'clonebundlefallback', default=False, |
|
1235 | 1239 | ) |
|
1236 | 1240 | coreconfigitem( |
@@ -2119,6 +2119,22 b' class ui(object):' | |||
|
2119 | 2119 | if (b'ui', b'quiet') in overrides: |
|
2120 | 2120 | self.fixconfig(section=b'ui') |
|
2121 | 2121 | |
|
2122 | def estimatememory(self): | |
|
2123 | """Provide an estimate for the available system memory in Bytes. | |
|
2124 | ||
|
2125 | This can be overriden via ui.available-memory. It returns None, if | |
|
2126 | no estimate can be computed. | |
|
2127 | """ | |
|
2128 | value = self.config(b'ui', b'available-memory') | |
|
2129 | if value is not None: | |
|
2130 | try: | |
|
2131 | return util.sizetoint(value) | |
|
2132 | except error.ParseError: | |
|
2133 | raise error.ConfigError( | |
|
2134 | _(b"ui.available-memory value is invalid ('%s')") % value | |
|
2135 | ) | |
|
2136 | return util._estimatememory() | |
|
2137 | ||
|
2122 | 2138 | |
|
2123 | 2139 | class paths(dict): |
|
2124 | 2140 | """Represents a collection of paths and their configs. |
@@ -3626,3 +3626,44 b' def with_lc_ctype():' | |||
|
3626 | 3626 | locale.setlocale(locale.LC_CTYPE, oldloc) |
|
3627 | 3627 | else: |
|
3628 | 3628 | yield |
|
3629 | ||
|
3630 | ||
|
3631 | def _estimatememory(): | |
|
3632 | """Provide an estimate for the available system memory in Bytes. | |
|
3633 | ||
|
3634 | If no estimate can be provided on the platform, returns None. | |
|
3635 | """ | |
|
3636 | if pycompat.sysplatform.startswith(b'win'): | |
|
3637 | # On Windows, use the GlobalMemoryStatusEx kernel function directly. | |
|
3638 | from ctypes import c_long as DWORD, c_ulonglong as DWORDLONG | |
|
3639 | from ctypes.wintypes import Structure, byref, sizeof, windll | |
|
3640 | ||
|
3641 | class MEMORYSTATUSEX(Structure): | |
|
3642 | _fields_ = [ | |
|
3643 | ('dwLength', DWORD), | |
|
3644 | ('dwMemoryLoad', DWORD), | |
|
3645 | ('ullTotalPhys', DWORDLONG), | |
|
3646 | ('ullAvailPhys', DWORDLONG), | |
|
3647 | ('ullTotalPageFile', DWORDLONG), | |
|
3648 | ('ullAvailPageFile', DWORDLONG), | |
|
3649 | ('ullTotalVirtual', DWORDLONG), | |
|
3650 | ('ullAvailVirtual', DWORDLONG), | |
|
3651 | ('ullExtendedVirtual', DWORDLONG), | |
|
3652 | ] | |
|
3653 | ||
|
3654 | x = MEMORYSTATUSEX() | |
|
3655 | x.dwLength = sizeof(x) | |
|
3656 | windll.kernel32.GlobalMemoryStatusEx(byref(x)) | |
|
3657 | return x.ullAvailPhys | |
|
3658 | ||
|
3659 | # On newer Unix-like systems and Mac OSX, the sysconf interface | |
|
3660 | # can be used. _SC_PAGE_SIZE is part of POSIX; _SC_PHYS_PAGES | |
|
3661 | # seems to be implemented on most systems. | |
|
3662 | try: | |
|
3663 | pagesize = os.sysconf(os.sysconf_names['SC_PAGE_SIZE']) | |
|
3664 | pages = os.sysconf(os.sysconf_names['SC_PHYS_PAGES']) | |
|
3665 | return pagesize * pages | |
|
3666 | except OSError: # sysconf can fail | |
|
3667 | pass | |
|
3668 | except KeyError: # unknown parameter | |
|
3669 | pass |
General Comments 0
You need to be logged in to leave comments.
Login now