From patchwork Tue Jun 23 13:35:13 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90743 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id D1662CDB480 for ; Tue, 23 Jun 2026 13:35:38 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.45]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.20962.1782221729473356181 for ; Tue, 23 Jun 2026 06:35:30 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=0b7meMdN; spf=pass (domain: est.tech, ip: 40.107.162.45, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PsgrQtUcxNWPa7sCSU7OAu1rOzm45jb0c43Pam/d8jImIaDsumc8stnXWTk43ofRWxiqyK1RHP7qoYH6Bx/HUoso218vYjPiivN9GYwg4WCsYDhjwaIwXlCcxU9/5rHnZtin82M90QwXFJ6vbbfXTBvsKGZzXMEwWdMdvAZUa9IAU6uEX+uLiA8K+QAretF1bPHxW/Nnju8sIE0o26jNMVwymj6m+u1RLPOv4twJeMHo78coHv8uXZjQ/7QT4+bxpZ6+QEfz1kj6JalwAsGOAdfg2KHoQebWKTa5dVusWZBTZrTJgZN5mgzHAiSnvnUZw69xFjxbU/DykRQaWrY6ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tr5xyvAjHrAr/JGTcwEbwEhjXHO4WKUV0tHv08/tb1Q=; b=IOeJVrDkPdjzNXYmCloNmLo8p3sSTC6VTTsmfo7xLEhxbSw9j2hM8WBPQ1Ai7tBoUNKh6dixU6PDwTWipbUnDQzTMqm/NYMkZMoi2bbKw3zPk//WbeXkZZdJGtyJD1oNGQPU/LgwWzS0KiyWmhxW+1goxmSoCe2/nW/dFJ2lM7XTJwXUjn3ux4B9ZjRVtZmENciRzX5cyhp4wbDzXUtq5WyjJIr4vqlaM3uUctXK8cuLuXSdvlAby7PpZsBPcg51SGZeAugDlK4lQ8P/F25YuMv+a2DwC17y33O+xXCxHMJArdpNhCh4sitcNGR/AFjWMRiw7bGMWkUrX/yaOTLveA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tr5xyvAjHrAr/JGTcwEbwEhjXHO4WKUV0tHv08/tb1Q=; b=0b7meMdNuKZCcVhgx+rnD2D0uokWxGGrkJptNLj+ZeG6yG/owajK3AwR+A773fksOT177RrDvVBLDb+3o1uy8dMx7wK0NQUOOxux0z6JlPuWyKqao5mqwJD2XzZjLVM6JeNQTdx2ch8kGU+rrEmquZQkgRX+3Sg9dOkFJO0akST67yXGvt+UWMUZs0EKv8G8cCPfsdJqTnigABQUrw/NsS68sNLolslxb2MpNRFspdNL5EbWFbWaSVVQvEoQYawZzGHyKdiXpOgk3Y0vhJfJqEujzNGVPRyIf5WW9SPeNw/BFdYHPoQbUJpsiwL2B9tUlA3ZRMlMYOwMAhfvpxRu/g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by DU4P189MB2742.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:566::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Tue, 23 Jun 2026 13:35:27 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:27 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 1/9] oe/patch: drop shell=True from runcmd Date: Tue, 23 Jun 2026 15:35:13 +0200 Message-ID: <20260623133521.17053-2-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DUZPR01CA0010.eurprd01.prod.exchangelabs.com (2603:10a6:10:3c3::12) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|DU4P189MB2742:EE_ X-MS-Office365-Filtering-Correlation-Id: cb3bac33-3385-4bb7-89b2-08ded12c4954 X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|23010399003|18002099003|22082099003|56012099006|5023799004|11063799006|6133799003; X-Microsoft-Antispam-Message-Info: p7iB8Nqu6ZyaMpNPVfpbOVvTiyX4Ti783betKQr3e858rILatwq0lCcXBRpEcgDNNUqNQ36iqeOsFW6mlhl41cHhXwLdc00VjSILFLIIDuxHiwdbN6m7/ZCsH+0E1v3weEAOn1pQxafcDg35CyYIR88o2+eld9F7WOT1lO52bWdLzab4zq5/upwighPSfYA8Uy0RibmrvCQjY/CLGH8bGvGGV3O332UNrkcGIvW/9BnQMczsKHJTDwgYaLpyXGUBZFrZClIxrKi27VcOsLWVhHPz1nJkrqtYL8P9woSKe8ZtExohK/1CUA55RFppjG4wiN8J1fntFKwpe1PmFPr1Ourv4l9xRKvkaO2MVZW87T4zQCJkK3HRtucVXQifUtXGd4qoD6z0G4Iz9JkoT6TZl2Bo5cg2sF/7+TWqfmcE0nNR4RiMPjuQyrBrxbUFnRrUvQUTLThAf6Kr/A18Xdm5yK3y2/Hjf9LqHG99jwnx2kuw54SHbCmTX39uMSDVAeA2Fi1akuVRQLov6nDwTp8VTHWYsM6bvOKgmw2zma9+/4unwSOMPAhsfmZQvI3qSWzZhMAOZwpzeOIL3vINDRoEkQ+0iv/Bny2YaQAjh7hTL9XhnXCtI/geLHKVeBgP49FHTiOkSZLbjDVNoKRnoqFZ5rboyZBdjNzzZbR9bmKB5q4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(18002099003)(22082099003)(56012099006)(5023799004)(11063799006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Z2p/kmDMBd5wke9Bkn1H3c63ww8Jbi1CnNdv+hzottgWCuSqDt09TApjVPUkA/azn42xU155U8qUu5dcgpUkd2YcUfuAAIYA93MaQaNYGfVs6ufW/gVpJ42wmjDRps7cMUiNsGOM/13z/wZPWw0K2zijUiUWcPhJhJU8N27T+Y5rqYjyRaIE7VicpEBP5Qk0XqxJlD6UmOuMsgxAb8oySSIWhoCB+sIzF+BmJHWiANruIrh9d7EdVewXHK0aGNM8v4nP71i0sB7KwlpRfYE9/qbjPIAzV+yU4+E4PZm/zcvZROOtofdL/2MN4s1YIIowQcVh2bKFy1BcdMWXQjfr2qcDMUKIZQbicLto5sO6vEYI7xRGkR+2wRq56K2DNj7MA8Y6gm2PBR0m1zSGylCblvrt8t8SCoHlKgnvN+uOlt0SrHY8pPPJp00jF1W75X2ujKWZHLcPBxGAaURJip/GkY79NZUooqgyWZjsZYVE4jN9TY9jNfL2TFuiHHhkPv7nqbLdrqxa588kW5DO7I2XrL+crR7bua6wwEblvKGhnXzbt9xknFAY5UORfMolAbdUaCjDtWLqS39478Hp0NrsHjOKWSAQji5vUmvDxZi4AWdNT3SbIvxbQkoQK5tQVSmNFjAH9+llV5nZIFvx848DR1UKN53ixl3+XaSap8UmwHb343j66DB8tutkp4dVbXJrLHGHoBD2Zdz3blfR99D2h4RUthmg21ZZkFuMOIdfHWMzQ5DJBh7ArAj6ebt1zaxsGcxjrn7lzbQ8td/t4OUjMh7e03K55lPju7NlhZoASnQ7twKRGsZv+NETAh0sv5PExqsD8K/XPhta+bMzXVW8xo1BtvN//SMquATPr0IGHe5ytJSTVoCwDWUsJT0NFDlWdmpmKAhhJOq104/ONJ4m+tN1ASj/SKJ1l5v6oih7qt90P8/GJMhcznaBx6lQkXp6C4X4qSfDhHTdUPHxoNs6UU3Td6/wqwyQgpeoJ/YaSD/sZ8Og72BcXrZo6Ng8E94fHDmf4LIhVTGqEO5qHlBH1oiVwQFn8Fx5a26ziU/vDQ9I3WjL13kPAE4XULqH8uvCRL3YEI82w8fDmK1eddaj7zCyUbJ+p3fU/AI+OcAxt44mJmFQTsRzP1ouT/jB881bwYOhh9g+jMoMAY46NfA/FMDZnq+wtxqgErVCcRZrEZaXIFGg15SPgooEmMGSkyuqZcgH/IWsU5ELC+RM+3F/gVbcUvsB4bZ3f3AiGFfWPe5pw6cVJy4UtUGfcSNB5ZSt715BPWmFNNFqDW9FXs12T94WbFpm6rFcF5HD8agNM5VB8W7dQY1tNO9uUUDZLyQVZe2E0U8sgFG1d+Ia1WFZwBWTKdKWA3sK8IrR9H+6X4St/TNlSEkDs0Tq0e7NNgHI4J2qv91oMIOMmdC61SkdBGanA9vFmWjXALgf+FcM5brVBYqZQQoZ7B4Ej88HWor19nsqGgvb+pTogvUolPiiwe7QXPce7kVt/ZXDcsqVUS8gT3fCN76zfgEtDlBvzlQ1fA3MiPfLQYwKOf2wGVYOpnA+4qbebhFC94aE6Pdn+ZdKZMtkxaHE6YxgS7zkFBOEYRST7vM3K2hfwn1kpjaJfU6JQ70KW7Kko4EOmAUIQjF7FVz5V7UuU8TtWN9IFuNwkscyaM6YypRCxuyjECxdyM6hUKBjZIwLOq8CCRr9XtdVniiSskGf5Bdkec78deCSs/Jj8UWisZVNZTRmeec2Hg== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: cb3bac33-3385-4bb7-89b2-08ded12c4954 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:27.2921 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KA8qk4xcAqGnvJO/CAIzjhRavcc5i5nZPM6nD2vuWrHe6eLlQNrQtfVmLsNS5V63K7Yz12h894vUQlsi7kUW+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4P189MB2742 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:38 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239394 Run runcmd() argument lists directly instead of joining them into a shell command string. Callers that still require shell syntax continue to invoke sh -c explicitly and are left for separate cleanup. Running Popen with shell=True could return shell status 127/126. Preserve that behavior by translating the errno codes. Unrelated bug fix: Stop shifting the return code by 8 bits. subprocess.Popen.returncode is already the process exit status. Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oe/patch.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 2cd8de22c7..b152a2d784 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -5,6 +5,7 @@ # import os +import errno import shlex import subprocess import oe.path @@ -37,16 +38,19 @@ def runcmd(args, dir = None): # print("cwd: %s -> %s" % (olddir, dir)) try: - args = [ shlex.quote(str(arg)) for arg in args ] - cmd = " ".join(args) - # print("cmd: %s" % cmd) - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + cmd = [str(arg) for arg in args] + print_cmd = shlex.join(cmd) + try: + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except OSError as exc: + status = 127 if exc.errno in (errno.ENOENT, errno.ENOTDIR) else 126 + raise CmdError(print_cmd, status, "stdout: \nstderr: %s" % exc) from exc stdout, stderr = proc.communicate() stdout = stdout.decode('utf-8') stderr = stderr.decode('utf-8') exitstatus = proc.returncode if exitstatus != 0: - raise CmdError(cmd, exitstatus >> 8, "stdout: %s\nstderr: %s" % (stdout, stderr)) + raise CmdError(print_cmd, exitstatus, "stdout: %s\nstderr: %s" % (stdout, stderr)) if " fuzz " in stdout and "Hunk " in stdout: # Drop patch fuzz info with header and footer to log file so # insane.bbclass can handle to throw error/warning From patchwork Tue Jun 23 13:35:14 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90740 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4D99ACDB46F for ; Tue, 23 Jun 2026 13:35:38 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.45]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.20962.1782221729473356181 for ; Tue, 23 Jun 2026 06:35:31 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=D3NCHklF; spf=pass (domain: est.tech, ip: 40.107.162.45, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UyHf7akgKmd+PsBsjht3TQZq2Dru4+R6de4kmuNo0fOqg4rML9bhj3BCBK2D5oYE2X3sgvfSSJRzZ4woZirsT+4dhdjA8C4/isxDlkHwgFNA610B3+qzK50AyQSbE0yRNgMRdoIhUpxUDS0+sFoS27NOq6r2cdoeFZVNy7a4G34sh+tHaCfmD3dMcHW8G2eDkTJc5k/U7uHRpskHtyECfjiRHx5pmVCZEZxP4PbXHpE6m8n5Ck1AX/O6e/PkuIY5zCTPsCCgW4eCjp6PtLNQO7lzpXFlF5qFLDzOpQWuy4FXjJo53V8zWSRA1H01nFCLp5WxS1sMv7nLjqutw7EEwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3/DhFVIi4jNXVhDXQAOm+A68oiuS0+O2tR/Sdw+nroI=; b=O8LMh8qdgp+uWB4NBhRMV6xH9Hsl17yOdkf9tNpKSIlkE+Sjnxlirb8Ot1e6/464Vg0aB+hyqPb3WxmAareLOsp2JukK3pmnYP3zN8PeP5QtomqBgira4SVdXkB9nxVgTST++Kgg32Adj8coS3Au9LxB3cxNy/W6oeDzWVS2SEY8zK9OJy0lwCXAVWyWw5H0ikwQ3A3eZp3f7gcX+DL3Ioq5JCbrxX9NKddsm3yDutnvKMW0m0mb8uMehebZwUZlPMUuxupCX2JBnlSLUbBG/aNkSo/8D4uKeyy4ZKn0kIaZ4B+zIG9jccvisI3jTiRUpUkBsTJ9h5SeQ8rpBEJoRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3/DhFVIi4jNXVhDXQAOm+A68oiuS0+O2tR/Sdw+nroI=; b=D3NCHklFMSVRS6ZB4bo+F9JjbgNyyTIAsc/M8vH7s2zbfP2nx9YzleFoygDKfJED3QMVzAb98p9VFf8SsZwG2sSfYgHerN9NmI5pzrJh/NKns8fYZTv5J5nknJZFbHiPcE7+TSQp1mVa7u4jovkA3ZU9t8xJ1V9ya1fsdB2qLPJ8hRBVGIxAGF2myUJuPBFMuNH79MoLctk0hDc7XVUK/os+DVtFY2AffQZH8biYo6Ed87rVVRe40oJbrsidVNY9IV+jE/DBMB6HJ9FbfUZ41ZKQrZQEVvZ4b4ISUN8E4y/7RNHyqH51SOygQ3HsfR2yQ9rvWP4lLr8aTR3747RZAw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by DU4P189MB2742.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:566::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Tue, 23 Jun 2026 13:35:28 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:28 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 2/9] oeqa/oelib: add runcmd tests Date: Tue, 23 Jun 2026 15:35:14 +0200 Message-ID: <20260623133521.17053-3-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DU2PR04CA0046.eurprd04.prod.outlook.com (2603:10a6:10:234::21) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|DU4P189MB2742:EE_ X-MS-Office365-Filtering-Correlation-Id: 2c01977c-d52b-48cc-3597-08ded12c4a0b X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|23010399003|18002099003|22082099003|56012099006|11063799006|3023799007; X-Microsoft-Antispam-Message-Info: ynHStapMzCKfX67rhIoRqw1o5gbRQWHbhc1dI8ktPKVsFKozV+p5JhxcszIpml8R0+3G8pOlVw1gRKouQ/fqUOkrbo7IeOdgoZP3tXES3+W5S208MsCXrkvw/1sBDfHdaoGxNGXTUqvc0DpEoInwHeqwWWpBWaBTPG/JVf+3bf4C6oZhLVHu/vcLQvVT6q2QHL7YP+HD3HyaobudUSuRlCmm3eKoFu7UkJui07d6dQwaoZHTfjQhcnEd9A0u9onr1AUXlmOj/zk6NOYOagimKH2M/ernMaC8tNYckwcZqcj6gN6aBfjkpe2byy0YrOAGEzU/BMku0foO40SCT6Y5C9eUpaKyYdy9I+ww3MvFG/Sohh3vq1r83Trtl5DVEOLh77jBTVT4G3xzN4a1trN/LjgkDQ75xccJAS4m5BBp4lQlx9W5o3ti3IocA/WHmz0OpPlD6wuMw/I4exIUE+19rPdkfwFGMkgc5D8keKA2Qj481Ke8jeIC73BtUsReT39Jo05niMN8i7bwLo/PSiRUxgw+IpFH0LFhr7LP3Teq8SA4URLiOIIWBT2yVyx/ogtv8lghqv1IYJAhWojymppzrT24g/rlCgcvBlz126+PCYs4LQD27tPTOHPfPz7G3KgIluOsMLtgfTn5XzUis9bt5ozxkVeUaTZRDbUBe3kqjDU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DpFiXiULclc2nDcl4V7pfaKdyvs3yIy3nvOEYFKH+faVY0SgSwf/0UlOJPw5mi+Wxg/DgpzpQch0uV3bh6zDI77fayuZOpAaDSGiPyrHXJbTniB9K1hIwXO2BZ4gIW4ukSOaOFMRuf8/mGOU9nktrnxAJXtzaVj0TEH5xpGBBTWsOokj0YFpXiuC5MvG/BSediHmQatH7kSwFpMRU96058pUlifwY03+AYSXD4JW3yP9HUFeb+rvkqrNfvREDnYA6m2/2gwSELgp0BF9JCythkVEcF+tAC3HhFH4dRDc5n3JMtL6XVFXxi5gvbwlb6dK4GvXTcRsZ1NKzWS4cDPXMAaLcVtPErgcE682syzfywWtCRXMIpDZrn+f2n1SwrqmshGSQ/pR7G8j92pXryWr2qlDbmHLSDSbO2H7B3ozGlVbcp5eCkjoB+ztsBw8GNUs9fB6iO71dFDGKuaWTrVz2y7KF+eUSQClZBVkMrPBfmJyBc60roJljkUawoFRSg1L7/QvqkKgFqAHY212uL2WE8ZwoLmNkUdV++X5dw4gv1mqJb2th/eaDmCJv3V7Ruagz9Um8FCsQA0Ap0fobO1sQO12Pju1SCiLe/ahYjSxW0mpk2LKLAx1wqXFVGj/NmgzHmcaJ1mZC4WU/jCwaw++BeAPrL8Mv5vXXZB4Uou1+E3PkSEz8zDSYMmm8AuEZvG+5GZUvdqUDQj/c5MjKN+DT6XaVBrcauQ7XLviNVV+oOkbv+g57TG2636u5fDPPJ3XC7s51+YHhjfsmtBjEPz0tkt1Syyf5FEzcmc+V9r5ZhIFD45fSc4fgPV9ZtEDfGFB10iHXHGV1AG4gsARYuoRoZ21fJ5MqJZke/Ls6I/RDOjkrN6boYFEKfrCy3cEjoQD+o9FHp2eghRCWndBA7gfbDHKWnWY2DnPsP+jrD9Nn43Yv+4pmoa8Oh9W3V6dJ726uW1iEQnyORNy5HJCEIdrwsONj35fbQkH5Qyyz8EU8plyhumN+istBmQ6Xn1IRi/maGdwUUhs+01+JDkaimJkyd6sC5KKJMk7vcIQfdTBhwEGYGV77V60MK1K+jbkfv8nGxWZft1hrmoqhErpZI0PuBsTeJuEIpnkyiZiMD0SO1Cy6kKBNwhBD02efiHe1FeDJhns4qTHxFmac5t/rvAg0nX4qWvtO0xSFPE90B90uEbH7/xxNbhW53Up+h4MKzyx5rWd1yn1u66C4TfRCuSVd23nfgI8Pdu9yjWGPjSGFR03C35+b5+LpBr+mJ/Qc7JzzxVgMAZiGm9TmRD4UqWx0Qno2OuUqlV8oCZW0HPIaLyoUQy9pgrGLy7jasJvP6Y+i1xN+gpkcHEZrwJe8iahC2e7NMtJ+/TojBhPC3h/KymZecqm4ldoMGz0GP0InsWZ1ifbQWaLfITFnPnU/wVU426CGg4Y0IlRnS9i6rCSFt6xyHjKuyjrOFLIW+UaccSSuBv6o2aJm6k6kZ//xOI3jgFkeUWa7PnkxApNhUxHqMzxkCNMSMGA9nS+6UNQDOvMT1iIL/izD34yjgTKrZ/ckqd9y7YJz0QL+TyrUTCYENMgGH54NhVoWH0lFxi4iWTfG/EFeiB8u91KYRHyIUE+2BjjxQZH24n+xFQ9IIiofTCdBd4B/jPr1QbjjizJkIvebAJgbDQqmUck8PhnLZC27AXCV9Wa7MqbizqgQ1Jfh44YW9g1b7y0lEIUGDIi9Sb/sGmBAtP5FKw0BGqXnZHvDQ== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 2c01977c-d52b-48cc-3597-08ded12c4a0b X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:28.4904 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: R1dgMVF50/VpY+upBNPNH/pnKzHrCoISWJ2RCBltz7z1ZXISd4BIipmMrt21WPSKhboG6w/9Kb1wEsQntD50DQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4P189MB2742 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:38 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239395 Cover literal argv handling, explicit shell use, subprocess exit status, and exec failure wrapping. AI-Generated: Claude Opus 4.6 Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oeqa/selftest/cases/oelib/patch.py | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 meta/lib/oeqa/selftest/cases/oelib/patch.py diff --git a/meta/lib/oeqa/selftest/cases/oelib/patch.py b/meta/lib/oeqa/selftest/cases/oelib/patch.py new file mode 100644 index 0000000000..4cbfef4ce6 --- /dev/null +++ b/meta/lib/oeqa/selftest/cases/oelib/patch.py @@ -0,0 +1,45 @@ +# +# Copyright OpenEmbedded Contributors +# +# SPDX-License-Identifier: MIT +# + +import sys +from unittest.case import TestCase + +import oe.patch + + +class TestRunCmd(TestCase): + def test_runcmd_preserves_argv_elements(self): + output = oe.patch.runcmd([ + sys.executable, + "-c", + "import sys; print(sys.argv[1])", + "value with spaces;$(false)*", + ]) + self.assertEqual(output, "value with spaces;$(false)*\n") + + def test_runcmd_allows_explicit_shell(self): + output = oe.patch.runcmd([ + "sh", "-c", 'printf "%s" "$1"', "sh", "shell value", + ]) + self.assertEqual(output, "shell value") + + def test_runcmd_reports_exit_status(self): + with self.assertRaises(oe.patch.CmdError) as ctx: + oe.patch.runcmd([ + sys.executable, + "-c", + "raise SystemExit(7)", + ]) + + self.assertEqual(ctx.exception.status, 7) + + def test_runcmd_wraps_exec_failure(self): + with self.assertRaises(oe.patch.CmdError) as ctx: + oe.patch.runcmd([ + "/definitely-not-an-existing-executable", + ]) + + self.assertEqual(ctx.exception.status, 127) From patchwork Tue Jun 23 13:35:15 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90742 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7033ACDB47C for ; Tue, 23 Jun 2026 13:35:38 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.45]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.20962.1782221729473356181 for ; Tue, 23 Jun 2026 06:35:32 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=xPDkl7VU; spf=pass (domain: est.tech, ip: 40.107.162.45, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lY5mWJUiwLZFB1cU4FzQ1cybUYapjmsqbm/4+ld8lj8w9tj4k6lGxXhmnG62knuTeHoWDc4KAWsZHJXIh19rpH6Fz0t4pe4uZevJ5udn8KfgwsnWSObhm460gx5b/MYJGF7uBQP1L3OkDvY/sDH/1ClkeTMMGp9b50jmfoDcCWqyYywn5zfAsyeo+bi7g0NHCTLqIonUxvujdrgaWQEfEBH2Bi9VfjOSlo1+2g1HVYJvlqVTA47P0ERu6846SWgIx5zuTJRmPUieurhR5veH1g7fevQSfgOi1CBNjOIMhMqqjsqZUxm8xyh+soxM8NlKkD7SOoQ+RN7ZdkYP+f6O4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bUMXPT0RNMhEGWRcUkOIVpJFUouVpn+8V6eK7zgZnhQ=; b=advf2jw4yAtrfxt0ivwAKpkK1WMQNeEE97tUNqlfaRFvCoVs5oDQy9CR5BUpN7JMe9l0vmKBB0VQR7ONGIHRHOM/xxaHpcwoYx1eHHkr/gsx6Zpgtps2vRhdSyQ8uzfnTIh2s94rnEdux3BlFC9jMhWgSJbwAc97LahQaSrtaAwm/cmSvg1SOQ3zg6/eoCfsUAkcCqafKPDjc1HTkBQpnUrr6vMOlV7rZFDH3N6OdjFNflomjePV2Xdndi80giSHIQPlUe2yWc88kJuDInKuHxnPrePIl98a9OiwaEHBYg9EB3jKVQurUQbdcsDLThEHxDduc4bDYy4dJO848dF7JQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bUMXPT0RNMhEGWRcUkOIVpJFUouVpn+8V6eK7zgZnhQ=; b=xPDkl7VU5oBa+IFOt0kZUUJsLeXyK0esY4MO5gNGFrdZs26D6pN2stmNEZ7iQtdQMsfDoy4uhhnjcHAaew1vQFmWnMlb+6ykb1qZhrVRdvt9eXDAFcahk4Mx8sjCUgrnHmeUsZb+c15zaHUbmlAR0zY6k1nzAkFStuLSrSCp0bDlnd130deA9skN/nStFHQ+qxnk8d6gva7wlTxl1wR8tBL6Sttt3mEh41ygrHRTfLnnD9cU/2ANAc819mWo6NSDcDz+EpZbs0P+it4sLpSjEWVbkDlLZYuhN1d6B6ix4kNw9HEfrziG20CPOTCoNCtikbeBeDKrfIcDBFNYln5M+Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by DU4P189MB2742.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:566::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Tue, 23 Jun 2026 13:35:29 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:29 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 3/9] oe/patch: convert simple runcmd shell callers Date: Tue, 23 Jun 2026 15:35:15 +0200 Message-ID: <20260623133521.17053-4-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DU7P189CA0023.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:552::16) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|DU4P189MB2742:EE_ X-MS-Office365-Filtering-Correlation-Id: 22b6a5a6-4ca4-4a78-085e-08ded12c4aca X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|23010399003|18002099003|22082099003|56012099006|11063799006|3023799007; X-Microsoft-Antispam-Message-Info: zvM4W3XKHZ1TxVHwMhfIRFJ+u1xppoadaASrkpEXygYNfqtiEvvPNtXAOwiwKuVkLpaFHYGNnSQq1Zl7iWVaQS+igYnHAdv0XvUp2BALHiUcVV1UIq0nG+2YdEru6knT/gt1O8dq5vc8NtGiDT3pXbZO+66r5iO82UYkBYvvwINkLaLrDKdCH6K6VRVFwtHtGWQFF58dKjl3lQE7leIOeu4ce8CcMNSbDBL1MleFiEno0paWzeTTAB8b8ZuEk5RRdhpqu86YJbQws4IlBUl0DjQoUFHY2nnv98bPOOcxIY4uMbCAXpG/zsp5qAIQWT0u236wNWmcsBx0EtQFusHPsnv5w0Qt4l+ke1v4+LnNPlzFj7CrpMGxq1dTWolpmlMQ5kCM2gzYb5Ru1Xdy0SmStuFMv7/HPbPzzNTYfT5J2atIAnYqOcGtPLgQWzkyvzCjjboY84qxLpJIeW/B3cYWZVhHSftr181IM5AKq0gogDqll1C12S8roPIBCYAzKlg0eP+sa5baUjUXnwhhabEVGiMJc6z0PXGP2BgvJ+zPq2fOLH0lqHjSEhI+GJvrqx5X5GrYNKomaX36toUvzF2zU8HPerkh1Psme3DcO1pWk+iDQjB/hxgzhDeDuxRtFDVykB0e21ycetMEgj9+BJw470zTAOvA2EDtPHQ3OKja+Eo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /FFdsMp7E4qxQFt61IrkMXOk81D8wQ5JDkN+LspmlFYrfUQCzGjX2n8/88r/yaRUFY3282te1HodZJZUWHd96kguLjPkB2HiEWJuX0LGTK6RZXsG6gFZ86VXxSmypC9P1EGsWS8gUa9UVpbXoqweOcrker+wDdBj28nIn3IbLR/8ua1OrMptHbTbiy7Q7SOZdA/Z80suYHplaHAh5aUYdEdO7063CWITcapf8gJUL3VBsrtrv788aHyG24PQdQxrOMH+f7C2boYaJkcPIbeCHyNuiBoPaPHJ0zQF68Cd5TB/LvUOi0YIceOYvl4OPf+BKxf+wOi8+VQZBd4w/IWiPjlKwfE2hq1qNejktVOuFlDZue0/sLlaKl+DbSwrn4yTKbuNM5seK36/Hh12wo5iyMbLrjGVj0PbVh1qwRJN7xDozcGpPbai2r9pio9sYsgoux9thXZ5QV9nrYLagzHLHbOMpbuLqTshjiT19Is/r2ehLcwgVwVx6KT1Vj95AceS1c5BU3Z1ZVaCUz+gtvFZOzjo3n2kYOxRUHG2/6MrFBELNP9wcoqwUPdPX1rmjMd/mxX3s+O8764lLZzq0YMYW0f1vzHr7IHdnL6F+s5iTezSQgVdkVVDezI8XjlOpj9hG25GOuiM9DmYsTN2EDpdRXhmU2c2D96tIfWt5wU7rM6rC5qjt4Y22wGJ0wyizOy4Uzaubw2rgIZLROuDbOB8hGiX6m+i2Bf/T+G3fCPBZelniIdf/lPu5fgzC0qUEkClENGaRgLW/HQGkSL1seA6XV4+3IJu7ZtatFgjrKUGliTwxVGWJHjDcsRAdmkC4Fn0DDc6T3XuWSMyWOlixnzAoY5R5P6NGaLz6eEv8JSBuJKMdKiMdFSjVsQcnI3YDXcVen45+aNWUdh80UqZoD3fe2QSrzVdSj0ucO+Jn7+fAoa0TCyoSxujWs3G6Um2TJDWZhu/T2AYoZAQ4Hil9KlkfLkmUprrSGweWAesdaRQ5+DobDgxgNU/52NHMa3qLBKngw1CHECg/FSSiTY6JQu40Cc2mpJFQKtnaFGU8/NSZnvpOHGEZdQLU2PYk1EsBJtrCNaFqb8/69RfitctqiRT00yUqwMJTrUzwjot+zoVdPc1R8nqy2wE9tbP3DVl3MEAzMYmG09jFLWD79ouT8oAzXn3PpKlcqnGbSgTrzSRrt/0F+Ph8PY+XCS1tNLJgstwHZJZHv4bx8FBVMsVaKJTNvRh4yISEQOapjtNdIsVuj6tel1Ws7bB/RLcW5Uhgbdkk+8zIaEa398ktGdlJxxAK/zzo6Ex/dnFanUkSXSCJR3GhPmaeKLOUnF1jlrAKC94RlYDoNJgdx6kIxgcd+otXuXJyX1dk5TyakBMakiz7pWjD49yVyrRGUpr+rBOrXssdWAkih8Ho+4YsZugbNFePh846lnFFBeXgyb1KTlqL98x1Ucylg6zmNd2I/UF/Chg1iojkO11ZYdKkVluh/P17vPyYvOrussHFa72Y/QGNc8EwXNhpTPwSq36KqRj15qqRRg9UCA9GctbPf/ZaBuwNQMkWvdSfVzw9qG9CRAv2faOxsBACpruEbs57809S2aAXJuRmfTJjMMSpikwRDJIrC/1sfn/Z7Sm+Dd/Eybf7xH7v771+JlQCjx12glLjeFiSvShBXu57IAMSDiafb4pIEbhg6GkOpp4fpWrFxat/zNz8A2owP4rsLZ76OuI+3JptiyTG/wnQciUhdYXwzpwkA== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 22b6a5a6-4ca4-4a78-085e-08ded12c4aca X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:29.7506 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RMAm+qWyK3XBYZKKV+TZV9PvRzEl7zsJdKmO/Zjwc91ZWTh+5wYil27vW3OSc34rQlxN3C/HigNs6rLCjAtvVg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4P189MB2742 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:38 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239396 Replace simple sh -c runcmd() users with direct argv calls where the commands do not need shell syntax. Also replace the cat-to-file redirection used when appending patch files with shutil.copyfile(). Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oe/patch.py | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index b152a2d784..290eb990f1 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -195,10 +195,12 @@ class PatchTree(PatchSet): bb.utils.mkdirhier(self.patchdir) def _appendPatchFile(self, patch, strippath): + import shutil + with open(self.seriespath, 'a') as f: f.write(os.path.basename(patch) + "," + strippath + "\n") - shellcmd = ["cat", patch, ">" , self.patchdir + "/" + os.path.basename(patch)] - runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + dest = os.path.join(self.patchdir, os.path.basename(patch)) + shutil.copyfile(patch, dest) def _removePatch(self, p): patch = {} @@ -433,8 +435,8 @@ class GitApplyTree(PatchTree): outlines, author, date, subject = GitApplyTree.interpretPatchHeader(lines) if not author or not subject or not date: try: - shellcmd = ["git", "log", "--format=email", "--follow", "--diff-filter=A", "--", patchfile] - out = runcmd(["sh", "-c", " ".join(shellcmd)], os.path.dirname(patchfile)) + cmd = ["git", "log", "--format=email", "--follow", "--diff-filter=A", "--", patchfile] + out = runcmd(cmd, os.path.dirname(patchfile)) except CmdError: out = None if out: @@ -525,11 +527,11 @@ class GitApplyTree(PatchTree): patches = [] try: for name, rev in startcommits.items(): - shellcmd = ["git", "format-patch", "--no-signature", "--no-numbered", rev, "-o", tempdir] + cmd = ["git", "format-patch", "--no-signature", "--no-numbered", rev, "-o", tempdir] if paths: - shellcmd.append('--') - shellcmd.extend(paths) - out = runcmd(["sh", "-c", " ".join(shellcmd)], os.path.join(tree, name)) + cmd.append('--') + cmd.extend(paths) + out = runcmd(cmd, os.path.join(tree, name)) if out: for srcfile in out.split(): # This loop, which is used to remove any line that @@ -585,11 +587,11 @@ class GitApplyTree(PatchTree): def _commitpatch(self, patch, patchfilevar): output = "" # Add all files - shellcmd = ["git", "add", "-f", "-A", "."] - output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + cmd = ["git", "add", "-f", "-A", "."] + output += runcmd(cmd, self.dir) # Exclude the patches directory - shellcmd = ["git", "reset", "HEAD", self.patchdir] - output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + cmd = ["git", "reset", "HEAD", self.patchdir] + output += runcmd(cmd, self.dir) # Commit the result (tmpfile, shellcmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail) try: @@ -642,21 +644,21 @@ class GitApplyTree(PatchTree): except CmdError: # Need to abort the git am, or we'll still be within it at the end try: - shellcmd = ["git", "--work-tree=%s" % reporoot, "am", "--abort"] - runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + cmd = ["git", "--work-tree=%s" % reporoot, "am", "--abort"] + runcmd(cmd, self.dir) except CmdError: pass # git am won't always clean up after itself, sadly, so... - shellcmd = ["git", "--work-tree=%s" % reporoot, "reset", "--hard", "HEAD"] - runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + cmd = ["git", "--work-tree=%s" % reporoot, "reset", "--hard", "HEAD"] + runcmd(cmd, self.dir) # Also need to take care of any stray untracked files - shellcmd = ["git", "--work-tree=%s" % reporoot, "clean", "-f"] - runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + cmd = ["git", "--work-tree=%s" % reporoot, "clean", "-f"] + runcmd(cmd, self.dir) # Fall back to git apply - shellcmd = ["git", "--git-dir=%s" % reporoot, "apply", "-p%s" % patch['strippath']] + cmd = ["git", "--git-dir=%s" % reporoot, "apply", "-p%s" % patch['strippath']] try: - output = _applypatchhelper(shellcmd, patch, force, reverse, run) + output = _applypatchhelper(cmd, patch, force, reverse, run) except CmdError: # Fall back to patch output = PatchTree._applypatch(self, patch, force, reverse, run) From patchwork Tue Jun 23 13:35:16 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90741 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A04E7CDB47F for ; Tue, 23 Jun 2026 13:35:38 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.14]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.21385.1782221734290646688 for ; Tue, 23 Jun 2026 06:35:34 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=ar0pSyOh; spf=pass (domain: est.tech, ip: 40.107.162.14, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ThQkuRsZNrbuXJojGCL5b2T9HuFPf9HpQ2suYBa7ZbmhyfEDNexwalEdjD0JyYCUKntntWJUpIrTSL6LXCVKgXbiMV7g1w6kgKQ+2ld2/4D0pi0TiH/qG3VVZFXwpZ4+Ef8SrSq8DeEYLGkVwucXs6n2357JNUCCaeYvgMPgJ+GDMCKTU4suhkNYbS2Zo15trGXKJTS3v6ith3vE3gn1+CddHtR/3eCFUQDx8RjSO4tcsfvpPJ/klDip/2ptYH4DO0dS76MCaLtHEoSlpg+MKRq3QYs447xh2yb61qKwMOGT6fu+CRhc5ct2sBNjOcCRTh/RpO/rMEr27NOIf4/Wiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=L3aNbZD9yqBs2QmY2M+rzdRbHVVQJHdwQyD1YSHPK2E=; b=QNhfV7WxcfjHxcwFdBnxaecmjilhyddSAvfHN7j6d1gTMJx4naGCHID+EMKBij4l2YugAKJUZgy6/4e4HS7TpRiza43yPVLoOXDlrO63+IkF+CgzBoAQ9AoBIQUwsR7gd/Zo1IHCEuk53dZ1yNFEfr4B/4WA4qZwQ1991L+K1vfjO8cgyWTSCdq9bOgXpwWJWTUwmepOlEdpKqaD6YqWA+7SZq2xdcEM8bP9z2GIK0q2//mR2S7zQSvTIhi9xBCjdt+xq2o23zxJ8Ls3yPDxQvc0BDZB2vibyYufOaOSc/OQud+e22Lvi52TejkMjZBMgQHMdf6ikMo5uJMgLSbYnA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=L3aNbZD9yqBs2QmY2M+rzdRbHVVQJHdwQyD1YSHPK2E=; b=ar0pSyOhqdq7ZFTo/5RhWEPt+QOBI2p+6ACUsjGHhOzgLGkhuOPoLdIsPhOk45fOBVVWQNf1x+SKI7CSL34FZezGKCV78OSlod8vALuFBpkvYnE+WiLit7s1etXHE2aNHnAHenkYJr46spums+nawWyLzILGWnyl6cVGg/RaAaf/6G4I+7WltPNpZPfwMN52vCoiQmr5lSbpmnVHXgg6iF8Rn+ag/3di0b5Ip6ikhEUJshHsqzJZlYLetG3HrE9p5y4SzhV5G05XCVpUiycDwK2TADeTbiye9CBA3RMtqhg+qZHwGzuCI/+SGuuji4M+hPWpXzixvlQ2w9+oOPQhXQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by DU4P189MB2742.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:566::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Tue, 23 Jun 2026 13:35:32 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:32 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 4/9] oe/patch: avoid shell pipeline in _applypatch Date: Tue, 23 Jun 2026 15:35:16 +0200 Message-ID: <20260623133521.17053-5-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DUZPR01CA0283.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b7::17) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|DU4P189MB2742:EE_ X-MS-Office365-Filtering-Correlation-Id: 3f246553-e16e-4e34-586e-08ded12c4c1c X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|23010399003|18002099003|22082099003|56012099006|11063799006|3023799007; X-Microsoft-Antispam-Message-Info: wPNxg4xg42XQHkIKmhLFYWKC15HFFOJP4j8rxFzmFRWx4a87oAh4eeiGpcah36UzsceGNnIbe9/w26TeuLOqQgs/VBH81skkyILsLT+esn7awfHG6sCo29+cTWzYV04G+9Gh6cqDZAu4XiT3yyA4ECX15ls1wgXBK6nQPkl8PRbj1x07duOdbghB3HHN5FuETsmH3fMk2HxAwqPYutuefVAG5Q98/9h9+rsDMSElmGe8my6pVGlGZZOeI0b5k0oCsmQPQS6vHLbwjnQthpaU00Me69p5n4ue6wiPZYe0/I9irCPR32xfpYG7IJLBKyotLLRNjdUg2bEsdcpvljMhvaCG//JaoZgyJAfI1BKKYJDiJssQim92GO1lGpOEVyjE3OVfrwo4TRhK0mg4j85XkpCUQiiFdW/h2yve7D4zmusbw3FCcKgGZ54XyLTRI+t8q9NDhowJA1CTfHo4v//WNNJKsYrzQSfStKGk7Qa6Rhf6/duOW6GAfZdmYaCwYOpG9+pW3vDRWPyGt2z1SyQ1sSn5qlaOs/fVhxKgSPyIVEw+MvWRKmSjZpzGEdgsiNs1s0mAwv2c4fZUyh8Nk9cxNJBXL3Z3DbEGmWKZCTHLmjO1D5cuJifwxJFi41jOFqM+jiMWYPDaNnjshljsx0NTsU1Y+POKiQcpbQEXM6/ZcQ0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xJbZPugVvLPtrQ0VbfZwlfCe/7vtyiSTFbgCB5B8Z6xtrL8LL/CqPxKEoIcwCG/ucEvwC1iuyfEyfxl/u3MccFvnzGqsoUsFI4G+eQJ2TZrRa6ByHJDHCZbwkFatwCZ51SHGV+75MEvmJGYp3UWRvpzjsPFZhoCJogoH5Um3YKDvMrXfR2tUwxffyxrhFEJNygDqTOhghllmtDajxh88UemxFaCSEXARd8H5VL3BO3UsiAG1/vO/G25nXafULrDovbWVz+pWDlp2vwGCS+oRK1wj69tUydDfPoD5NA4+Xn+dI+SZZ+XMaun4oia/JDs3re5kwe9H6y40t1r1IXneRUKy7OFla54TvQ3yV9dZO4DGV4SNYC1ziJdpg7V2XV7r5+h+JWxQkw59Vigmy0697bY7YBsTbesjXd6vyuq42lOfIPlgjKYqtzJTvVUNh/gRW6L6bhrwoNrbSucgEDz21m91tWl/XItkaXuDTBQmOqNDNhbt4crpdDEeml/IeTf5SeJrt/FJtOlyhApWo0+8G160ChAVtUU/qKevpLzX+rSBYGXp2YVtV9lIR96d66mWuQ32b3tT+O6xn9pOR2WKQH8Ub+9V8jwOA9fDgeISt8uePKFgsMyL3PhRVH9opxXAWogdzPdwbo4K40L7+EMXmK/HOU8EXqRNgGd6thVJGHYRgSzSO8bexTN3hUgqhCjgY4HiN4yVy9wUtQGjFtqbec6sYENraqQ3IR/8H2ZQ0SGaNsxvQjE09IOUViQr4teUmC+b3S+1iRgsiJDLoPCkyXSPXLugl1pyPu80IUZfu7RQRQw8b5djHppCYKNN6J3t5dUd7MNuwUPbIxXQ8Vqb+rmX4pfPEaQCD28sHK1lzy2jnm5mM0JVZYRYTEyteb5wKdiVd9spJAvxCNyHNlhV7QD4mEExdHZJ/4XpVSYGb/wEKkyb/Ukyji7RizBgu9gifhceMDYYk15XtCwZRrhSfZjsY/AKIWpYZTNs4pif954GEcSn7W8auJ0fwhbV2XZ9eSexjyX2rt6ZCzl2aofd3/EEG17BO9N4yfflgq+iZJRyposk8AdBCaRqPCiacc68cwX3zAN0caoJmk+2y71ivvbyePUjNN6D5Xj+Oib0UC0HQ7N2rZdJGuYYGOXaml7NIxj+ctVfr+Cjk+HN0GJCD+mia7M1rTLbw6trgxHYjuw7tfgVttdSxhbOUMLu2k/vge3tPRbpyQYPHVcJ9X3GHXA/zSlFY4nSugjYqQ04SZXKBVfHKa60e/EIj8Gq8jIuZjNQhbPwhNe/Y44MFCBxClsB1zqBst9FEzFjXNWm1usLlDOxEyYwBiHR9vusGQWVC0X+7OqmKQvNKLOZzRg7hovU4G+s7BVxqMwMfq/0HB6+HVyyEaa5cwDoXCT10rf55A09LYUyn38kQk0af5f1OehiEm42siMSxbrCAO/Dgcq4w8gXeSM1d9dNpwF2dck0yfflJcvgish/owHgsB2onqmcrDh6TtBOsozwU1nW3kQ0/VDgg9bub7rw5Fj7LZNpadVTBGbJH5Ya4meWYrg+RRnpgyVLYbQrlK3TIHAtjL3Hs+gxlXuJDxNJGoCepXFPipfl2qe7hz6vAS+m8s6vX9rT7oLTtA/g4+wFc/iu4+qXYguObe1FKnNUF4Q7gLHu7bQppCyLxu2T3mMHVpa1F8ULI5G9B1qQcKs+XTJlu/Tyk0kyyjVspIkG+F89PPI9sOcCfYHIqL+mw5AkEY696A== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 3f246553-e16e-4e34-586e-08ded12c4c1c X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:31.9595 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: giaos9o09d/lAJXdRozaqyVki4qNEnuyyHk/ckTcL0N3cMNjt7pJx6vzWa79vyWtkd6t0R6NutkyVuGm+AIjMg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4P189MB2742 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:38 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239397 Use patch -i to read the patch file directly instead of running cat through a shell pipeline. Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oe/patch.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 290eb990f1..1ff57a9f8a 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -235,24 +235,24 @@ class PatchTree(PatchSet): self.patches.insert(i, patch) def _applypatch(self, patch, force = False, reverse = False, run = True): - shellcmd = ["cat", patch['file'], "|", "patch", "--no-backup-if-mismatch", "-p", patch['strippath']] + cmd = ["patch", "--no-backup-if-mismatch", "-p", str(patch['strippath']), "-i", patch['file']] if reverse: - shellcmd.append('-R') + cmd.append('-R') if not run: - return "sh" + "-c" + " ".join(shellcmd) + return cmd if not force: - shellcmd.append('--dry-run') + cmd.append('--dry-run') try: - output = runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + output = runcmd(cmd, self.dir) if force: return - shellcmd.pop(len(shellcmd) - 1) - output = runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + cmd.pop(len(cmd) - 1) + output = runcmd(cmd, self.dir) except CmdError as err: raise bb.BBHandledException("Applying '%s' failed:\n%s" % (os.path.basename(patch['file']), err.output)) From patchwork Tue Jun 23 13:35:17 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90739 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4CB65CD98F2 for ; Tue, 23 Jun 2026 13:35:38 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.14]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.21385.1782221734290646688 for ; Tue, 23 Jun 2026 06:35:35 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=UIDzOxCN; spf=pass (domain: est.tech, ip: 40.107.162.14, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Vw/XC4yWMZXOf+G8cPDpyKn6LcTn6k8yKgKrxLLKTDUKRhfu4hl84CohkDIs4bIo4rY/+P4wGjo6kDAA5kZKxIYfKtI20/wbb2zeWII7jt4mLbZ8yOLn9Qga2z9XOvALyPOzWwrDG0fDuQXhiG/ml2/KgaRxpoibFy64dq8O5mGEWKq0BqfhM9vpYCMCr5RVIypUi0Rv1V4A9T40uj6fp5ByqPx/UgOpl+hi0KDmOA4BP/X4rAAV9r7LzOGtAEpnQ91P87siwwjasNRK1AQPhEF2Iqx7flvjYAAMfietNe3YO6HzJEx2MnBTG71uGXqpu69J8sDZASSUl6JPCEcyFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=r9I3SfQXISsedP0k6xDWHzHt7JLusXgN9J/8aDnEj9c=; b=BAfkl/t61++fxWtdN5b+uXaJ4bJkX2LuZhJfmogK1im6+uFEBM9KIOTsYT7LhbH+vdFtcIWMBfADfkx7mB+RI/zE5v9mxJ7VA1Pm9XHfNZmPDor0Y5MuhYBmhMwXefC8YJZOZ/vJuHlz/PHi4oJujzMw1W6lG6/voRXxkYfIa21cqwbs+XQga+q8b3rGa2TSuFZHsXtEPPTHPlDnrHMMAyYNdEze+WF7um9rP5/BNA3ZqDdvzpyX9EywJtGHApoUDI+Lz+IXmDeRwFS/HXw8vAIW1ARe+ExoxVL1+SHV7F293GqwchBcFMdoE/mvwcVpwUf7iC7Qc/J63fklcKMWLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=r9I3SfQXISsedP0k6xDWHzHt7JLusXgN9J/8aDnEj9c=; b=UIDzOxCN41Hc0wFkiXRxGrPIf3Hdd3v631+tlYlbTYwjrgviDxDk3cjzSE0AGzripjiE63EsPSfB5X0H5+sNxibS0XCw4qvhrfv3cPi+zclqIuyxrvusL05dH9djQGRGlio4sZNxmB3/LlPKEkC7YUCW00sFv55wkpquz7C1B3Im/zFmvLH4kM7J3fKsX0Ru0Pi7ZSqEB2Bl89Ii8DBNWRjjr/hZjO09cXDTcykJBu9NemMym2dnaBkQBEEudDH+ElcLGonSZcl38erBz6nS8rst2yfjLqudyTqgnEUHLamdy8kueCb13SaAUPZltKOvgYzCD7+rRsn1+JnjmRfuWw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by DU4P189MB2742.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:566::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Tue, 23 Jun 2026 13:35:33 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:33 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 5/9] oe/patch: remove obsolete PATCHFILE assignment Date: Tue, 23 Jun 2026 15:35:17 +0200 Message-ID: <20260623133521.17053-6-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DU7P195CA0008.EURP195.PROD.OUTLOOK.COM (2603:10a6:10:54d::35) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|DU4P189MB2742:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a42c27c-d24e-4701-07e4-08ded12c4ce6 X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|23010399003|18002099003|22082099003|56012099006|11063799006|3023799007; X-Microsoft-Antispam-Message-Info: 8hMstQWfzN+SUSH30Rl6piNRLvu5jaoDzw3hfzkJIYrrAL+7rL04w3vGX/9DbaEk1sK9rkOtGGuePmgfeLyaK7K64QBnD+yKia1VIHgni5wXMlAI62mn9jRBHDwSRuqLfyQ5FMG0nLWCbVqHfyWMW1boWFVr3RQ6zPx6jngVQ2j7nZ7JG+gTiuNbyYynqlTjt4w9/BBwqssC6+bT8j2UfAXaM96Oya55yBl8Z0nHmFhcRMaP6YBc+4s4+YW0FPb/DLgC2aP2cAPirrc6+3YIxzT2QJ/UPTRdrGc27iUUgrkb+lTcj9UJLzziJuL1RLMO0T1rjRr1PxbYwkIvHOgul2UMnDtetInF5zrXe32iOGbZSu59yNM86xrua75SyHCI2Bnh4KtfhXznuf7Ul7FYY6iqiZouHVZfV2p8R9LGIiPVsD+5WSKlS6nom41mOSbSsZxlVZKkqQbe3tO83pGzlz53rLX+jHiKUo2GEd9OUhlmiYSDhsCNHO7ZfZww9ycR98VKVshi2j7tC8dt20fVY2H1rWz9FApiI42snOy37tRdm9QnKrWPcXgtjbswuMXzIhS8JtxtmnbA9dam6rDBOvPQH2RVooAHVhFV10YBidO0KRnSUK1vGKk3jAvto3EYYuH9p+s/zsoHk2U4LIO9qMGn23blspRRoUM66k1Pk2M= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: blYTYsaTlPzjDGaxdO2L86OherZ1T0T0KvAZqoo1bTwY4e8BlMdnWaStBuP72+QkAQ7TfyZC6O5GyQzYCapzQb6ed2rZ88v4nllTEW2OgwB8LKdKUF/iY18o22TbTX84EJC3LhTYPxZTex7wIH5sb90bNPBvKv2ghfRLx2jNe0KDCZ2kvP1qcu4SCw+m+2OAc/2dsAXBbyW0ISaD23ljzshNBPCp5qSobS2LUhQen+skxb/W3a0+LZ0z6Tsk3Ds/Yigw+9ioVuAvNzL+NqymzIiw8/khdNIX7R8TvaYoBLgogw/IQ8wBvuzLourGMetYGd6VAqFlRstQKYWkSKSMviqXnZxWM8jQ/KoFAp5Zi+9qprL+Tjli/Mp/7XFKr+2wk41KX61KpMW+lwXvygocO11CYejrGIuUY9auekYJmHCFKdFLiA0kO8dwjNxrZM8J/m6GBvCqdrQ+W0ClhOacaFATAFIABsCN0zSmwMrhlGSfvquUHNlhr4f93mZMjBbHddWPtEEp3WopNfmN12YSxnKlyShyhYZapwcM5QTTjEpSS3SCB+Xy2Y0dWI1JkK3cntF8lglAVrxaex355/vMTSwDqHnpITv7kdR1LXIkvK+4UqNk9xBfl8XqsONzUDKAF8WKmIWMUdU0J2O7PYnb1M7efYnN44YdSR0erpGOLWFWed1f65nOfeLaqR50RPvZVbTXHfSd96mG/PYYzEnfRkv1TAfG8x16+QcYqpGPOfM0f2iVCvWd7/kNGym2kXuU4m0UzbAftPFO3iaM6dprpx/QQ0/twmRLfQvAoaynxhOLiMhshqjrmig5uMTfx1QjmXoQmCNQ8Hh//hFJIz0Hy2j2ySnzTEfFwYGDvYNg6AD8NNCQDQs6SnHTz/8OvUaql3by6BjGdRf+Av12eN/R0YNAOk+AYf3mmVuW9kjuU496mrxPtRC538o7VzMgwVjjVKGuw8iNsN8Fl6il3DbcagCBnhvB5VJ1vAQPiHGme6czRkvliyekIw4K38uw4gP3U4wMo6mXbCtEeOPyLdJ3d9Rmy5H5e2DMLvK1B688U6+e3vm600L7rxt5ZWupQAKhxtFZsXx12n1FvCm/w7KKKxayNv3vIIHJ0/Zs3o4p/mdrJxxUmp++LL1KxZ3lktunsfzYbNpQ81jrjhtjAgdoEzxFMo8ANZeZvl1uOXDBEW3CCfKDNp8R4ipjqjsktk570C4RNNF6od/aqFIlcXkuWiT5qkQcMf+AGWHMdl8k43M9DRHKjZCUGMT4t0oSzWQqwZV4SmRy2eSetr0k+TimcjhOmjEkZKMdsuIcWj4NfHwp3eyLYdh/tpZQAH+74sQa61/KmafZISLSIyfmf4bjoPRmQNyyNMKQ3jgiPF/vThkM6HyqcEcFa+cx6yvDHHjbVjwzqT3d2IiNKovKCiXIYZA6dZalDhogLrWN6OqlscGqVtw862wGXvVerpRhZFhWdTcmAj3t6Suum4BfCw8Myd6cPKtASyojkHVwgz6mZn6pB85emedW/VBpAmYvsFUSHgveAU/Ine9H62CUhRqsJtLSbcZRprLo6q4BWkGtByJVolgpLTXjMDZ/lNEFj9k4mKHOpG1/DzZyza4sLXD8OGeNPjv1KGOad2cPUvvKh3klHvihLNwsEr2+UOH0KZSmUhQAT2yjfty2z0VD26HcDz/QFk4LzAqqrdE+V40IWD7FPWfRKOXjurcCMjyjdGgFPeTqejDhQbEm8U4xovHCMg== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 2a42c27c-d24e-4701-07e4-08ded12c4ce6 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:33.2839 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KycrTRuBMLaT7hBQFjLKOnhXkePaPeHHO0iAtJDwNqOJ7i8Gx+z5kX9gdA/43diKRJgyhMo+LTUK/u/jhcALbg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4P189MB2742 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:38 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239398 PATCHFILE was used by an older Git hook to preserve the original patch filename. Current GitApplyTree records that filename in refs/notes/devtool and extractPatches() reads the note when recreating patches. No current OE-Core, BitBake or installed hook consumer remains, so remove the unused environment assignment. This to simplify the runcmd argv-list changes. Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oe/patch.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 1ff57a9f8a..9240637189 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -584,7 +584,7 @@ class GitApplyTree(PatchTree): check_dirtyness = True return check_dirtyness - def _commitpatch(self, patch, patchfilevar): + def _commitpatch(self, patch): output = "" # Add all files cmd = ["git", "add", "-f", "-A", "."] @@ -595,7 +595,6 @@ class GitApplyTree(PatchTree): # Commit the result (tmpfile, shellcmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail) try: - shellcmd.insert(0, patchfilevar) output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) finally: os.remove(tmpfile) @@ -621,7 +620,6 @@ class GitApplyTree(PatchTree): patch_applied = True try: - patchfilevar = 'PATCHFILE="%s"' % os.path.basename(patch['file']) if self._need_dirty_check(): # Check dirtyness of the tree try: @@ -633,10 +631,10 @@ class GitApplyTree(PatchTree): # The tree is dirty, no need to try to apply patches with git anymore # since they fail, fallback directly to patch output = PatchTree._applypatch(self, patch, force, reverse, run) - output += self._commitpatch(patch, patchfilevar) + output += self._commitpatch(patch) return output try: - shellcmd = [patchfilevar, "git", "--work-tree=%s" % reporoot] + shellcmd = ["git", "--work-tree=%s" % reporoot] self.gitCommandUserOptions(shellcmd, self.commituser, self.commitemail) shellcmd += ["am", "--committer-date-is-author-date", "-3", "--keep-cr", "--no-scissors", "-p%s" % patch['strippath']] @@ -662,7 +660,7 @@ class GitApplyTree(PatchTree): except CmdError: # Fall back to patch output = PatchTree._applypatch(self, patch, force, reverse, run) - output += self._commitpatch(patch, patchfilevar) + output += self._commitpatch(patch) return output except: patch_applied = False From patchwork Tue Jun 23 13:35:18 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90745 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4CF8CDB46F for ; Tue, 23 Jun 2026 13:35:48 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.56]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.20964.1782221738840881784 for ; Tue, 23 Jun 2026 06:35:39 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=FmeCP11F; spf=pass (domain: est.tech, ip: 40.107.162.56, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WtXaxydPBenTzJa9dRM8vhLiE8oUkgBnBKA/EJRoNCJ5wIChIziU8CJZH/ItsCKaU9LeVQVxAe3dzddqQlOo2a7P+zuU/TeP+1KN+sbwKcYbZO6lY5g00B21huZaETN3UmOd9ql0KveByTjeS83qldNjBhhxDvI9OAVA7iIHx/e7trJpPBZ47drP5NxUoYd8lJ3xflWVqGSIpWQEuURpIV1jMxP9RnXDyL0pa8caA1ZGihbfMN+2xLDNO67qWFd6JnBoHQZAY6mHFNiJLIiiWW9eC7LK9cgFavRlPdCFlFj/6V4B2Nqfi/QewwVSNobM+ttTqs+tJ5PeNL9EwEMQ+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=liFTwExOzERe2SEGf5Ig3dMjCg4JeCQgiAlbEpo0eo0=; b=c5FnOMSherRNhb+uB1or76Rp28101kHZ0+OX/q2atKZY2NK3LgTiZO30CUq64uHxW/9m0Ef8MOm4OuLh0E18dOg4Vvi9feOnQHvRSPqfnLLSqhdhV/s+yXfpXbrBJ0HdmjT9WJq0dj0ZvzUoQ1AaMuI5wC//4vorpyFdpvhxpZtlgOexoq1wtJ5XNkA3BEbbCzgBLoQ6WDWroVYRwfWrJV0E0i05CPDHD5DwbqglQVQF6PzYu+PMnFQFtY3P79NVJfBksurE1E4xDuam9C/HghXaI0cS469O/PtbjUhx5u+cTf6KyuSFNBV9S/6fn7+YlGy1/a3fIpi/GsJnYocD4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=liFTwExOzERe2SEGf5Ig3dMjCg4JeCQgiAlbEpo0eo0=; b=FmeCP11FBFrYoZz0lrQ+6/dgSRVgdQ2FqsTbztjLO4CX44frhS9YCyDzKT7UdGWMwft2QzWZjXpHV0f2kfrxkgMJjOY4yptE+eAw7rZbccbQWdzEsuLpX+2qW5oOgSJBz/gNZzgbmssLfje6LEPfs2H/LCodK9oJAx7kThscfy0h1mXAhesOAULRHlUsbSFc9n+WIgdBLlowwu8QqeOy9OCRV4qG5ucvFbncNcVo9YQGd7F4BCo0jzLGG2byqiz5ePW+7gyaTZtIDg03iwL6eND+fOAljhJBfNvizuRM8JNjJFkfY/WRXndrojkXrfk0n4zsien+9NVl5KhjNkaPkA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by VI0P189MB3639.EURP189.PROD.OUTLOOK.COM (2603:10a6:800:2d7::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.19; Tue, 23 Jun 2026 13:35:34 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:34 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 6/9] oeqa/oelib: test GitApplyTree patch names Date: Tue, 23 Jun 2026 15:35:18 +0200 Message-ID: <20260623133521.17053-7-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DUZPR01CA0001.eurprd01.prod.exchangelabs.com (2603:10a6:10:3c3::10) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|VI0P189MB3639:EE_ X-MS-Office365-Filtering-Correlation-Id: b005464d-ca7f-4869-2723-08ded12c4da3 X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|11063799006|56012099006|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: kSyuWY6CPXUhbbQpQ3aZCGots1qQ5Ed9FsMXpJOyFxyeNcUvpdB8vo3HS9+aENRFF0PWbo3Ln6PMnt9SWqYR5zHdl2TW7y9oz6QcT+guEk9u08RzEZWfuwbmeyTsePxKHZPWMYG//MF4AtAC4/pTy46r1taVQcAjXeOi2pkwjQryHjZHLp+KVUWaq7whzZ3f856029V138QPhpl5ySLPK7zqvsCCysamIGnGkkfZVOC/x4O0Km+iYw6kWavDzNKEiBlwwra5gYZD4+7zCP+c6PisY6db4Vm7Tky6PIiUSAESSnXzro3oYltIO6RwuL7q5DJz7k+RF+DjK974XapqYBz1zIvBr02zhsTZ3KZMmmoANUjS6cYJWsBIdBjXCTq8DKbl0wO/d2Un50gPt+Fot6qGyIJEWlZailbQC1/MyEgzoJ/qJjIjLGjewD6+G5L7+WJ6r0Kg9J/y8Gp2fk9XJZ1wW9BO2QVbE2z03ESOQOiAn9/sHjHgEEKZRDui+CCrT8OZO0XuwRd4HdojRaGcEsVicKwwekhLAlUrJoUV/eQn3L1OgIHoOF2jaywHy0qItVYSirRL/CYX/yb4gThYE3Exmw+3uXjTeiu5oI1o38r27hf8qeQ5akazkV7Uz53SMCTFe7+8QutMl4OSvFiGZ3CwBawPxEHZESOpG/MEte4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(11063799006)(56012099006)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: EF5CFO9geP0toEWJgg+GTyiqBrLW+Dve3cvLrTn108WSAueb9FCe4Ygch0lJEOyxGHZk2PmMV4kG0GvONliT5c4WE+ZeYcaivKdwLCHrRWgW2oXRH0+cj0sotruypLkWGXLeNECw7VAPIx9Z4D53CJEe+vnR09II1kkPic1amEniYpwd+n+X8l5BIDQaP32ooIWcWs7UEFSEMBMjLUpYKlP2mXYwTkeBenbSmUYSMBMHFqN0NHBfdhpgy+m3WSdNMqZyu8wZ1q9f2K2VRh/70Hg4nngwIwIysbeWMqD6LojxEFRUd0/p5xMxmcrtjUS310fQ25GMMSXkBFYl9MSiD1Tbel7bgJvRRUFLphEzeTPYVfm68khkoSryDJ1/Kz68yFPJeHlWexJKSD3huGqIFJovCY3jtSHL5eIYRZwzZZE2PAY6e5BHVbBnE1wrwK+CQ+sEbFTgHgXkcJQ3LdtVHPkGH+D5lU3ooOa0dXr87A0/ZBv8Ms4lnUpo6FopmwwjAYEgjvW89uou0RXBEKlbn+Icxkyx3t4BaHkhhXzKemioHOfIjjy9vB5HpVWiQGe2SVS3/iCIru6bbky6H+4ieAk44cKxEXkaWkAtUvn5lq5SU4IrvLjPZJAN/VBbAqaJnjRZt3R2m7uj1Qm0EywEBkh9Tmu6wOew1vGq3V2dYRuhpPydB77dHocXNJtAuJY0DbN7b9wrsfFzaFmuoHtjXBv34iSbRVxPj4cOybvfaghVNFin5TUuC6SJR0PUcUI25RySA+d/bYPGAB8lTmxr36yES6uFc20ku+2gM1V04kKSHvn3l1rXxNV+cyk//P7MCaMDE0qJMD3wdFYumUDOgz0OOWn230hQkzPrk+aAS4hFPxDLIT+EOFZ9P6ER5OMFb9Qzx3DJdwjKJJeLVRZzsnKfLVXfs7XmA3h2A8QkG2zcazAYxZ0wBKU9xaSvFaJjQOoeLZW8/hbzbQBHKOvenw9yY65bbC03vsCRrxc3WHd8DEfWca7nwLsQEsoUBCN2rBf6ayiQHZeZA9wF4reh6c7Bp/X8K9LL/8VndGxo4ZFMN2ACtG35wRM5/ds50qLvZxTwhNwzq4WWaBRibU31emd+NUy3WF6pNLFdx4XvYAFz+i3QW9rItOtxWWzFfzg6llDMZ6yim+UBnvrstH2i+4N+nC9lRotRE/DzWLOJYheno5Wrce/41ETsBWs05BNBXwqBaJaLpU/+ixM120mWbWS3ooApFBqLEuewg9SLTIw4nP+RJn8L0wgmPClcjmTfFT1i3p/6K5+hUBCH16/FQMK0XCwNIvmR2wqcZimT3UUmQa8v1qMo2tT1Q+Zo96fm24Yq/FX+iz4jy9Lu8Gg8Bdz8e26Coy8hHmN0YWCtmS/bUmLBdlFcxILxfNaDqqA6yi9IzCcuvsWFUyWNGyb68T6CA1sMs4ZH3q249tH8NvA/PA/ciSNN/k+SAcApIH4uiU7cg8G8U156YJQGDE1BEMNQxLaiYiUPFiyZYP950d7DI2OUV6QQneA9N8rizR+mkkfBArf+JKxbTLXftFCEWoTURR3Y5NvWedYUqBMWc0TOlCGaeFKM9Xa3L5z1EaKmn/6wsoHW8Np6zDcej0jfsxoe6/CKoB8X+Lzbb9pBp/8BEoGndw4XpmOmawFq34Xwn4/uJvnXqWoXCmgt+OqR+uutZd4sr0/PjFn+TXtRDE9YUveoL+wWx7YSwom7HdxB+N0VH14VhZHMw9xAJ+gTVA== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: b005464d-ca7f-4869-2723-08ded12c4da3 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:34.5166 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /nd05GdlLXA2YGF6y7JUfOPirQqU8UsZfpyOCq8z4+EbcmUuhDmDcDrlbTHm6tv4eOlNN4EEFFEtZC+BYKyLyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0P189MB3639 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239399 Exercise both the git-am path and the fallback commit path through GitApplyTree.Import() and Push(). Verify that refs/notes/devtool records the original patch filename and that extractPatches() recreates patches with that name. AI-Generated: Claude Opus 4.6 Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oeqa/selftest/cases/oelib/patch.py | 136 ++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/meta/lib/oeqa/selftest/cases/oelib/patch.py b/meta/lib/oeqa/selftest/cases/oelib/patch.py index 4cbfef4ce6..69e06b5ac1 100644 --- a/meta/lib/oeqa/selftest/cases/oelib/patch.py +++ b/meta/lib/oeqa/selftest/cases/oelib/patch.py @@ -4,12 +4,28 @@ # SPDX-License-Identifier: MIT # +import os +import shutil +import subprocess import sys +import tempfile from unittest.case import TestCase import oe.patch +class PatchTestDataStore: + def __init__(self, workdir): + self.vars = { + "PATCH_GIT_USER_NAME": "OE Test", + "PATCH_GIT_USER_EMAIL": "oe-test@example.com", + "WORKDIR": workdir, + } + + def getVar(self, name): + return self.vars.get(name, "") + + class TestRunCmd(TestCase): def test_runcmd_preserves_argv_elements(self): output = oe.patch.runcmd([ @@ -43,3 +59,123 @@ class TestRunCmd(TestCase): ]) self.assertEqual(ctx.exception.status, 127) + + +class RecordingGitApplyTree(oe.patch.GitApplyTree): + def __init__(self, *args, **kwargs): + self.commitpatch_called = False + super().__init__(*args, **kwargs) + + def _commitpatch(self, patch, *args): + self.commitpatch_called = True + return super()._commitpatch(patch, *args) + + +class TestGitApplyTree(TestCase): + def setUp(self): + if shutil.which("git") is None: + self.skipTest("git not found") + if shutil.which("patch") is None: + self.skipTest("patch not found") + + def git(self, cwd, *args): + subprocess.check_call( + ["git"] + list(args), + cwd=cwd, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + def make_repo(self, tmpdir, name, text="base\n"): + repo = os.path.join(tmpdir, name) + os.mkdir(repo) + self.git(repo, "init") + self.git(repo, "config", "user.name", "OE Test") + self.git(repo, "config", "user.email", "oe-test@example.com") + with open(os.path.join(repo, "file.txt"), "w") as f: + f.write(text) + self.git(repo, "add", "file.txt") + self.git(repo, "commit", "-m", "base") + return repo + + def make_git_am_patch(self, tmpdir, basename): + repo = self.make_repo(tmpdir, "source") + with open(os.path.join(repo, "file.txt"), "w") as f: + f.write("git am change\n") + self.git(repo, "commit", "-am", "git am change") + patchdir = os.path.join(tmpdir, "patches") + os.mkdir(patchdir) + subprocess.check_call( + ["git", "format-patch", "-1", "HEAD", "-o", patchdir], + cwd=repo, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + patch = os.path.join(patchdir, os.listdir(patchdir)[0]) + renamed = os.path.join(patchdir, basename) + os.rename(patch, renamed) + return renamed + + def make_plain_diff_patch(self, tmpdir, basename): + patch = os.path.join(tmpdir, basename) + with open(patch, "w") as f: + f.write( + "Subject: [PATCH] plain diff change\n" + "\n" + "--- a/file.txt\n" + "+++ b/file.txt\n" + "@@ -1 +1 @@\n" + "-base\n" + "+plain diff change\n" + ) + return patch + + def apply_patch(self, tree, patch): + tree._need_dirty_check = lambda: False + tree.Import({"file": patch, "strippath": "1"}, False) + tree.Push(False) + + def assert_note_and_extract(self, repo, patchname, expected): + note = oe.patch.runcmd( + ["git", "notes", "--ref", oe.patch.GitApplyTree.notes_ref, + "show", "HEAD"], + repo, + ) + self.assertIn("%s: %s" % (oe.patch.GitApplyTree.original_patch, + patchname), note) + + with tempfile.TemporaryDirectory(prefix="oe-patch-extract-") as outdir: + patches = oe.patch.GitApplyTree.extractPatches( + repo, {"": "HEAD~1"}, outdir + ) + self.assertEqual([os.path.basename(p) for p in patches], [patchname]) + with open(patches[0]) as f: + self.assertIn(expected, f.read()) + + def test_git_am_preserves_original_patch_name(self): + with tempfile.TemporaryDirectory(prefix="oe-gitapply-am-") as tmpdir: + patchname = "0001-distinct-original-name.patch" + patch = self.make_git_am_patch(tmpdir, patchname) + repo = self.make_repo(tmpdir, "target") + tree = RecordingGitApplyTree(repo, PatchTestDataStore(tmpdir)) + + self.apply_patch(tree, patch) + + self.assertFalse(tree.commitpatch_called) + with open(os.path.join(repo, "file.txt")) as f: + self.assertEqual(f.read(), "git am change\n") + self.assert_note_and_extract(repo, patchname, "+git am change") + + def test_fallback_preserves_original_patch_name(self): + with tempfile.TemporaryDirectory(prefix="oe-gitapply-fallback-") as tmpdir: + patchname = "plain-diff-original-name.patch" + patch = self.make_plain_diff_patch(tmpdir, patchname) + repo = self.make_repo(tmpdir, "target") + tree = RecordingGitApplyTree(repo, PatchTestDataStore(tmpdir)) + + self.apply_patch(tree, patch) + + self.assertTrue(tree.commitpatch_called) + with open(os.path.join(repo, "file.txt")) as f: + self.assertEqual(f.read(), "plain diff change\n") + self.assert_note_and_extract(repo, patchname, "+plain diff change") From patchwork Tue Jun 23 13:35:19 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90747 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 079BFCDB47C for ; Tue, 23 Jun 2026 13:35:49 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.56]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.20964.1782221738840881784 for ; Tue, 23 Jun 2026 06:35:39 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=j7NU3y8S; spf=pass (domain: est.tech, ip: 40.107.162.56, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g3oz3y1gOw/0wTPZEX5iNdD+a61FUOO9rzqx9WRe9zIZgK8a7JjqVg0K4iyotyNlt8OjNd7MyVPTOOtsxYN4CuMZKrnG22qD1r5XyBXtusB2AjvgXfCdtIW/td/CkevAkjow7uHvywFRD0cZDkwNwrPjphI6cSriu0NLmQUQzZnUAVrZkZ8tZmXx4vblpFDF4ivK5hhp3bOqsYkVTcDsTDeqCyCKuVFhQO/+Or/zWlZoPuGrX0cyjsesAoW2IL4YsbADB0gcw15aSxONc2+UgpmZ4xQqcFz+2UEpKv+RAn7Kv6AjeDgpapWio1raHj2SJ9z7e6Y7fxSQfMLcpeMkaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RRine/urH+Q7ZPoCPTb3TWVvtaBMAYSGgF052Skjb1Y=; b=AUKez4c5dBCqwW9/Xbv9a3HOGtOzDvt169xkAiHAVUpxEmOWxEQ3E1QeFfxWy0iCLmsP+vMkhqhaX5600rQ3TychM1DLcWyEccgEkO1RntO8Am+WdVUI5kFRXeflfzTnqwa8/PY1riaps5l+Nk0XJrwMLqlkPK9mFQ9r5JKFcKl+BfumUWBaKm3y0V3mEwWSGdiDEemuayOc8o6Dk3oIa3LQC7IY6Cs+mLqq+T0Lszb322yr7fT7Kr8nUBF2MZrSXNe2BazgEDRaggfnKBpLiNzvIIzcvWBk6d+ERbdTTOi3DxphmXdHIQ5a6+YEowZioMFCitJGDvw8Ha60nyy/Kw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RRine/urH+Q7ZPoCPTb3TWVvtaBMAYSGgF052Skjb1Y=; b=j7NU3y8SA58KW3FdmxVXz5U1L4hcQSRlJXVYCfayPoduEgZ06wZGCc0DYQ0LP7Oz8r47DbnAfA5X48PupfchxDyyI33gKse1Yt3eQe4cFysQn9w4Fm7Qy3TwCn2ar3GtzURzs31tAMX4fSanLmHdk3/eX4Ai/l756ixYNG007xV6yp7wyAc9hDP1tjhCG6yH4CJTqsYpw7ESyiGwpmio16cdpQeMP61u4MDwSAO7rcuUP8WvxqRrEbhMDDh7QwjFk72mVlGRU/Aho01rS/n2hFnyMnKHT/oFsRtlu0xK4ZakgbrGM4eUdtOr5JJ2tJKK3tTTZbL0XxjicuapRhsI2A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by VI0P189MB3639.EURP189.PROD.OUTLOOK.COM (2603:10a6:800:2d7::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.19; Tue, 23 Jun 2026 13:35:35 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:35 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 7/9] oe/patch: pass GitApplyTree commands as argv lists Date: Tue, 23 Jun 2026 15:35:19 +0200 Message-ID: <20260623133521.17053-8-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DUZPR01CA0253.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b5::7) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|VI0P189MB3639:EE_ X-MS-Office365-Filtering-Correlation-Id: c7d5be4f-17c5-4b6c-ff31-08ded12c4e4e X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|11063799006|56012099006|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: GuKAKFEPb6p9svbvFq5eaT1JOMEBAfMmbSBD9QwSv44gZoiykt8PPJXs5eQZbc+EVKrpoBPl2auyhV5skWZLfPOKOVtb/itgunX1zIApa9L8+wtR6EjY0n2bTtQvoTaBp4ubqJy+SrmualNYmVMARZ72OhVGioFN+ZdWBdUp1i6HHDRPQ7GaxB4oUt1QugdHu7oarN/r+ta4XsQDHdAnoFgk7lOUj/3FPwprswtfOMux4SyxON1aGSPQKaW2mv4Ww+hhte4dQPBjeTjASHVZoWkLXJq/ClHDKlPVyq9SH0AuUKcUo1j/vZTxiKTifoxpIv+HBPydvP8EKHuWzhpwiZdAwUPtZhXvjOMIODPaJUaNGPGhCknLfuRI0sbarHFN8bYcpNZX7ztZQZSZc8HOm2x3A0MIxKOdh2VDfIYfPg5F4ZONYGajvYzLty7FIfNZB9xLfrd4aUv2RvaJRJ9IuEMDS3ieukwGj6RelyRDngLTisOj1w2zAOXvUHg/iLLTgs7CYvUuSsOAKKegoWurYHrrQQtMoAHEbd9tt/TmhTnAmsqzQ4JxCemDRO/3kg2DLyB/A46oyTSxCGHmJ9DFiPe5jRcSOFZYgJxPxh3mA8iiOtS1U8Uxp7dtndH1nNEeHRjllOUAaHQJeq2p1WnaBQJy2y3xRJfYpkFur18QV0o= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(11063799006)(56012099006)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KLZ1Lbl34s2FtkQdvKp8O+LrIZl9t44sp0y4b8YuxigfNEs9Ja2u/+R6wOE3Q6Q3Vv8vadPElIAJxdgvI+0T1V4EMCFgfYXGXEHbnPr8cmWkiAhaUmX7GiVn5K1LFVb0Couw4sk0soKTI/Yo5y7ljrLilT/faHGE6w11A0Hg/hasnr98fhChlpm+SLpJbJDyqhVc9vVj4wpg3j1RzZZKZgHCxdB8ls198PvYZZ7D6ZRLy1bUABmCDQIe57fSxb6gefrE93rH2v/geaS8A0rutmSYHdSuYhK3PLeYGeURtFJOt6QoL4AQ6LRrOgl06CxqyKCdD1X5BAHd6GGBcG7+ILQ3qD+2YizbAU3KIRfBo6iUZFWSDM5xntfvt+v9fo9jSaTNxEGIMDeX8KSweBGIpunQU0VBJ0Psg7NZe204MI6KL2j8EPdinagMmpi26kga6gJ7tBNqCJdiv1iwr8XHWTaByEeTIcpgjP5I+rQ/hs6av6ONx88Uz/ez302/kmfOOZAHQNBS/1fFoah7ZfxuYllIv5kLJJo664GDEaOCYwr6zQQ3ljHRygDwbsD5UUnQpIt6OfK/b4CKAefwaRu6qX0scXZ74WIDvN0uRFfXrMbgZTffBmuwPxF0cnEq3Lz++kP2efSuhpDUUoRMdgCZ/urkt2hQbzYbQhal7yvCNKZFF2CrRreE512fI7iZFmOSI0qTOpJtF36cv1cJtiWmEsLxUfjtsSFGV94zBAZ8G/FybISFzMPIE97GW2tXqudNZf0KVXNpQON/mMDVFE1EMiwxyHldMMOf8yQa3Tdt7h6CboAI7CCrxIZl92smAs6V0kdY9mNfHZoT3Yock27ahEC+mtRBI/JXtgBRGB4Yh/mCmmlTl/igxkaERZQbdk4cqH3snJIs3eHjlfGFArZeu77i6bm7NGVYl7c7cbmDcYbuVYUfHX7T3JHE4byIppNUtFy+hi+UwrgmPMBkieFfWQGLLtbkb6YRkT0I3DBce6wkyr13iuz7sPWr2JXIV8js3TeNEPmLFsfMSy92hRcSMHl/0QV3Y7DCKLXoLQV6NUQfXIoUQsXJAkcTcdDE1d04IqoGBLwbEU/tYZuy56aGaMP8bbrQjRPT2dVYB9ILMCJU/6P2kQS5VAz+J/r+lxO0MeToWlgeFipva92HrChMvDgObYr4LcXGwaFhC38PVVqdowjJ/4B++Zu50CkPw4QC5Dy8cbhc94Jz9wRr4O8dshrf31C+N4HoQFkFC2gZ3nCbNtrgUVejxKNQeE3zJXcpOX3UgCtIJFbtX3i1KugjYereKVS3/e1chOWNlRg+XnKMhp+80z4vcEEGGpKxr/tKnriSSka+U3ShouI7QOASzoBVTlsfFhYtYyMunT64PtDIxVVOzEqzCSl5R98Fvp1PkEPz84x/YkXabcZKVzuFB0oU6PpiWrac3aPoXCmEHThGrbWTGZaGDdikeoxbMxP5bqjo8FmPY6xOcLBPHD7pLQXaN6mTPdDwY2mQi3oGJeKvT9XjpZTKpCOrpuK/eBhw0W7g1Oei0AipcR1eIHz7edg4KLChJCz6V7W4oQtl19qE4wWZs6kBTlSFXyauLODs75RX9ulbI+eo469YYVeNlDkFq4g446K7zO7/u0AY9lB5oNLXDYwFJIxRIMeOIs/AoBfeZdGIpNINrAd4T8xWQjcxx47yaT5XzY7uWXu0vQBYmxqOxksiw0OUTTx9n3LVqhIin9XqrtgTqm/5MMjenw== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: c7d5be4f-17c5-4b6c-ff31-08ded12c4e4e X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:35.6982 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 61yT/Yb2sutP9PrbIS+wv0vX8OvEu371rlpVLvtFffHtViqBxFOyFcceX7c/nR8dJ+MAAEwAYFKjvWdZfSaDZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0P189MB3639 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:49 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239400 After removing PATCHFILE from the git-am command, the GitApplyTree apply and commit commands no longer need shell syntax. Build the commands as argv lists and pass them directly to runcmd(). Remove shell quoting from git -c, --author and --date arguments now that those values are passed directly to Git instead of through sh -c. Update the devtool upgrade caller to use shlex.join() when it still embeds those options in a shell command string. Keep run=False command generation as argv lists and avoid adding notes or committing fallback changes when no command was run. Run the dirty-tree status check from self.dir so it inspects the patch tree consistently. Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oe/patch.py | 50 +++++++++++++++++++--------------- scripts/lib/devtool/upgrade.py | 2 +- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 9240637189..c76b78fcac 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -419,9 +419,9 @@ class GitApplyTree(PatchTree): commituser = d.getVar('PATCH_GIT_USER_NAME') commitemail = d.getVar('PATCH_GIT_USER_EMAIL') if commituser: - cmd += ['-c', 'user.name="%s"' % commituser] + cmd += ['-c', 'user.name=%s' % commituser] if commitemail: - cmd += ['-c', 'user.email="%s"' % commitemail] + cmd += ['-c', 'user.email=%s' % commitemail] @staticmethod def prepareCommit(patchfile, commituser=None, commitemail=None): @@ -464,9 +464,9 @@ class GitApplyTree(PatchTree): cmd += ["commit", "-F", tmpfile, "--no-verify", "--no-gpg-sign"] # git doesn't like plain email addresses as authors if author and '<' in author: - cmd.append('--author="%s"' % author) + cmd.append('--author=%s' % author) if date: - cmd.append('--date="%s"' % date) + cmd.append('--date=%s' % date) return (tmpfile, cmd) @staticmethod @@ -593,9 +593,9 @@ class GitApplyTree(PatchTree): cmd = ["git", "reset", "HEAD", self.patchdir] output += runcmd(cmd, self.dir) # Commit the result - (tmpfile, shellcmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail) + (tmpfile, cmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail) try: - output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + output += runcmd(cmd, self.dir) finally: os.remove(tmpfile) return output @@ -603,16 +603,24 @@ class GitApplyTree(PatchTree): def _applypatch(self, patch, force = False, reverse = False, run = True): import shutil - def _applypatchhelper(shellcmd, patch, force = False, reverse = False, run = True): + def _applypatchhelper(cmd, patch, force = False, reverse = False, run = True): + cmd = list(cmd) + if reverse: - shellcmd.append('-R') + cmd.append('-R') - shellcmd.append(patch['file']) + cmd.append(patch['file']) if not run: - return "sh" + "-c" + " ".join(shellcmd) + return cmd - return runcmd(["sh", "-c", " ".join(shellcmd)], self.dir) + return runcmd(cmd, self.dir) + + def _committed_fallback_output(output): + if not run: + return output + output += self._commitpatch(patch) + return output reporoot = (runcmd("git rev-parse --show-toplevel".split(), self.dir) or '').strip() if not reporoot: @@ -623,7 +631,7 @@ class GitApplyTree(PatchTree): if self._need_dirty_check(): # Check dirtyness of the tree try: - output = runcmd(["git", "--work-tree=%s" % reporoot, "status", "--short"]) + output = runcmd(["git", "--work-tree=%s" % reporoot, "status", "--short"], self.dir) except CmdError: pass else: @@ -631,14 +639,13 @@ class GitApplyTree(PatchTree): # The tree is dirty, no need to try to apply patches with git anymore # since they fail, fallback directly to patch output = PatchTree._applypatch(self, patch, force, reverse, run) - output += self._commitpatch(patch) - return output + return _committed_fallback_output(output) try: - shellcmd = ["git", "--work-tree=%s" % reporoot] - self.gitCommandUserOptions(shellcmd, self.commituser, self.commitemail) - shellcmd += ["am", "--committer-date-is-author-date", - "-3", "--keep-cr", "--no-scissors", "-p%s" % patch['strippath']] - return _applypatchhelper(shellcmd, patch, force, reverse, run) + cmd = ["git", "--work-tree=%s" % reporoot] + self.gitCommandUserOptions(cmd, self.commituser, self.commitemail) + cmd += ["am", "--committer-date-is-author-date", + "-3", "--keep-cr", "--no-scissors", "-p%s" % patch['strippath']] + return _applypatchhelper(cmd, patch, force, reverse, run) except CmdError: # Need to abort the git am, or we'll still be within it at the end try: @@ -660,13 +667,12 @@ class GitApplyTree(PatchTree): except CmdError: # Fall back to patch output = PatchTree._applypatch(self, patch, force, reverse, run) - output += self._commitpatch(patch) - return output + return _committed_fallback_output(output) except: patch_applied = False raise finally: - if patch_applied: + if patch_applied and run: GitApplyTree.addNote(self.dir, "HEAD", GitApplyTree.original_patch, os.path.basename(patch['file']), self.commituser, self.commitemail) diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py index 061a1ce2a0..74adb29402 100644 --- a/scripts/lib/devtool/upgrade.py +++ b/scripts/lib/devtool/upgrade.py @@ -283,7 +283,7 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee useroptions = [] oe.patch.GitApplyTree.gitCommandUserOptions(useroptions, d=rd) - __run('git %s commit -q -m "Commit of upstream changes at version %s" --allow-empty' % (' '.join(useroptions), newpv)) + __run('git %s commit -q -m "Commit of upstream changes at version %s" --allow-empty' % (shlex.join(useroptions), newpv)) __run('git tag -f --no-sign devtool-base-%s' % newpv) revs = {} From patchwork Tue Jun 23 13:35:20 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90746 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id D0E44CD98F2 for ; Tue, 23 Jun 2026 13:35:48 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.56]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.20964.1782221738840881784 for ; Tue, 23 Jun 2026 06:35:40 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=L11VX8B5; spf=pass (domain: est.tech, ip: 40.107.162.56, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bCm8jiAtIX0jm71mVgbaAvCrCIXSXPDlM25MgtDWYdjltpukXZQ5+vH+99MkWjuU2KIIsK1WUJom4db6oZmLlvsTHVUcqqyakpBvAYwEebZB74FJS9ic/FtF6xp+t7RrusdkTG5MzDYgnMDo8DBrT1ozjQPoHLKvKIJ8Y9wLIjVYQnEgDTdQIEcQPbxT04fcHL8fdLEHfKbA4nPe3gw7lVxzTKNa8kY1Hei3KjD/cYw3rmUsxLPvqNbEtdZ4rdug/epmvfzZVbDA8FIvnGPvrp1Gi+rRP1mNOgfE98wx6g92OTauN1q/HlYha9HKICNnJac9rfXDPdXEm0xv4DLqBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4GFTOwDyBInlTXPQszvo4LHoOOXML5jEsVn7lyhaYl4=; b=YgKDqTj2THj7YjohTpzdYQy/od9xgunodQW83f/RspaB+mHAONBlhaQwcv1uoEIVYN5ZuGsBHiaAp+teSiVZL4qoR/ZRiM10phJvA1wsWuGWGW4HQ9GqIBkfcBj9F9aBP2SzRFzR2JeWIXH8jg61luR/Lyw0hu9jjBAYdQG+X4w+nrT422glilUAeULNia8G7BSB/UUhUaQRfYEsW90S6tn3f2hXppx3S26nAtYfxngDk0wG8BSteR98C+TA9kPeoMphgex7Jpu9Ona7tiyFUxTg0GUI0gWEunfi3jMfioKnlDFR7tj40RjcPBwrl/vr45ATNPUnBDt0S1BWpHE/aw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4GFTOwDyBInlTXPQszvo4LHoOOXML5jEsVn7lyhaYl4=; b=L11VX8B5ok06Sh3e9WaD6Dy0BpEfkpBblHctV+OMjADr7vMqmENwIBNbmCU6+NlZNf2uq/EUAcHR7iLmZcEEH8epDvhD4R+PX4asLH7cBFd4CUQRE1S1jSsqzVwdOQ76sKeVNaw/T/ejAX3lcJ8e3FIMQ3x/mEDq7VLFKIc5hX5m8A+L2YiegrXU/vYuxzIbWwQWtXKAcm36qDpN9eITw3oSCukWhF8uazQQIv3UNnv65hvFQqG0MSJqgdnbI8VJ5uPx7zfkg55tgfVrolTgP0xmOZdOSkZRK/9XupsqV/m6AVql6s4hZgBc+YinZN2t1PDBc1UWCGvN7lkppSgjsw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by VI0P189MB3639.EURP189.PROD.OUTLOOK.COM (2603:10a6:800:2d7::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.19; Tue, 23 Jun 2026 13:35:36 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:36 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 8/9] oe/patch: return manual-resolution commands as argv lists Date: Tue, 23 Jun 2026 15:35:20 +0200 Message-ID: <20260623133521.17053-9-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DUZPR01CA0255.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b5::27) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|VI0P189MB3639:EE_ X-MS-Office365-Filtering-Correlation-Id: 9aafbc96-34f2-4f4f-80d5-08ded12c4f07 X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|11063799006|56012099006|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: gdtQBUFDh/Qffah3NYfjwkvaxxnQUzH27I10IZSpxXb4NmTxj+ilesRXqXqXeFA2FhnBSToedfReBmaivBTSca8uqMfUeSa+3/ifssj7dbpUHXsTd4sHJ8GRQKm3niV8/evfeO6BtA75SZuVDIX2Dtl2xSFBVhR3vc2/oChamg9FAyHPuLQAQZwyCBU18l/2uDMjX+jZ9n+dQrOuGlPVMMWfuW4OlFgYbs9w14G45+jWYche4hUwMyeJsWY5flUku7yARZHG8+8uIpIqNxTsk6VHEnpK26YcKZYOhZLBmXKIgZDAzUurlFu7zOPzRqkxW24m2w3UiT7pBXXtdWvl6hxrezRAGJeDYE/B+gzmt42ebWTDP9JprEKdbOfpeL7ip6HypvhdTCc1IH2O0oiTiiVbKWZfBI8rmAxkDn4hIvX6StTJiT7m1kUBQIyEj/L4KsRjl82uvcc5dy6Emi2Mrua4R0MJBaFxaiz417NUd/ruPHYkNexICU1lPuTKlTOwpE5/gBDiV06dMemjnC3ynKlB2eTqaV1NiPrBT1tMlXjfdbks9G5T5YgSsMdzEf9KIgGj+tIuUiyh1+uXYlpxbQ+MvlqiH0koQ8Om2qxIqSE0N3DoEWTiOn1KfJDrz5OSWZ4OsaemRJo9rQ1ImGPH+B0JCGLpr+2y6d5sAqrcy38= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(11063799006)(56012099006)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +cSyluv5qaX6jtH5CHQpc2hAXPTHp3+hvRu5HFKvctyC3zYNrQqXVdc1t4BiEkmZ/GvdaKtqCgjA+FqEchsq90LJ/sQIIAC4aTtbRbDutBvmavNIyKWIZDH9Nwsg0jgwoL78qmUOnP+yOKirKlk55sNH7AhtDso7R95DlDAmC/asR3u4Rrun4Mk6iMpnKkOSSo21fVVh5/Rr5fcnJOZv6+dsj0ixFbSpb4BmoB3R1Xih3dUBRDf5TOKD3Gr6cJVdMTjII6sINSteqU2CkvL4hs18ZP3h1DGpZSf6ZhW5nldufroupKtZKo7DRz1Fr0WPVt1ptwQy+frMFrdj/v1PTQxiimunOR/diI5mRCmmqRrbeFSzFTsVyNNyq6qF3eR598ajqJI5qp3/SoMGV4DhDhYvGTkBwN8BbnGJRRyRGqHqdAcg1UJWlEn2YvNAJqanjpTcux3UarhfBoQJI18QYPniAEESs4v8lkJ4DlmzxgUdFVf/NquAifzw1K0TsH3/v3Djz/NL0kAcDDdfk61pC40arGAyKeM/5FuV5YDefaUHgPDtqcoAYBrz7D4JXZFW+oZcUIg1oO4Mj5/wXi3cQZfxfjO5wYUSF6tLwlbSMimJxPcKJDpQon9hZ++07bhWQgPO3uMpr92pkNtBEAh6ed9/ifPKF0Rpx8/CEWwbJnVPy4fl83M8TnxFccMc45W4ZrVuyAiyNFE/1QldxzwwhgzJuOlvuTP8csuzMJwa/I+lSVXaQiFGvGRvPrEDdQQmCFK7K1QuMpsk+R9blrhgDDtKBVa9GmoaFyBLac6bW37OPqXIJToSBXHUcr7TugRLwoQjaaUsLZXKiNF5D9I9YcIvpK7IVBkQY3rltzmZvRWvS8OdLPPIaXn4HugEfeWwDvvVeykpJx/bvZmvYtqKRA5ayO2ywwEapZPeCDVzEDdF3l5IipXPwr/ud7S5Wv/GNocQaMOQrNeD0Mql/5r2+sbOHRDchiN9L2KVnHlCeIWhWOnYGgUiJnHg8yMbtd9aDExvrIYWl6OAt6qA4F3bzGCoadh98v8UP+X8M/vDpP/F8FKnAKbp/Yl5dFQoJESIqtVxIMZtd06elMHSFl6ASvWOsjz8+Y7tdf9VtEJCtLULZin2q0v0ArBLxjZCcUly4/hAumT1TqVc7U1akXMybT4VFTGVxb4s3Pz7SQ0CTdqQ1pFzrosF1eYQIcw0b0a7RIDs+gaCuGdBW/E2rpmiBBw4YudLc6WzWzmfbU6jFZPoKL2VhB0uxTeL52+WXr928DiRGR66KuSpCYjrR8aQVbFf/cqGzCLqtTH4tH1s96PJl66IOMjaoMrR8MsjgV2pGUO2NB7eYRF5KqVWQui7QM96D7Rf+AKAHKav79q3bf5cqLFt5NK/JGhEeG0JfcQSQe6o3q/mPrQKQxN0ymzk2+F9m7iyg393dnpZOK4+OhwKPJyB3uqpcRtl/RFubJVVfW6fsWik+VjIPigndysvi9IEyStYSFCDAPuJ0v5HAPAPKhmFkdAdJO0jl3HDKgK6SsvmQhObKg3gJtX0ESX0qakLJQR5zYjCWRFO2uFaFRGACNPPMdu8pix2GZFSNoS8VHW3vUDSql8gNXxLiv6xvuPjjBP2h+MH+++vgWN8gxgxV7vit3YTKY/10M5ymMnlel9edUM3CH4+7QcjSVJdXFuXtXSqQVDLjAIn+DM8xo5wSLwcgcG+IoXTiSw7mVSiJXK0HrXTpqRMSEpIeAlzgg== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 9aafbc96-34f2-4f4f-80d5-08ded12c4f07 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:36.8911 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sxPRwyjb9CfnoWQHR68LCjJgHn6SToeGfw2o/tcgV2UuC82PeE8WntDIYAd03YTqeb3GS+o0VF/M9n3zaqIbVw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0P189MB3639 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239401 PatchTree and GitApplyTree now generate patch commands as argv lists when run=False. Pass run through when pushing one patch and return the command without advancing the current patch state. Use shlex.join() when writing the command to the manual resolver's shell startup file. Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oe/patch.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index c76b78fcac..1d50e83ab7 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -277,7 +277,10 @@ class PatchTree(PatchSet): next = 0 bb.note("applying patch %s" % self.patches[next]) - ret = self._applypatch(self.patches[next], force) + ret = self._applypatch(self.patches[next], force, run=run) + + if not run: + return ret self._current = next return ret @@ -868,7 +871,7 @@ class UserResolver(Resolver): f.write("echo 'Dropping to a shell, so patch rejects can be fixed manually.'\n") f.write("echo 'Run \"quilt refresh\" when patch is corrected, press CTRL+D to exit.'\n") f.write("echo ''\n") - f.write(" ".join(patchcmd) + "\n") + f.write(shlex.join(patchcmd) + "\n") os.chmod(rcfile, 0o775) self.terminal("bash --rcfile " + rcfile, 'Patch Rejects: Please fix patch rejects manually', self.patchset.d) From patchwork Tue Jun 23 13:35:21 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90744 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD559CDB479 for ; Tue, 23 Jun 2026 13:35:48 +0000 (UTC) Received: from PA4PR04CU001.outbound.protection.outlook.com (PA4PR04CU001.outbound.protection.outlook.com [40.107.162.56]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.20964.1782221738840881784 for ; Tue, 23 Jun 2026 06:35:41 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=FVNhcE8D; spf=pass (domain: est.tech, ip: 40.107.162.56, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dgV1Ppscvfyx7T0lltMnlBKn6rjEs0o3BfSsCOwtHbGHUXTvMhDGZJnkuGgk4CnVAUiImKsKOhkflKZHb3HwBnf6FcnzcJ0mg3Aa0s87HlABRNPt3IdRVS7IO0akSvxZZQJ6yRVbRpXz6jL6AJdTqIUM/Y4JAanCyQKd2FHkMkLiXRe8McUjiBcSJ5pZNvMsQfSllKlgEMn/p3tiYmx0QDoJ4dUl9Ms1+J0SxXeWSYH+JNmHcger9kRkFJZ96kslinRQmwzpd/4d26x88ghcaaTTTDUJozVo5/cE3acY/Mp1z6tpyOZX5VO+LuHETjbBV3hxteLEoJr27KLWeUDCSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6qPjB6ZpyAaOVpBOiEFUNSGCjK3WT6xTiskCZSX0290=; b=l7NyZ+T8vbtcv9pcNU2Z3PDlatavh2evbGMVMqlxinMYw77vzJ5yHeNZ8Fuxrf/PvMpT+UcmL7djqVcpKwwAP6+SObqY4L75R/CpUqQkZf12RGWDB4Su1PDrmUAF+iXm2/MTmoSzJsjG6HWekfhZy4hS4sCZKWA6/b6qfHX+MJlGcOF8Xn42qlZeeQGrlNLowD2+aQRVMD5dKEx+6AvH72UpP4IcZ0m0Zf+fP4jjWoofaUE0jdMaU2GqnbPsyIlTX9y5F9Kks6JBRshV0nkOtWDERwcyaprpErGfJAgAy5FuYfz8uABWf5r+g3hNSJ11GYvYHhxXM6fv9Qr1w50EPQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=est.tech; dmarc=pass action=none header.from=est.tech; dkim=pass header.d=est.tech; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=est.tech; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6qPjB6ZpyAaOVpBOiEFUNSGCjK3WT6xTiskCZSX0290=; b=FVNhcE8DPG0zwHRzhZDyw1++nmmRKv4vCHuNV4FiQQj40LRtIEVEKPU50f2uRe3ZPCCHF/KAqbveZpomter5p23bmt6xBy5/LQkAr6VGgNm3eQYfsLDWc6hryneCsooLFO9SQ77n/kLv13YFr+hH5egZIBUM3oUjWjsemWsLe0N/fC/oDcGFjeNIbNa51c1i8aqWG4PsKKtvMzRojwWwJnsr3uDltlnDvfCbsem2CN5Xp1r7AsGE6cbcY/e9GhjdSmhGCjahvUfQGKRCmL3AWWpc6legHJiLQ2nWeCBC8Q+W4NfKfs3R9mCsOeK4zp1nKLEsZjzpP7CB4KuQr3YuHw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=est.tech; Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) by VI0P189MB3639.EURP189.PROD.OUTLOOK.COM (2603:10a6:800:2d7::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.19; Tue, 23 Jun 2026 13:35:38 +0000 Received: from DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82]) by DB9P189MB1641.EURP189.PROD.OUTLOOK.COM ([fe80::90da:b700:f102:5c82%6]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 13:35:38 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH 9/9] oeqa/oelib: test patch command argv handling Date: Tue, 23 Jun 2026 15:35:21 +0200 Message-ID: <20260623133521.17053-10-anders.heimer@est.tech> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260623133521.17053-1-anders.heimer@est.tech> References: <20260623133521.17053-1-anders.heimer@est.tech> X-ClientProxiedBy: DB9PR06CA0007.eurprd06.prod.outlook.com (2603:10a6:10:1db::12) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|VI0P189MB3639:EE_ X-MS-Office365-Filtering-Correlation-Id: 82b6eb16-ebef-43cd-a6fa-08ded12c4fcd X-LD-Processed: d2585e63-66b9-44b6-a76e-4f4b217d97fd,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|11063799006|56012099006|18002099003; X-Microsoft-Antispam-Message-Info: 4x+3evPJSQHi9c0JW1RBj4X732jfD4dg83GXYrx4ryCRbvK3bPlSYtnJlWm95JOEKsPDTViTTEQav5MiEBzntridRZG0uqGpgvH2ewnEAVdCMWgb0I6Vh78fD2td7o87GJIHFtfvPIEkiEzqtpAI2lmXjq/X/ZZTV1w7TLr9d6CGeaYP89E59AZvPcMcLfTBQScZUoeGQlH6ehO6un5QHP2kGOrfiFUj/kCWHz7En1BU7rgsJLYZbF7ZVcuDpD6W0rW39XhJBc0pqrosA0b0Rmc/YFoMEQcaP6BgXmQXMBy90Z83z3c7YPTTAEDSPOk1KiuSsUVdfQPwgzqaFnUJeWQj96KtePn1w88prhgIXzaGyjFDWgqdwhm+KOpaIqEIuVKzPUdCvHNeXNe+KFg5zLcZA4d2TEIns5Jv44X/T0Clu3iuuf2jsxu2IYU+ptxBV2XRw54HFNpB/IRUKe2jNs8Y6xcnSnK68XKfUQCduW8e1nWoO4M8o7IaWlzs1QLNv+eegyjXIM7GB8xZMind+tF7WMhfmzgx0mu0vuUSI7Jm/NGBgeVWJrazSjwa1X6og85gM5QY+Jo8IkiRfFXaTSaDtku7g4OODZ6aHyfPM+mz1bpPRpUfjZR12LPxntMJPfQYDs3bvSCJiATpc/Ef6n+VR/NwNSoQ4FCFf4tAGCw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9P189MB1641.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(11063799006)(56012099006)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: gvwhksudcBJ2eSKHa0rkfyVFdlzH/thS8ctOeNxf7BepUadQ+XjA2TleSPsM8heJ7xjuwGv6Dz+fEvYv8r8hSCRHZOasONalXtA5i0gIKccFGebeIG91lMZl7RTe7yN0+ROhWyIrb4tYg8QhIJSc/fRxDFku18FtXoBEWYybzmLEYvjAZQ0o5q96ZtOowTCAL/SuC3OPSy9wmexTBOYgX2BzQPer3D5mFTaniLSTT9KUpmmaYxdyYGRE01D3UvyQaJ3RQFVA2lQpkTgar1CcEC4BxPp+6GzrIcYpHnLS+zqBdZ3Cxa3XPGRLKzfGXQUWZ/W90O6K8/7YTWqEgtNIFkUDUL/VXcN9RdjSextQi5NJlQfi54dRat3NJiq3xefYMGwf9wGvxM6PitnTZMO/4oVQ/T3gvoqUGm4xzYp4/IFCwYRkB1zFhPX7fRJ4kf1dC9x8Bd6M7Ka2FYAJ43dBtlQiUGVnn6Pdc98rvmRBZzUDqEoR2//BqsXZLo9cum+Qyvd+dLlMaNq51iml1Cwel8wudZMQuOUIApUaEAZF9fscTOQKk2EyluXstnWaZf2PRobDIO+fuupCxR+hCeuP9GC+CjvrJ2HXm5CFvs99ICa36QGXS5CzY6pHDKw3dddrjcr69pijM2WWvgRrMhNDnbHkCR37Lcx08F4OEZ/FTjMRLLIXyrPu3xv3pfyT9ccg0qyGsMLDs50uyXh68xkcOZj9FprvMdPDftMOq9hJ+eTkei3VM5sTTydE84kl3o5LIuPEBIVwG6CR//23HI2vFfL8VXeQexlxkxkvhfOYbLn6XWphac4BrfG0uQxVm9vI2Bz1ekmV5uclIf+n6osGXIKLBV2MdGhzuEmjTMdwcrQ2LeKrKVsFhOWOGy/pP/IedzadTsf1ecw8HovMnKWUjdkfLn1k0OYxKpLpPNnhjoHU5zSXxIXciwBqYRWlgGilhwonmhHqxg89wWEPPW9mFJ1v1VT4+8R314r8gQuheufQXAkN1RNpjYPsAhuIiTULeJA15lXWEvU7hKqKg9EaOyUfNtrHEH55RFmfHSiplrACB8LEVflOeJfrF4/wIV5H5YIBRQ/8B/QAHSZ7TIcDi8dbAugbWqwmKEiKP58a3zxPB6zUmPX0Kh8WryXWBWBZQoTY+8IHmZU38eZD0/WmgR+CaC/gMtYr3bLtSP9mcwAuKJbwXkazjIdyvm3r+/1iXvjOszEDkbJ+nG2fgLNHi1vGNUGGfmXgL+zkSzJoob1rc40byso/UnIjzw6g3TFoVPnCyPv9Ku9ubz1I2O/fV0324CwF+UfB7FB2RQS2eXl5FY6sdm/E91CrOwsbi6tK7wgYtyRu8olYjCK1JC8gOJMmOsDRusERfxmYDuSnX7KYJ5Le7SwaMPLc7wd7Lb6qBcfoIF+HYSeJlDsDBvcaZ8mp1WSPSINJN0D/yS8n3M0DhU5u0EgzaP0kOSpc6jjFhnZaNQyPFGfSm2SvCVPzb7z4cpnRxA3SmraJoG2rnK13DOmlOVYHXxbbhsSIJOvH+ZNpDnP4wFfTdFaZ2Mwp3qm1QQDplfOUQYLqswISJ308rJA+yhxq+x5/NJzGv3zPa7CNvL76Y2rMlgfKMVh2+/3e18iuUKDKk/iR5nXcoGIv2Ccqw4kBU1YVdBGOCH6B61LUZVG+uFLQ/KvbKYcdsEDbCBJTd+9zpREoB64ZOfUfuS9T9+I5wuOW9jrFphlY1edQ+SHqUCJD206vs89RQA== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 82b6eb16-ebef-43cd-a6fa-08ded12c4fcd X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 13:35:38.1790 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d2585e63-66b9-44b6-a76e-4f4b217d97fd X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dDzCNQzeJPl100CelQ5yGnmg+51VGaSZ0zmYHKFKzl19ytahuhRi8kphpNhdUsVCg1R5lIwVVgU53qZw8n8g3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0P189MB3639 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 23 Jun 2026 13:35:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239402 Exercise fallback patch metadata with an author, date and committer name containing spaces so direct argv execution passes those values to Git without shell quoting. Also cover the GitApplyTree and PatchTree run=False paths so manual-resolution command generation continues to return argv lists without applying the patch. Use patch filenames with spaces to verify the paths remain single argv elements. AI-Generated: Claude Opus 4.6 Reviewed-by: Daniel Turull Signed-off-by: Anders Heimer --- meta/lib/oeqa/selftest/cases/oelib/patch.py | 98 +++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/meta/lib/oeqa/selftest/cases/oelib/patch.py b/meta/lib/oeqa/selftest/cases/oelib/patch.py index 69e06b5ac1..9dc37cd0f3 100644 --- a/meta/lib/oeqa/selftest/cases/oelib/patch.py +++ b/meta/lib/oeqa/selftest/cases/oelib/patch.py @@ -61,6 +61,37 @@ class TestRunCmd(TestCase): self.assertEqual(ctx.exception.status, 127) +class TestPatchTree(TestCase): + def test_push_run_false_returns_argv(self): + with tempfile.TemporaryDirectory(prefix="oe-patchtree-run-false-") as tmpdir: + srcdir = os.path.join(tmpdir, "source") + os.mkdir(srcdir) + with open(os.path.join(srcdir, "file.txt"), "w") as f: + f.write("base\n") + + patch = os.path.join(tmpdir, "patch with spaces.patch") + with open(patch, "w") as f: + f.write( + "--- a/file.txt\n" + "+++ b/file.txt\n" + "@@ -1 +1 @@\n" + "-base\n" + "+changed\n" + ) + + tree = oe.patch.PatchTree(srcdir, PatchTestDataStore(tmpdir)) + tree.Import({"file": patch, "strippath": "1"}, False) + + cmd = tree.Push(False, run=False) + + self.assertEqual(cmd[:5], [ + "patch", "--no-backup-if-mismatch", "-p", "1", "-i", + ]) + self.assertEqual(cmd[-1], patch) + self.assertIsNone(tree.current()) + with open(os.path.join(srcdir, "file.txt")) as f: + self.assertEqual(f.read(), "base\n") + class RecordingGitApplyTree(oe.patch.GitApplyTree): def __init__(self, *args, **kwargs): self.commitpatch_called = False @@ -120,6 +151,8 @@ class TestGitApplyTree(TestCase): patch = os.path.join(tmpdir, basename) with open(patch, "w") as f: f.write( + "Author: Fallback Author \n" + "Date: Fri, 01 Jan 2021 12:34:56 +0000\n" "Subject: [PATCH] plain diff change\n" "\n" "--- a/file.txt\n" @@ -152,6 +185,14 @@ class TestGitApplyTree(TestCase): with open(patches[0]) as f: self.assertIn(expected, f.read()) + def assert_no_note(self, repo): + with self.assertRaises(oe.patch.CmdError): + oe.patch.runcmd( + ["git", "notes", "--ref", oe.patch.GitApplyTree.notes_ref, + "show", "HEAD"], + repo, + ) + def test_git_am_preserves_original_patch_name(self): with tempfile.TemporaryDirectory(prefix="oe-gitapply-am-") as tmpdir: patchname = "0001-distinct-original-name.patch" @@ -166,6 +207,51 @@ class TestGitApplyTree(TestCase): self.assertEqual(f.read(), "git am change\n") self.assert_note_and_extract(repo, patchname, "+git am change") + def test_push_run_false_returns_argv(self): + with tempfile.TemporaryDirectory(prefix="oe-gitapply-run-false-") as tmpdir: + patchname = "0001-distinct original name.patch" + patch = self.make_git_am_patch(tmpdir, patchname) + repo = self.make_repo(tmpdir, "target") + tree = RecordingGitApplyTree(repo, PatchTestDataStore(tmpdir)) + tree._need_dirty_check = lambda: False + tree.Import({"file": patch, "strippath": "1"}, False) + + cmd = tree.Push(False, run=False) + + self.assertIsInstance(cmd, list) + self.assertEqual(cmd[0], "git") + self.assertIn("am", cmd) + self.assertEqual(cmd[-1], patch) + self.assertFalse(tree.commitpatch_called) + self.assertIsNone(tree.current()) + self.assert_no_note(repo) + with open(os.path.join(repo, "file.txt")) as f: + self.assertEqual(f.read(), "base\n") + + def test_dirty_push_run_false_returns_argv(self): + with tempfile.TemporaryDirectory(prefix="oe-gitapply-run-false-") as tmpdir: + patchname = "plain-diff original name.patch" + patch = self.make_plain_diff_patch(tmpdir, patchname) + repo = self.make_repo(tmpdir, "target") + with open(os.path.join(repo, "file.txt"), "a") as f: + f.write("dirty\n") + + tree = RecordingGitApplyTree(repo, PatchTestDataStore(tmpdir)) + tree._need_dirty_check = lambda: True + tree.Import({"file": patch, "strippath": "1"}, False) + + cmd = tree.Push(False, run=False) + + self.assertEqual(cmd[:5], [ + "patch", "--no-backup-if-mismatch", "-p", "1", "-i", + ]) + self.assertEqual(cmd[-1], patch) + self.assertFalse(tree.commitpatch_called) + self.assertIsNone(tree.current()) + self.assert_no_note(repo) + with open(os.path.join(repo, "file.txt")) as f: + self.assertEqual(f.read(), "base\ndirty\n") + def test_fallback_preserves_original_patch_name(self): with tempfile.TemporaryDirectory(prefix="oe-gitapply-fallback-") as tmpdir: patchname = "plain-diff-original-name.patch" @@ -178,4 +264,16 @@ class TestGitApplyTree(TestCase): self.assertTrue(tree.commitpatch_called) with open(os.path.join(repo, "file.txt")) as f: self.assertEqual(f.read(), "plain diff change\n") + metadata = oe.patch.runcmd([ + "git", "show", "-s", + "--format=%an%n%ae%n%cn%n%ce%n%aI", + "HEAD", + ], repo).splitlines() + self.assertEqual(metadata, [ + "Fallback Author", + "fallback.author@example.com", + "OE Test", + "oe-test@example.com", + "2021-01-01T12:34:56+00:00", + ]) self.assert_note_and_extract(repo, patchname, "+plain diff change")