Mercurial > vim
view src/testdir/thread_util.py @ 33374:62a34e280593 v9.0.1946
patch 9.0.1946: filename expansion using ** in bash may fail
Commit: https://github.com/vim/vim/commit/9eb1ce531527a7177d16373b0f8689bbcd3d5f73
Author: Christian Brabandt <cb@256bit.org>
Date: Wed Sep 27 19:08:25 2023 +0200
patch 9.0.1946: filename expansion using ** in bash may fail
Problem: filename expansion using ** in bash may fail
Solution: Try to enable the globstar setting
Starting with bash 4.0 it supports extended globbing using the globstar
shell option. This makes matching recursively below a certain directory
using the ** pattern work as expected nowadays. However, we need to
explicitly enable this using the 'shopt -s globstar' bash command.
So let's check the bash environment variable $BASH_VERSINFO (which is
supported since bash 3.0 and conditionally enable the globstar option,
if the major version is at least 4. For older bashs, this at least
shouldn't cause errors (unless one is using really ancient bash 2.X or
something).
closes: #13002
closes: #13144
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 27 Sep 2023 19:15:06 +0200 |
parents | 06e3c6bac36d |
children |
line wrap: on
line source
import platform if platform.system() == 'Darwin': from ctypes import ( CDLL, POINTER, Structure, byref, c_int, c_uint, c_uint32, c_void_p, sizeof ) from ctypes.util import find_library class ThreadTimeConstraintPolicy(Structure): _fields_ = [ ("period", c_uint32), ("computation", c_uint32), ("constraint", c_uint32), ("preemptible", c_uint) ] _libc = CDLL(find_library('c')) THREAD_TIME_CONSTRAINT_POLICY = c_uint(2) THREAD_TIME_CONSTRAINT_POLICY_COUNT = c_uint( int(sizeof(ThreadTimeConstraintPolicy) / sizeof(c_int))) _libc.pthread_self.restype = c_void_p _libc.pthread_mach_thread_np.restype = c_uint _libc.pthread_mach_thread_np.argtypes = [c_void_p] _libc.thread_policy_get.restype = c_int _libc.thread_policy_get.argtypes = [ c_uint, c_uint, c_void_p, POINTER(c_uint), POINTER(c_uint) ] _libc.thread_policy_set.restype = c_int _libc.thread_policy_set.argtypes = [ c_uint, c_uint, c_void_p, c_uint ] def _mach_thread_self(): return _libc.pthread_mach_thread_np(_libc.pthread_self()) def _get_time_constraint_policy(default=False): thread = _mach_thread_self() policy_info = ThreadTimeConstraintPolicy() policy_infoCnt = THREAD_TIME_CONSTRAINT_POLICY_COUNT get_default = c_uint(default) kret = _libc.thread_policy_get( thread, THREAD_TIME_CONSTRAINT_POLICY, byref(policy_info), byref(policy_infoCnt), byref(get_default)) if kret != 0: return None return policy_info def _set_time_constraint_policy(policy_info): thread = _mach_thread_self() policy_infoCnt = THREAD_TIME_CONSTRAINT_POLICY_COUNT kret = _libc.thread_policy_set( thread, THREAD_TIME_CONSTRAINT_POLICY, byref(policy_info), policy_infoCnt) if kret != 0: raise OSError(kret) def set_high_priority(): policy_info = _get_time_constraint_policy(default=True) if not policy_info: return policy_info.preemptible = c_uint(False) _set_time_constraint_policy(policy_info)