Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2197022/?format=api
{ "id": 2197022, "url": "http://patchwork.ozlabs.org/api/patches/2197022/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260216212952.420120-6-jsnow@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260216212952.420120-6-jsnow@redhat.com>", "list_archive_url": null, "date": "2026-02-16T21:29:37", "name": "[v7,05/19] python/mkvenv: add mechanism to install local package(s)", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "3a696ae09cad36cf539ffdc9145dba19ee393616", "submitter": { "id": 64343, "url": "http://patchwork.ozlabs.org/api/people/64343/?format=api", "name": "John Snow", "email": "jsnow@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260216212952.420120-6-jsnow@redhat.com/mbox/", "series": [ { "id": 492353, "url": "http://patchwork.ozlabs.org/api/series/492353/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=492353", "date": "2026-02-16T21:29:34", "name": "python: drop qemu.qmp from qemu.git tree", "version": 7, "mbox": "http://patchwork.ozlabs.org/series/492353/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2197022/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2197022/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=fuWbBVvz;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fFGDy1yx6z1xwF\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 08:31:46 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vs6B4-0005eV-0X; Mon, 16 Feb 2026 16:30:46 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1vs6Az-0005dF-Uo\n for qemu-devel@nongnu.org; Mon, 16 Feb 2026 16:30:42 -0500", "from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1vs6Ax-0003sK-3c\n for qemu-devel@nongnu.org; Mon, 16 Feb 2026 16:30:40 -0500", "from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-496-SyikLEWOPEqzm-vb4SYrNg-1; Mon,\n 16 Feb 2026 16:30:35 -0500", "from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 046DC195605B; Mon, 16 Feb 2026 21:30:33 +0000 (UTC)", "from jsnow-thinkpadp16vgen1.westford.csb (unknown [10.22.88.120])\n by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 86AC519560A3; Mon, 16 Feb 2026 21:30:26 +0000 (UTC)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1771277438;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=4hgravtsOkkk5VDUuh01/2wbYrlfoToX4zteClpnseI=;\n b=fuWbBVvzAaudCqkkjxhWmtIo+EZOfAEPL3BRQuNIL5+F8x1CW/UFHwIW5YP4qF3PGgKgVb\n 7cBfBPceX+XwfmSsgAgMCU6E8FOPHxG8mDbG52zVaNuqXQ4SeWxJqduLbpAqS1Tcs4R6y6\n UqCOv4S1pIgoHCxIe9KiSOv/R8Ody2U=", "X-MC-Unique": "SyikLEWOPEqzm-vb4SYrNg-1", "X-Mimecast-MFC-AGG-ID": "SyikLEWOPEqzm-vb4SYrNg_1771277433", "From": "John Snow <jsnow@redhat.com>", "To": "qemu-devel@nongnu.org", "Cc": "qemu-block@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,\n Pierrick Bouvier <pierrick.bouvier@linaro.org>,\n Cleber Rosa <crosa@redhat.com>, Mahmoud Mandour <ma.mandourr@gmail.com>,\n Markus Armbruster <armbru@redhat.com>,\n =?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Thomas Huth <thuth@redhat.com>,\n Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>,\n Kyle Evans <kevans@freebsd.org>, Peter Xu <peterx@redhat.com>, =?utf-8?q?Al?=\n\t=?utf-8?q?ex_Benn=C3=A9e?= <alex.bennee@linaro.org>, =?utf-8?q?Daniel_P=2E_?=\n\t=?utf-8?q?Berrang=C3=A9?= <berrange@redhat.com>,\n Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,\n Yonggang Luo <luoyonggang@gmail.com>, John Snow <jsnow@redhat.com>,\n Warner Losh <imp@bsdimp.com>, Maksim Davydov <davydov-max@yandex-team.ru>,\n Alexandre Iooss <erdnaxe@crans.org>,\n =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n Ed Maste <emaste@freebsd.org>, Kevin Wolf <kwolf@redhat.com>,\n Fabiano Rosas <farosas@suse.de>, Michael Roth <michael.roth@amd.com>,\n Li-Wen Hsu <lwhsu@freebsd.org>, Hanna Reitz <hreitz@redhat.com>", "Subject": "[PATCH v7 05/19] python/mkvenv: add mechanism to install local\n package(s)", "Date": "Mon, 16 Feb 2026 16:29:37 -0500", "Message-ID": "<20260216212952.420120-6-jsnow@redhat.com>", "In-Reply-To": "<20260216212952.420120-1-jsnow@redhat.com>", "References": "<20260216212952.420120-1-jsnow@redhat.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.12", "Received-SPF": "pass client-ip=170.10.133.124; envelope-from=jsnow@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Currently, we \"implicitly\" install the local 'qemu' python package for\n'make check-venv' with some logic inside tests/Makefile.include. I would\nlike to make this installation explicit in pythondeps.toml instead.\n\nThis patch adds a path constraint that can be used in lieu of version\nconstraints to specify that a package should be installed from the\nsource tree instead of from PyPI or vendored packages. This is done to\nallow us to install the python packages hosted inside of the tree while\nalso processing dependencies; i.e. so that our \"qemu\" package can\nspecify that it needs \"qemu.qmp\", which soon will not be included in\nqemu.git.\n\nThis also has the benefit of being able to specify in a declarative\nconfiguration file that our pyvenv environment *will* have our local\npython packages installed and available without any PYTHONPATH hacks,\nwhich should simplify iotests, device-crash-test and functional tests\nwithout needing to manage local inclusion paths in environment\nvariables.\n\nOn the downsides, installing packages through mkvenv/ensuregroup means\nthat there are extra steps we need to take in order to install a local\npackage *offline*; namely we must disable build isolation (so we have\naccess to setuptools) and we must also include python3-wheel in QEMU's\nbuild dependencies in order for \"make check\" to run successfully when in\nan offline, isolated environment. These extra dependencies are handled\nin a forthcoming commit; for now, nothing is utilizing this new pathway.\n\nSigned-off-by: John Snow <jsnow@redhat.com>\nReviewed-by: Thomas Huth <thuth@redhat.com>\n---\n python/scripts/mkvenv.py | 37 +++++++++++++++++++++++++++++++------\n 1 file changed, 31 insertions(+), 6 deletions(-)", "diff": "diff --git a/python/scripts/mkvenv.py b/python/scripts/mkvenv.py\nindex b4662d33e6e..8ed6a354505 100644\n--- a/python/scripts/mkvenv.py\n+++ b/python/scripts/mkvenv.py\n@@ -662,6 +662,7 @@ def pip_install(\n args: Sequence[str],\n online: bool = False,\n wheels_dir: Optional[Union[str, Path]] = None,\n+ env: Optional[Dict[str, str]] = None,\n ) -> None:\n \"\"\"\n Use pip to install a package or package(s) as specified in @args.\n@@ -687,6 +688,7 @@ def pip_install(\n full_args += list(args)\n subprocess.run(\n full_args,\n+ env=env,\n check=True,\n )\n \n@@ -733,9 +735,14 @@ def _do_ensure(\n :param wheels_dir: If specified, search this path for packages.\n \"\"\"\n absent = []\n+ local_packages = []\n present = []\n canary = None\n for name, info in group.items():\n+ if \"path\" in info:\n+ pkgpath = Path(__file__).parents[2].joinpath(info[\"path\"])\n+ local_packages.append(str(pkgpath))\n+ continue\n constraint = _make_version_constraint(info, False)\n matcher = Matcher(name + constraint)\n print(f\"mkvenv: checking for {matcher}\", file=sys.stderr)\n@@ -770,15 +777,33 @@ def _do_ensure(\n print(f\"mkvenv: installing {', '.join(absent)}\", file=sys.stderr)\n try:\n pip_install(args=absent, online=online, wheels_dir=wheels_dir)\n- return None\n+ absent = []\n except subprocess.CalledProcessError:\n pass\n \n- return diagnose(\n- absent[0],\n- online,\n- wheels_dir,\n- canary,\n+ if absent:\n+ return diagnose(\n+ absent[0],\n+ online,\n+ wheels_dir,\n+ canary,\n+ )\n+\n+ # Handle local packages separately and last so we can use different\n+ # installation arguments (-e), and so that any dependencies that may\n+ # be covered above will be handled according to the depfile\n+ # specifications.\n+ if local_packages:\n+ print(f\"mkvenv: installing {', '.join(local_packages)}\",\n+ file=sys.stderr)\n+ env = dict(os.environ)\n+ env['PIP_CONFIG_SETTINGS'] = \"editable_mode=compat\"\n+ pip_install(\n+ args=[\"--no-build-isolation\",\n+ \"-e\"] + local_packages,\n+ online=online,\n+ wheels_dir=wheels_dir,\n+ env=env,\n )\n \n return None\n", "prefixes": [ "v7", "05/19" ] }