Selected changesmerged Sep 12, 2026 – Sep 18, 2026
pr_file_map.py: fetch PR files concurrently with asyncioPython · 80 + / 9 −
Introduces 4 new declarations in scripts/pr_file_map.py.
Adds new core implementation rather than adjusting what was there. Read the linked PR for the surrounding test context.
scripts/pr_file_map.py ↗ · 1 files
@@ -118,12 +126,67 @@ def get_open_prs() -> list[dict]: return [pr for pr in json.loads(raw) if pr["number"] not in ignore] -def get_pr_files(pr_number: int) -> list[str]:- raw = run_gh(["pr", "view", str(pr_number), "--json", "files"])+async def run_gh_async(args: list[str], semaphore: asyncio.Semaphore) -> str:+ """Async counterpart of run_gh, throttled by a shared semaphore.++ The semaphore bounds how many `gh` subprocesses run at once so we speed up+ the many-round-trip "first pass" without flooding the GitHub API.+ """+ async with semaphore:+ try:+ proc = await asyncio.create_subprocess_exec(+ "gh",+ *args,+ stdout=asyncio.subprocess.PIPE,+ stderr=asyncio.subprocess.PIPE,+ )+ except FileNotFoundError:+ sys.exit("Error: 'gh' (GitHub CLI) is not installed or not in PATH.")+ stdout, stderr = await proc.communicate()+ if proc.returncode != 0:+ sys.exit(f"Error running 'gh {' '.join(args)}':\n{stderr.decode().strip()}")+ return stdout.decode()+++async def get_pr_files_async(pr_number: int, semaphore: asyncio.Semaphore) -> list[str]:+ raw = await run_gh_async(+ ["pr", "view", str(pr_number), "--json", "files"], semaphore+ ) data = json.loads(raw) return [f["path"] for f in data.get("files", [])]
fix(cli): preserve double dash before the entrypointRust · 188 + / 0 −
Introduces 8 new declarations in libs/cli_parser/src/tests.rs.
Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.
libs/cli_parser/src/tests.rs ↗ · 3 files
@@ -1195,6 +1214,48 @@ fn eval_print() { assert_eq!(r.get_one("code_arg"), Some("1+1")); } +#[test]+fn eval_double_dash_before_code() {+ let r = parse(+ &TEST_ROOT,+ &svec!["deno", "eval", "--", "-1; console.log(0)", "arg1"],+ )+ .unwrap();+ assert_eq!(r.get_one("code_arg"), Some("-1; console.log(0)"));+ assert_eq!(r.trailing, vec!["arg1"]);+}++#[test]+fn eval_double_dash_before_code_keeps_second_separator() {+ // Only the first `--` is special (mirrors clap): it was consumed to make+ // the positional literal, so a later `--` is forwarded as-is even though+ // eval strips the separator in `deno eval code -- a`.+ let r =+ parse(&TEST_ROOT, &svec!["deno", "eval", "--", "code", "--", "a"]).unwrap();+ assert_eq!(r.get_one("code_arg"), Some("code"));+ assert_eq!(r.trailing, vec!["--", "a"]);+}++#[test]+fn upgrade_double_dash_stays_trailing() {+ // Commands without trailing var args don't enter positional-only mode:+ // `--` still starts (unused) trailing args, as before.+ let r =+ parse(&TEST_ROOT, &svec!["deno", "upgrade", "--", "v1", "v2"]).unwrap();+ assert_eq!(r.get_one("version-or-hash-or-channel"), None);+ assert_eq!(r.trailing, vec!["v1", "v2"]);
Destabilize `VaArgSafe`Rust · 17 + / 15 −
Reworks 26 lines of existing logic in library/core/src/ffi/va_list.rs.
Changes how existing language design behaves. Tests changed with it, with code of their own.
library/core/src/ffi/va_list.rs ↗ · 5 files
@@ -344,18 +344,18 @@ crate::cfg_select! { } } -#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for i32 {}-#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for i64 {}-#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for isize {} -#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for u32 {}-#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for u64 {}-#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for usize {} // Implement `VaArgSafe` for 128-bit integers on targets where clang provides `__int128`.
ENH: speed up the fixed-width string casts and unicode scalarsC · 16 + / 11 −
Reworks 24 lines of existing logic in numpy/_core/src/multiarray/scalarapi.c.
Changes how existing core implementation behaves. Read the linked PR for the surrounding test context.
numpy/_core/src/multiarray/scalarapi.c ↗ · 3 files
@@ -500,25 +500,30 @@ PyArray_Scalar(void *data, PyArray_Descr *descr, PyObject *base) } } if (type_num == NPY_UNICODE) {- /* we need the full string length here, else copyswap will write too- many bytes */- void *buff = PyMem_RawMalloc(descr->elsize);- if (buff == NULL) {- return PyErr_NoMemory();- }- memcpy(buff, data, itemsize);- if (swap) {- byte_swap_vector(buff, itemsize / 4, 4);+ void *buff = NULL;+ const void *ucs4 = data;++ /* only copy when the data cannot be handed to CPython as it is */+ if (swap || !npy_is_aligned(data, NPY_ALIGNOF(Py_UCS4))) {+ buff = PyMem_RawMalloc(descr->elsize);+ if (buff == NULL) {+ return PyErr_NoMemory();+ }+ memcpy(buff, data, itemsize);+ if (swap) {+ byte_swap_vector(buff, itemsize / 4, 4);+ }+ ucs4 = buff; } /* truncation occurs here */- PyObject *u = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buff, itemsize / 4);+ PyObject *u = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, ucs4, itemsize / 4); PyMem_RawFree(buff); if (u == NULL) {
trace_events: fix abort when Node.js does not own the V8 platformJavaScript · 12 + / 2 −
Reworks 8 lines of existing logic in lib/trace_events.js.
Changes how existing runtime behaves. Tests changed with it, with code of their own.
lib/trace_events.js ↗ · 4 files
@@ -15,10 +15,14 @@ const { } = require('internal/errors').codes; const { ownsProcessState } = require('internal/worker');-if (!hasTracing || !ownsProcessState)+const {+ CategorySet,+ getEnabledCategories,+ hasAgent,+} = internalBinding('trace_events');+if (!hasTracing || !ownsProcessState || !hasAgent()) throw new ERR_TRACE_EVENTS_UNAVAILABLE(); -const { CategorySet, getEnabledCategories } = internalBinding('trace_events'); const { customInspectSymbol } = require('internal/util'); const { format } = require('internal/util/inspect'); const {