From patchwork Wed Jun 24 12:43:59 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90833 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 22D54CDB471 for ; Wed, 24 Jun 2026 12:44:26 +0000 (UTC) Received: from OSPPR02CU001.outbound.protection.outlook.com (OSPPR02CU001.outbound.protection.outlook.com [40.107.159.13]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.6140.1782305058372622363 for ; Wed, 24 Jun 2026 05:44:19 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=g4k5+PT0; spf=pass (domain: est.tech, ip: 40.107.159.13, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LtvTor6GK5G4mZEsjcO4nHGYLdiFtX0L4cpu3aZHnQk5VNx6uQWvQQ35KnxPZbwFa2I6Jj9E+OKyhHea5R9e3hID9N0AgfKmSfht2w0ZXI2bHC9oHFtecZ5ywGmSm5VYEIJvdDgIMsWOqS9YGy6NU3EGXGakLOtc39bfIyondzonXVOxSeVylhhPa9IuX/P8Fg5Ow8FpEmr17OmOwsdgCtlQkSi5vfmiYPTs9WV5t0yzQOivygHQp5L0VHU8rviN5fqYgDPqgKFuMdiKCNRUVMn+C2D7F2iuuZ+eVY7gsxM3b/KxyAXXNHrN2v8FrNDpVjCWkGOA4tdxiHVSDRTfMg== 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=BqiLR0yWW4zY/c3LEnOlze+hx0FCisrR7TNwKdEJKTV9zD8kW9rCOuCwUvEsnHNsFa9vWKhSLCy4y5LpqwkbOth7SjP+1rZlsTacNsXD5jwZazK1zmtqtbxI5U8KYJGDObRdcH+47zJbdIe85eNeidzaRX7iuyRzIlQyAhNLK4dD8AyFJ8cms9aR5ByOEB+3GEK/PrxHjai8M92amCrsLvlh/Cj5nvGqjFNUcUkD8CmIDOFwuecgD2jR7xAqZ+Xg0WFk86Oe8VPOT6jN7jVuBHA/+c5F6tGi0rCXmowqsiwf7S1q+fC6DGpjiHIJbAQqO0Kgzprie9fzri0TKxEIRg== 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=g4k5+PT02mBhvJw93tsVfrEdWdk9YZ4HVlSbV/NyoDMSqRHOYmGEU3CmRHJ0BuNG+NPQwwbw7DNeL74J/IUIfjcheSsv+leXOxVhjWpk+SVU2hhWxwJSSRhesbPqXBlRpn3ULGShDK5birSt9sql8EdLkIqIvATlNWPJNzaoc/Nz+mGjnFQPaP+JMGmYIZFXPvr4CvXX/IQDphjAnnY0smJ8qUf7DjSGigmPJ3uBreDCOOAYl1tsFlaOeV1hmgxjP6L6zDs6d5Mog35nbLLKAAN0X5C7bBFIq/LrFdE70AvFacKtvsI4rJ+Tt3PemQM9ZxPwkFxK5lkE/x3M8WvKaw== 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 GV1P189MB2739.EURP189.PROD.OUTLOOK.COM (2603:10a6:150:1c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 12:44:12 +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.0159.013; Wed, 24 Jun 2026 12:44:12 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 1/9] oe/patch: drop shell=True from runcmd Date: Wed, 24 Jun 2026 14:43:59 +0200 Message-ID: <9dc1edaa428d6a93b72170e9ed47377460c0d506.1782304923.git.anders.heimer@est.tech> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DU2PR04CA0175.eurprd04.prod.outlook.com (2603:10a6:10:2b0::30) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|GV1P189MB2739:EE_ X-MS-Office365-Filtering-Correlation-Id: 4edfbaa1-0ea9-4379-341c-08ded1ee4b11 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|23010399003|1800799024|376014|366016|22082099003|18002099003|56012099006|6133799003|5023799004|11063799006; X-Microsoft-Antispam-Message-Info: FpVMcvn+e8VoaaQJ9HjPhxkAIECwtqF+SSU/VISBdMuLErRHHK3JTA3q8NAXRIDlvzVcYd/AFeT46pkwykI9PYp+wUb/YgSAjS4WOeHmWYOJ/CC0xotOr1oJFB32ATr13r1G3aHur2xEAf0BsanI4sblJtMsdjDA7bhF0kvxG48Hxfj9J9+zJMsSlzeId6OzLG1WVrdTljNsDoE6moUXOx/ODva9YYl7Fhl27j1ZYXlJEwqQtWb+HCDggZIIjjKnmRFNgDahu3Gi2ipZ3iNW8j/ZWjTt2sLrwHg4EfwqunlOnpM/nxzdUwYMNbO8ukNUbha8sEXEbOqdP7Ifd0qwxZDjomQQ8F/BSQGUsOqv7vRlZFITKvU1WS2hoP3DgdA1lRhtFmo0RZbsSHXg288xs5EvQCbmJXJFfoGR69bF5KmS3xY/GD8XBXt2TURJygRHx9R7k1zP9RwWi4t4LDzUTrajzrjnWguq2kWLmnHPU1QgmzMFG2rYtqGmK219C384zwBY1AZYyarwr4xYd9HnTcG/nLsAwBhyxvIfO7bAeUvcZPopl4W58QeDaPphmA9wKmKXb/w1loY7z40VqpFPbPBD7tbv13hGfocvND3LTuNGH2scfL5sbl85DCXgowsRleKbXgRUdM/pDh4Pl5hKiNTjxoT+zD9fO6J3kVLipTM= 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)(23010399003)(1800799024)(376014)(366016)(22082099003)(18002099003)(56012099006)(6133799003)(5023799004)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: RpxgvXKsyHuFzEEaMxc311EGo2lIloYDZgpQIzMiV4XWMy31eck+GcfLxu1AKYD+LArVGHD++P+QVLPOJ9ab7KPdBar88rRMDhJJf0sI1tAx2rLrWvatY+NWGrdtZmOlHMPn7bP00coRo7ccL19aQXfWBwZIa+cp7FniUEkSlLSVOg/do6gH6tHhxQHdLIuDAUeVKfRedMo+xnHV5MdD4uYztsR421sWMLvkPz6SfFHOdSu/qn/9I2zr0JhutK2WVtUl7yXcdIKkXmsHpnzuFH2/Fs0Dx/mL08qlqmJZ8URd5HiMopF+ThB7eLz2BmaFBZcbuIC0F4rjp/isuB+GTsT8ELRl0gpZ09B8501MxYo7V9bKzaLqqiPHS1wnAobg2JMIza9a0IaEldJ7QKBso0D5p31jart7vXrTl/PJQgtAH4LtSBy74nuZ9xFd6Nhd4wj5TVibGbxzQMccd014VUZt7ZXjX3WqvPmU0qu+h7BjmErHO5mM0CCjve6DY1Sd57Vsoy3ZSDNG89Om6Rpbd2Wq6OLjfQD+PJ1qHp3VmOwyyYHorycObh+l3UKXXer5sPjgRQhLNaPaEsbg0htXK8FVvhZgbUQLCms7Ze2M4nLxBqX3v/Uw/2Cz+j09HVxx4osaMysJhrDObg9H+6S/Ifa3cIIXZATR7iAR5/nBYPCdypcC2N/K0ZQDFO0dyVHFzcCwsT5SsuVpht8YwHpfqgwNxdcmPMiaxkt+dLjOc32F4EZjKDf41FAcWSJNcBHPxijp+6WllbTbBCx7Sm+0zjqsYMF2T7mTDVCc+Jn2AdpZZgtVyCa1sepHJWE5OfNqXPMmO3bdkGFWEk6lgTF6GLK5Gpy9DNLW3N9mBT+9jEw4QUIZndYe/M29k5KN/F2Au5V0DD2N9+fu1ane0TPWhbGTw21LSOe9ERHvrXESnE6uNQwqLmQO+xRv1w9TdzKDH6VpLHygK3tfqZPX9zo8eiYm74p9mB8DtaKYK5opLfipueR889P1BwbYLAUcFg+3zoAQQzH1GYSbH/Wp4M9opiO255ugk6+SQn2J6Njef39p5rOoAqxLghi3adgvJ0UFmexAc1RoypfJ1PZvLu8tBj0k62NY5sUyKaUdgaVw/SoE394capopyaOoBuiCCIcpqh+rL2qfcYmttbfgo24KF5TU8yhIk3ae0Y1YAPiYCjGYhiuPOedsqfCAHpyXjnmliVKzzCfSZXzqhbgLblabgPd+HOEv9DzC2krIaYXB+w6FY2YkKWP5kLrNsbnC8XLNXv/GCKtQt4YuiuMZ9OTRjvrTO0hfj2JT3s0ny1MI0fZAm6bYYpCJzRWPruiV60rGfdxRvdku9/FeIE1LAdKn8NFYJRndUMi9lHodzpbz5Dho44ac3r7DtJMe5JJk0vPAACL/rd/UOiKp8yHMBCDOt/R7MBcrUumImnWwSIsqDLIdORAsEN0HD1UKI7cqFUsNZoBjJK8K0YywW7/84oViD41bwE5ARCLVGOpSoESWRqBPjtWRhT89l/Fi19OVCaqmVO8zTgZoe2lQKpDHKqHPKKqfrWWM46GTATCBNJR2CFNJLTTfOSB3DPUltlY2/hKAaFrQ9g489psQUVUnC/rYqjGerK7N5TvgAUI2cTLpoQ3HSYmzHOiVD0n8tNfsKjDU34P0RGw/R6xXDOOmnZHGkKEBDlcD5VLCJqtHYg6XD5knu0mL5g4l0jdD4XJvNFOglAt5FdDjj9sBMGSpDXpgvQ== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 4edfbaa1-0ea9-4379-341c-08ded1ee4b11 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:12.6105 (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: TwIRQ/5GjR5KZ83L/zKBS6TBpRN+iu4J0HRYvs1MpIxBEwBbgDde7iTNuyBG7EyEQ19/GOJgopJpf0tGitn+Qw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P189MB2739 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 ; Wed, 24 Jun 2026 12:44:26 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239495 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 Wed Jun 24 12:44:00 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90836 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 87107CDE004 for ; Wed, 24 Jun 2026 12:44:26 +0000 (UTC) Received: from OSPPR02CU001.outbound.protection.outlook.com (OSPPR02CU001.outbound.protection.outlook.com [40.107.159.13]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.6140.1782305058372622363 for ; Wed, 24 Jun 2026 05:44:20 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=DFQjduSE; spf=pass (domain: est.tech, ip: 40.107.159.13, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A0Q1RmLealvCZVmGdmZijai2pNpFiQ8Ck6RMzLFhEXBF0crf0R6+miAPdm3lm3tDX3yYGMA3o/wmBM2JxYVBbenN44Mci20/eze9QWl7SQmHQ69ReylVB90RnOb64jlvRI6+pcHX1FqBdyY5+c97bkzTb4JJ+1LhMA+Irqj9TJDSGxj6K+abvebt599GRYKW1nENrJc1nwI+4jmcMOZBYsxCHfQSJDilLYmQjOEENNtmzku33i6mMvo/lAwZSuzrx3sO41kQ5/8Jrriq1+7WU+0k5/55V/21Oov2dDokOx8IXy+kcmT3j681uueriw8nPNHp2v8lhh3hflZ1QSNkig== 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=NV8H9tOdyT3j5Wpmfc4t1KlisEzFygCUexCBmyck3rbN5EigdT5V0iaqWITNtNE9dH9zHlpDFujDBwB7bVjUPycOcFK+xA9uPOXKgiWvrS/PhsARs7TBuyLP+LpzX1c/q8QgF3lzk3NxM5mEqtzS9Js3UmMUz3+lPhNdIbb+L8SdY9n58JZvQpwkva6hwCVN1FLC4ViBIIZpWJPX5LFztv9uQkzFXMZAaGP+0cQ1mb0YC/5bRIcRzjkwf+4YgfymeqXVsH7nwLwMs6ffdHGC2LAjBWr0+hkqFC7u/uMTyAiZi2Gnf40M/30rvGnNlCY7TDzS2FvH8zMOx799Gh/dVg== 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=DFQjduSEIInDEInvycE78pBszd0N3Sqpwr5BkuyGtjYWQq6HJ1e5CmRu0TotP78/yfEp/Y6qYLnjjGFx4S2JWfCLdepswApgOIFwbrnybaOuL1FjGut1D1gKLhmm92UTrcEI3b6KjGdoeV5Y48KNLn0dZKR70weLj9WTdThp3yKbNSW/RzHDbQBMINxaqXoM6k7BEO3H9FdfmqemrlxbYgtDFiv1C1rzn5pNVCq02I9tQY2IabxYDD/UXSfWH05AqJE3UD23rI4iCzZ7HPWLDCw5cp4FBqzeY1Yr2bCgCHOA/yQjBbFXI88BrwECSoKL+cYVFwnODWfwm+ok2c2ktw== 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 GV1P189MB2739.EURP189.PROD.OUTLOOK.COM (2603:10a6:150:1c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 12:44:13 +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.0159.013; Wed, 24 Jun 2026 12:44:13 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 2/9] oeqa/oelib: add runcmd tests Date: Wed, 24 Jun 2026 14:44:00 +0200 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DU6P191CA0026.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:53f::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_|GV1P189MB2739:EE_ X-MS-Office365-Filtering-Correlation-Id: 8dad2a43-54bc-4bc9-206a-08ded1ee4bbf 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|23010399003|1800799024|376014|366016|22082099003|18002099003|3023799007|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: hr9BrwsDas9XE6mQ8LSjaIUMBwIyeuzmUtb0VdhAw9Rf+6glt+0l0sMbS3iyUmsRWFfw/MQcXkhSYreCkXogfKo/mXos9PfheMZiJVOqKGwfZ3Jz3Ji/PK3Nq5NbbrIzior6AxbcY2ez3WuDobnfcZpc0S2dvxO/Aj/exoWNGtsVjSqdvFAvJRJK8pDMzVc0F29y8BV5ibkzH/M+G/SmCbi2w9oroHNyX7bIzowXyxEeQkzMyu3eLNohOySIVsxiLud3OR8D3kwzz9Gsdf9MG+efTEau4FntDrhaAgsBXkLwdl1C7pz04B8C34Hrf7QHp1qHYz1auCPHTPhvfekhenz15UyADE6whYUylWQzEmO+cu6KAaDWiyhLtFuzgDKcIxgYkkC72IpUPm9dvXw8cfXkgtJ08sYMnekJzLrUvlnDeHzRmjLYLqAlu8gZHboR7ZU6T7ipu7s3ZZhcQ5vbldI5QsLy8RH9TQIvtlyXOm80T+D5mmdeMJKJy9in9FQ6D4lo2FXr3PssN2roEFZ47RgzrX+zl0NGHy0x+Cdoj7jJIhU6loL5XMJuv/Q67PUWI+KQnhJcSKdmk7tsBd1Ipwweir/UI+UgVboIc73EZG9u4VGUVZ9X90xTT6Ds9i0oaEyywe1cJKQyr83K8UNML9bxUyVRLOhf+DMyb17cs/Q= 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)(23010399003)(1800799024)(376014)(366016)(22082099003)(18002099003)(3023799007)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: FtUpKyp5S+xu8AKLysmHRehIdmfvSXlkrJhX21GnXLH5kZsm5XYIzGyNd1KZDwzogsDt5ERD8caH7T40CoLXU2WSYsXqbjS1QYK44uD6oiD6nYAspMlwBgCTtQeU80Ck+RS5vw5lDkAdzfrD2BoNCFU8HzflwN/Q2bn7E1iveCfmmNr5YXnk+6fv7/Oo6e8PWYTA1f2pXgUK4R2KvR85u0AeJFr7Obc9LvpboguZJGqpuMMhvhqiBfKD/ImAInW5w9fex630lbfEDWvedmq91l/SJLClmLzZLmVgTb4+sndrnlEsSmJR2SQzMB7vxIR4Yxxo1XIW7nwkhJdXY4OgNqpLcYz0fLJuFvKed5mFMqzo3XFHFCaEx0Zzt6Iy2hG2256adSR6JHePViSnNHtw5z3Bd29lDKMfZ4cP3a0xI8mWmdpMk4fb2i2BMKyzUHiHVazYy9+oBty8eKqQvJn5YMxKVIz4r+Br/eZt+skil4MvJ+RDTNqPrOW0H4EXVv3DpT26s6HcC9sU+9JjjnIAJzVf8C0lyacQy+qyJQrZ7QFZ+H/6ZvC3ggXltbKXnLfOUj1AGIL+BBmWBJO4AEb2i31ULMeDguqH5MH3rHgerbdDq2L+8ALRaUxo35yagtN4sed0DN9bdldfIzkzQFLWzUogaKncA0tDzOIbXYOWrCvGjhR2cUOqtdq6FlZywTJkqCP7RxK43mZyQp28Q1arWqvAhnkoNyZIPVEoGLGgvzv9d7fNgbMGsqXEgUwkL1f83GEtHuxsgPl+bClI/coRyYBY8qPpSycHu5Ix4+IGc+tSH4d9MxJLwHBQuQ1Pu3lCy0rs7GLyn7jnPFRFg720m+n7ymwR7RYBp4QkRTFxvaaNz2LADViVMavp+dEHX+dgRAHHx30BlOuojmsWTuIqveJk6EsswEy71nRjj5ZetXfwZdw0TgLyPjAHgpz4nHzU7v8G9gayJYE/+J4vy9Ym+/2E+0v2agkUJZVh+8gee5ASagXqPZXJStmgFVeCFjFCVkNFtYnfy+zDukF+A0gI+53LbzzkxPNmLApVt1a8WItbfYB/sq/N4u+/s7EP3IuAEPS8yn26CP3LBrtBvSeqrCWKBhgvC5LHExLz8iMQNcCFk2ehtGZ+vNa0N/I+6xGSu3KS4944O7/TvS1bLqGamEhh4ecam2spv9QuPLTHUa63u2aaZOfbMLsJcQaZb+d8UAnEcYAJ1HUFyAchOn+fmDzt559DjEboedtbcLMsJTa68IojEWHXsjTMTs1GxfdV0hS6/UOR1gVYKMfh1U611K0c1mkqbfCBzVE0TCpc8b7wqowqfczbT/jwR2yrfdLQlX7VH38Yzzx3xQcaWPcbKx6g6xERyZc8BlzkmBRme8guTkB7nJSMMLar9QeMeqg/ESkNo1zujtos2NxvR0T0qtgq4UmFcABD80FXngX5XniFjVnEB8tSidbijRUgCK300T/fsasnLmkc5x9lXpG9otA8laoxCtY/ON/JPQwFVbAqJcPrhkyKaZryF6IGq6XXLa4cZN3Vbqe2/MoxlW28NkGEWXHQAlNMPNrQOfm6GYztMAQJbzxndNp/73YkNKqW9cpgBGoRdGuVIOcD/Z7MaI1BV5QhkwIsHiYzf2uVlGF6Zds7Q4BhjzUNQAhrKzDHNLm0aRAqFW6t60JmNGBJne8EbZYLlbDJ2GI+aCDyoO+uo4dw9/p9wDjLfNBtBqYwhJgJVZLJ7pHsoZzq36XEAw== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 8dad2a43-54bc-4bc9-206a-08ded1ee4bbf X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:13.7583 (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: VDLLFanzEVoBiFCph6Wzjz468Hc5PMADFyH5sT3iFjRFya8HEKmh7wy+gSHa420Q+ePlMoutDWiSbuegwJptRA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P189MB2739 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 ; Wed, 24 Jun 2026 12:44:26 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239496 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 Wed Jun 24 12:44:01 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90838 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 A85F3CDB481 for ; Wed, 24 Jun 2026 12:44:26 +0000 (UTC) Received: from OSPPR02CU001.outbound.protection.outlook.com (OSPPR02CU001.outbound.protection.outlook.com [40.107.159.13]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.6140.1782305058372622363 for ; Wed, 24 Jun 2026 05:44:21 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=nusN2EJf; spf=pass (domain: est.tech, ip: 40.107.159.13, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CWKnSgtV4Y0C04vUOUYKgjKc884gxs02RezZLCw9F2gZcs+icavThpdyhN069jOk08glTDLVzcEY9XPOHdsrVbp/dVBQ8m4DfkuMtAW8HD0eJAMdLzNS7TkM0HtX5B9atFpf5rw4hKbBUOrt0flvx0acR5AzzBSnLuMK1th/aIqFZceLkJ/un2m4YWfm1+z0oTVJMG88qkK9mn3b1ThoHbADfXc7d1qx6ucyGd3xTJmTVHG+CegXBXikz+AM6LIWoLVA4v4uln7RYgzGWqeYwZv8aupwmn2ulDLLJ2ByssfJ2h1mGAzSk1vVwGU9QnLGtLRJaip/Et5rIj3btcZrfA== 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=AXcY6gh8GDYmQhjq4TwlGzO+rwMWN4+bujpsLfbiM3R70PU+fTY0NKJAENePYfiBdej7CxHCZ0GALcJDlEoFaHirazzb1XJKs1wOKEARKvC6z/Z7a8myUWzdPGAePAjLcCu+OpyTQbdaPE61VAU/uvjyb3aKdbm+xitCU//DUHmtbJjTgzXoWNLlf4kmoOYOVUep/7TfsRf7F7etsyPzWNMLcwV9FUThbZNm8hiaiPuKwitrsKrMKyLh/2z6asDaNC1eagNW2F036xh8pcCibMJFNjVc9qCwy9wNBJhtFqjPAXn2Gwt55zMKOm+H9L05pFW1sl1u59JOkQDqgacqcw== 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=nusN2EJfpYvtAKUQN3fsd6iVUDtvhJAXU/dmqd5BKb4n3L4JnS5YaqKzZGdBIx9vtu2uuec2hJtN7xJgXLJ8/dNdi+mic0NiKqxSSjLbFlHXsyntpyL6Mp2L26OcjV57WciQunMd/Mu7pxR9mRAbbFm4X+kEPZnwSBBG0FFkZz9wmAxzPuWFPcyzzXhgy08aWFtb41VQgwsJ7f4mPaYtVErYvMtLKQOCa0MFO48tugEUPSzG0o2A9xXMc+KfXhk5OCH0h56zcPa1zhPwpBYS6cc9AK0UABYx/es8nGmTtJKjGcsEpMkrjXO0EzVJjJNJmPGqFIL0MpDU9hPwRyzHmQ== 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 GV1P189MB2739.EURP189.PROD.OUTLOOK.COM (2603:10a6:150:1c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 12:44:15 +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.0159.013; Wed, 24 Jun 2026 12:44:15 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 3/9] oe/patch: convert simple runcmd shell callers Date: Wed, 24 Jun 2026 14:44:01 +0200 Message-ID: <80eb96cbb38d155591d6f5eb5281e34ce0821f15.1782304923.git.anders.heimer@est.tech> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DUZPR01CA0086.eurprd01.prod.exchangelabs.com (2603:10a6:10:46a::13) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|GV1P189MB2739:EE_ X-MS-Office365-Filtering-Correlation-Id: 35842b75-0e99-4d2c-c9fa-08ded1ee4c82 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|23010399003|1800799024|376014|366016|22082099003|18002099003|3023799007|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: MA89k5yxDmRu8Y+xk/d8VD5vN2Ap9v4NISXXoBUBzFKqwnX2eamkj/YWWaFVsG9O/dQNcJO7WbnKOszxMyDEhHcBEA149DHO3tBQEltFPbkOp15EFh7lBLcf6S9YRidazuHR1Uipv3qbveID6V5THHxX7/nzd0GP5NCngRioFhKHitKIUUnAh1Q0Vz6odaJJUt6fXV/uKkGnr38gSIiAPY4gsbNthOW8SvJ14KHJ7wNlh04y7gw8IJiahH9cigVWUhlZFCihX/CyT0yfDq/Sj8otyE7veOjlbaLfNtOPJUxQYKnagXNLy3xSW4nbTx+WxOHbS/0WPiU58u2BXVqKVxHcmlpeD46luGd9btnpI/vpQ2uOwzv3BmKugohOOLs1ZHNiNMUlPQsy+WvCLzeeKAsq2wwDpuuHsrA5SUcgd/VE95soEm875FAiIghd6tjsH9uJXwce7/Mv/I7DOkd+BAM+N3YQWpIhpxxaOEjFCuhBO8gTXYJDpFhHPyXVuZlYm8FKyIu+UHnldtJU5px1/ZRz674EsLbTheI45rFYNRFmoxiNK8EPBHJ+oOiMUrB04jLQ+OSFNNu2GaSOJVpzydjGrNei5u5Eoogt9pKVXqa5+CTBlNeVquLIzBStmxzeZG8ij2tsGP9JL+epkCBGoBCbbf64SLPyEGOo14HeGW0= 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)(23010399003)(1800799024)(376014)(366016)(22082099003)(18002099003)(3023799007)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +YaceDxvhSAnm4bP3H2et0Cb+KbxFzlVaY0NlyyuoxRb2ulxv2lB2CTCoc2nB/kxTh2g5GA9lRXi8KgqtZj+wB8UT0GGiXTxTSlgq8w5LegL4PTP3+ZhsPF/qPLXtKw+xDqXetT4UYRS2mdWtW4M4vWwY6BP5SRBGeOROdcWSH3KViJK4W+voHd9Vu/t+VuFeVpbP+JbkYEDo6mQC5UX6udMKut+zYUBhzJxWJgHG4t6elNh6a5EjOTsfzrchWbwmlD+gV5xD4rGtO7xQiH2ukg5/l6YPCa8wQumDAOdQ06ESCuG6IK/WmZVq5PUCkEGR3bVK6TnaKtqDbTziHlATCyAZ/u0qUKZL4mOM4AbyvwLl3scO3ZoGfqvl8XLlsqoRBVHCk7jtSU4Oc3va/BNRrLC0m03Bv5ww+T4ebMSlqiDYu0VxrIEt8NRg7iTP4SzrJk47NHKAkrUV3kccIKCehFXpbD6PNuw5zwgRCSDybNG1NOal6Kq2a8s5ywzRQhcgL3MoKTmaqcKe27/+FfLWfLTAF7d5iGTLxvj6IsvMgRV/1ybZfxtgwg+raH8/wCFxi8jyea82eu75k6NPSnBbqGnwKjOfe61Sc4lnfAbOgDtaT4IA1IhUTTjdPyRBgzamDp6FNxs5lHFjPBBS+gqvU1CsUkTbbWgqZ8iEHzeaZYuSKvubZ/chCvfx6J0M+oe1ogRp/2RXemMiszf80EbF/OkfoyZ/4jfZ0ucRxO8QzNXJn1DcQZemJQz3ho6JwppklT2ZiLSRfdZU7HiwRHdRBBygZ3IfiJ30VfpndoavunE3zs1wS5lr/4OsPU5mmxYLhVd9B3yBn4DDttUCBvB5JMP1S8V4eD+khyAsaHxDvB66mRlxFbV7V1YeOdutw+f36MgZKx3ZBot25CXaqyVPYHOB6OiSXPvPmabqyo/Wu3Puv/Whqlfl+toS/2BRC0TCDD4EkrWZXLjECkR/jsiaw6jG5SneKitbPzLXopcAENJf/b5BRBt0Y8YFhdtckVQcAuuOcMFBg7IOCrJGCDVzFnuhWf8lTS0PbnA/vtBAhUHQUpHExXNJ0AWFYu9bhUL28WsYuDDP9m68AAABuDwus0j3qz8SgYSFYyrjfZN3jdQp+JmYJmw3Puz8eTaIAu917yAQjNVFBdVOvcSmfmTciipzsxqlggoj81HWiyxDH9siXaFMbzfFGXjC6+Fre1Fjx0+4VIpQlxnPYn2opHCHpbZry6kqwaiYuuDA/B7P9UrvJgzKbJ3w5AhqWYJNkr3LggYIB4ygkEPY+5Y4oUaCyOZXmCCG+G3V+XUHZskb6saU5CHplWQf/DMOLBlcmiMw1atx/3kYpRTlYKEIIYyBGA7ZynjEh3YGpYfDuEDbszwkCaFgjEl+9E6J+ydtv27jTBtQeUmwY5LKqAp2F1ZN6yCtZNiZyHyARyEbdOV7Kklt1MxRxImET9ZyvLyLINwuOfFj6w4hUmkz/6woGpIOWFUKbunMi7MVs3aGr1w3y4uH4kvTjPaTM26GYRP+verIZugt/jxXMpyuB3M2lZfPUlDkucgSAuDjFHGL9g76cq6JMDGg4sW9VnofickNwisnKV9RMIieFUbPTjtkKqXIHzjGa98/zTKmnBXMRybVN8inSNreaGTk89wkAneYQ4MQsTiek5WxGE5m/VkP33TCbM20gbexXtG8w1GLU7b4cOqNSUJsCuFQDU16N/kCfNd1GDNPly9EngkPczNfka5eA== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 35842b75-0e99-4d2c-c9fa-08ded1ee4c82 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:15.0263 (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: zmmt4Ze8FnhXseDGOL20nFMn0MmZvN5p1ofSpkIjrRQBftfQRgRBKk/RSU0WYCiHvau0IsqVM9QY0Yk9FxU3Dw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P189MB2739 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 ; Wed, 24 Jun 2026 12:44:26 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239497 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 Wed Jun 24 12:44:02 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90839 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 D0D08CDE006 for ; Wed, 24 Jun 2026 12:44:26 +0000 (UTC) Received: from OSPPR02CU001.outbound.protection.outlook.com (OSPPR02CU001.outbound.protection.outlook.com [40.107.159.13]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.6140.1782305058372622363 for ; Wed, 24 Jun 2026 05:44:23 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=KeZBgQyW; spf=pass (domain: est.tech, ip: 40.107.159.13, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=p9Z0VHa7P5IoHuzHfL3WjPFOFg1jzIweoQNUadoO8k0d+8uaC/7o6wjYMNrkX+/D5KDiXi/eHDrQ6wcpkjuzz+F0V9tUjw1X4ph3WD17iArOa9tnG+JU87vrIKkoU6DICkGkvhsLy0EX0LPods2pqzlgV7FC1m3yXrYh7wnV0lZpnjChPqZ2sS76BzAxi5UtkCQ1vXAk4fNekx8WymCWC6NMV2QXKRrIK+xjA3U+GVmILdKVTZMljrx/z7HWtzTZSLrkaYIv7rzKcStyhFSFpeKOy1MS68Nmwy03dmf2nXFzvIf2iA2ozWHNxeVEBhUrK9jTphhi1AhAuvcQtiFdww== 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=NGJIUriB65Jro4ezRFLseEB7QQXB5kcHQN9dGp7ufX3dFRWVNsW9cDwWuHVuFf7olwoVigpWsjX4100j5QJVkueK4K0/HKAnT77SvxmCgV6c36bFM3Z3JKU4MiSa0b0iA21SQX3k/Myz6u1NscFxoZETXftdLtM5+d34k6ExYkErA1UJSN/ayGye11P/M3M2cRXpAX0P95YBER1YUxr1u0vc0eQVDd1S9e9nM7VEbxkXYad1yYJOqLOAcFrazbEMiFQ0RPS748r5atNM6H1VLk8+o5ZgYTdPb4l7wXq4OXuVrNnXCVC9UGJfe6hVLFEvbJzTGxzaf/1vy+As0MR71Q== 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=KeZBgQyWKcn+IfzPMKD83doogUkD6mytA+crg9KEBVQnGDF40h6f7v1+bHcIwrcp5h8VfO+u+hfiNSk7qgNGpUxZjtjjtCPk6KYoIhNHzB9DE+emOb647zymWp0pMf/n40zfKrbQbBmrBenfY/aVDxgeaDCK3z9p6FPsAJo6faGjPFPAJJbDKRFY96SNbXxAxf8unhK5j8p/a7Z6D7YDOJ6YHdjRtCoWMEhp87eKdq+oHbk/iqT5kYYXsyqtB5rhippH7mPOAAejjw+Tx6ewTE7a+YMyS9OpK63Ym0RVJWHWj22g//uelgrdyzyFiEUmReyiUYvGuZEultJst/OVRQ== 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 GV1P189MB2739.EURP189.PROD.OUTLOOK.COM (2603:10a6:150:1c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 12:44:16 +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.0159.013; Wed, 24 Jun 2026 12:44:16 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 4/9] oe/patch: avoid shell pipeline in _applypatch Date: Wed, 24 Jun 2026 14:44:02 +0200 Message-ID: <9c9d9071154791e6ff82763893d0aba9aab38544.1782304923.git.anders.heimer@est.tech> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DU2PR04CA0152.eurprd04.prod.outlook.com (2603:10a6:10:2b0::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_|GV1P189MB2739:EE_ X-MS-Office365-Filtering-Correlation-Id: abfd0775-6841-431a-3669-08ded1ee4d47 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|23010399003|1800799024|376014|366016|22082099003|18002099003|3023799007|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: 9Py2jJRpXFpye6gfn1AQvKHRK61/rH/Hcu/0iLmIFvCZCVeo/hd7YWCeXrnO710s8QCNjTyyQPRZe+I69n0eL834wKZ1d79yGIlOIWWwQzkeqcIk3VzreIkyVPaHN+t+437QyimcgIe2VZ9O5AaatTBn7HiDAfiscApNOMou5OnFr0MRsvgmd+VVm8r4w9Tw9a8kM0+bT0rhwUG++kPLs8DNppyhYbwUUVE7LbuxNJcU+cyeX0iDA4CNCXrH5QUVs5IiZ3aJaRgVxkPUFpH68+s1GHSynuolhrqwEt4L3FZ5VxeeJ6RfxM+lPktVePClh8YquAkK2pFyNtPkmERNcWk1S/2ZW2zkaM0tBjjoHqGDqa1e5RkMcc65AUsqlrcOqY3Epg+2uVY/wnkvJHZItMXnbIezcbts6ghdlXu8z8/Alv2g/knuKZ/vVUpCavMBiO1HBB3rOCqEwEfv3TZLLOaGpnvgusiyTF/zWbtsILmAT4DmKD7FDHt2joTGbYrHTZIwBDdb4OUTECEaMIOIie7HsGGW/KC22CMI2NxtgNFkiwgMrb4SveTs4ot7VaJMYETWwdPR93JVaOY7jyj4W8gCCeRggWaPbR/HGjo/ZXpEsFci10ic4NE30KYCFtkPDYR4la7/dIyzR/Egk80ZCoyWMesqEfgWZhYunnInXGM= 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)(23010399003)(1800799024)(376014)(366016)(22082099003)(18002099003)(3023799007)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nMbovH7RmzuaEDNTYJ0KEDn5DEw/quUz6dEogmiVEXnzRD7/jAmk514cDVAPE3tBDxYcRYGZq3svj7AO8rCqa7NDr7x6S+4TysgWdd4Xk6oePcG4cs2Boc+z8xD2aiVANuOqqJIOOEP8ytgNJ/MKCtaPjKzULEn28wG99e+qvH6qKWEsFGeFEkStd4c5CJWEtV3MGRj796z2W/BgsqXpBorj24qeg2gtkW2fDalumAwJrR60iUe8bhRxn/jRo2K3DAkoiKh2X8oALDTT+KC9z3RdK3HGPYOt8aegoKBsHkfZCU87gyuxgwJGS9ZQYiap2m44clQICjhi2tGKZ+igWCI43La3uFSbDLRhmlwHeTW157mN+Q/cqY9Hw4aFjzNPx4aZ3RhQqfju/SlH9Ji/rFi9OZJrpUCW3se7gwOXvgLGcSYygVgYCmjsqJYUF+yG0vHV0omGGgzGmt/G0Eqi89UWR5HZ6VT/dCdkvdePbldYjnrFEdppGPkuIUfoPCD1mZmMloXu+KQHbHOWd8WVuiz0TyPEXX2K9bvRHXMAcJBo9HAFEdjA0rNB8WDedxnq1e/cLOHRKF0x3nTOIPezZuFDc2moRvnAZVfLng+6rW+edgDC1lcWYg7muhZAi/ZQJ2oc8I0gQDQ+1JEELMXsEbrV33RD/AexH/6OqexILaO/6ss6t4LW5VXUgkFt7Sgvixx13RGi8gPUpC7geAk6ZLv1aDg3/a3yOKbBgM1kfv0BGXcGb7y3zAsAksWmVARztWPMlb4xvZrmNEPkj0ilW4UOZc4yt1C5yex3mh62LOPzQvUdnFJT52/x3ji6uBmbrchiBXagYA5+xXCf9/5j2qY8Dna+dd1nnQq9Ogjq0Cpv55LJk4n5Zru4olqdLKdmXTQQQONvnWYoqpR7lTm7CQO00/YrBr/qBxPh8wBlNbPEobBdGJLCXFoHQ15nG0eJqKZ3WvmXRRsB5Gc8us1kimDR0NDZ5Vza2fNcPEpsXFlo/5KW4eWPqRf2EzS66YCyW4pmQeu9kmIcuO4WUZtC0X+YSuF0XgqC36O0S815xbxLWXkyAYInZmh42IcQXvTaVf+1h9m2QZ6/l+dOYC48M78aCDZKuF5U6HkwUlFPLSMcWhD5m9p2WRoRLGFo+H/JmjOhdTf27V5Y1ozlUhr8bVmpA0DyDlw6hz0qoe+m5KbUXhAud4k98Hrw995d+tdS/cyYwUPisG/8Y3VvHn8y3Z7smQpwltf0cCgGjufqtMos33mY1LhElg/QJnXHBTzZT7kuy181YiLqDGhgPFGBn/DJoGYVSZSoVg3hTEeFJNh2vXfLFC/DfA2o6hMjr2ooQ4JtKkbkkdQaxKj4EBkc7Y5BRA+Cu7jtEwonHa7zPEKqGVfJMh8Q8nzoEzdSgFbLb0Jluq++7Lz28Hvt18wPFQ9pQzFU62HFgNkKZGsD5uav0PgbtI5765o8SsqdMlnax/3+XlW5sJ1CAtlWLfgHchLwW0oNZPNlsIxMpDj0NlOW2cBl6OoWbK5r39x45kAmZcPRbSyYaPQrlU0IBhTOQSzsOisutRxkhmTJp2weOI24PzMTdyZ8qIOaRMhbuEcbg9XkbPs5eglOPYgltFfQcRoiiPRD0fs+6nN9fX0EUiHf18Od0fDZDUvQuIVjgbElVpLFh30KHh2rgoJaEaAZWAS1T1uwtESvl4Zso1BASCazBDbD07zfKkS0Ey7h04CdwjNxQC+kTnOZ7QhM+LItxg== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: abfd0775-6841-431a-3669-08ded1ee4d47 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:16.2935 (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: eFhr9Fw7SqnJkpF7kZz3faLRvG1Oh4VnhSn6iHHTYLBgtWufEifU2YnNMRU0J7xlnnO0S6VUgpr3rDaGgE8L2Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P189MB2739 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 ; Wed, 24 Jun 2026 12:44:26 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239498 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 Wed Jun 24 12:44:03 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90835 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 67DE7CDE003 for ; Wed, 24 Jun 2026 12:44:26 +0000 (UTC) Received: from OSPPR02CU001.outbound.protection.outlook.com (OSPPR02CU001.outbound.protection.outlook.com [40.107.159.13]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.6140.1782305058372622363 for ; Wed, 24 Jun 2026 05:44:24 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=k79SgDnd; spf=pass (domain: est.tech, ip: 40.107.159.13, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ba9wzUQl7L6WyTKNoIqgUddAxkF/uZjd/jD17frhicmFNXbbsJfrKRsKhsP0mUh6ewrnSM1/R3d1dhE9g4PxRs79ZHehmop9mhoKEYNMEsJkholKz50wMLiajDRGNVaB4/qtBWoP7IDBbWTtGbBdkFzLzqK7mj1NjX1uIJPmSYogOwZNPZTI/ly7vlsgQwZcW4Y0394cUkdlT5HWuGDfL+f2WPZjlQ+P62VhFU5i40Wh9VpqSwSs81LboMUEyB+3z303TcMEk9k4zIzs29Vzx/u0+anvKQiMLUpC9miC9JC+0szcyprchi0e/VwXLnGpuHjYjNy5YEbf2ISsVg7hEA== 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=aSyqwmoH314Y/mRuY3rGgi3FQXGEmrxB9lAwPY3P2CGjD14XhxtPIS0jbEYZtQZuqlVJdMLh2yxjRVCBTSSSMG17Mp3BBT0I+9pEjzGkWnj8uf6/FpOW1iH1+m+TNt50xksSfyKHCgcgHWTTBQQAiJ0K6MN1Is/4+zu7mAKyBu6FJU5b6kR/3805SOyn3ZBIOOVgzDgmDKjS+72znzf502l8AagZLtObEsVhZHZmXZ3vtLgWtDbM42bw6OadTcrrVafYainneoGIznVN8s/bNA3gZkoVOnMHqZzdap54PBcTAwG6jb7KaztBkfPtnBAG9R+M+84wGIsARri96KyZvQ== 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=k79SgDnd7yHuo+H4cqbpjzP2YIU12V0TGBdyOUF1Dh+px4lXgCpHpqxHvK52ADNZWzacUMKE5dGUlwAN9mv6fIFs/uXIxcI3NgTIfNWlFCGoQnzVUZRS+8dJU8dU0+Hl09GKC/Y/KOJALgF7sDon3PQiW1tJBTeT6KaBBkb33+Srpw0IiDPknQBTSiNug2NrwnJcAl+tPtIlV9trQ43bAZYXN/H75D6Em8cuFoOmAzSIkLv6oXnsvqwO4vTOMF6h+ddvcKDOxUx9lshgAFXb/Q6N783bmvrgsOoqsDdA07V8efb7bWHhMZSRK3UESpVKb/T/eBKpMEdcfWQC+hUacQ== 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 GV1P189MB2739.EURP189.PROD.OUTLOOK.COM (2603:10a6:150:1c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 12:44:17 +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.0159.013; Wed, 24 Jun 2026 12:44:17 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 5/9] oe/patch: remove obsolete PATCHFILE assignment Date: Wed, 24 Jun 2026 14:44:03 +0200 Message-ID: <24b8da5d288a617092a3ad55148223f1a0e6a127.1782304923.git.anders.heimer@est.tech> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DB8PR06CA0042.eurprd06.prod.outlook.com (2603:10a6:10:120::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_|GV1P189MB2739:EE_ X-MS-Office365-Filtering-Correlation-Id: a1a50330-2ee2-4816-cfa1-08ded1ee4e0e 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|23010399003|1800799024|376014|366016|22082099003|18002099003|3023799007|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: OXCAtWW3w1cQMzK2rC+INjlBbI3bIgeddI1HESK0RZY9GrsO6wg+2oveYI+o5WWzTdtW/1Zuq41poRt8m1baiFIZSyQy7Ts9TvYGFh9M3NzgoBb+Uvbm4lFIbofmNzI891oauovuqnwMeAKg96mypJBI+/oSLORpnhP5evfzH5OEH4FM4D5owSjlhk/1EYXmaGsori8Yc/0f2yieA11MWd+vBV3E+ny9SYPYy2qw/cq0zKzhJEdT+8N45HfnHY85fhzWI4OTiZg1DmiTf+eO0W4a8Nf55UyvjbZWxtRDrVHe/R+9+wXfLO7Q+PtnF7p/tahnq1Lq4h9mLx6LswXOxgwHMpAOO9rgDcZuTNV5TDiqElkpoDw6QlwROnKqW/aYn+8xpNA1Cwdnb8JiTUwChmVpr/kFat629uKl5UiKGY+q7WD7/uQqPYeSVqg0aAumzPN6F3gfbxwqPlHVKAw31N1IthCKLqjHPZ54EYOHVFwKibYUivVeFVBPZ3bxUNcxAmq7JQvLC+KKkTLvXkRd/6HTytv/5WwUOYcUnUc3sTF40qbLeUbnvWB8c7Bztb8Y1TrXM+9M5iO0Nf8vPYwQmlHuClk1kAV1NajyZyLeVgPY2TuJQDv0nYTC7HVl9w6c6aXIFVVWEIpAiO0HhUpcfwTHrHNGuilfrn4DQlvqmhM= 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)(23010399003)(1800799024)(376014)(366016)(22082099003)(18002099003)(3023799007)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tR89kT6Onz6AA68g1RT5U7UcrUTCA2vdz4PKZEaMUre1jXD62aZvGTLGR7nh25SGwjWprDNPhxwa9/ESX6tTj607eZs6JGLPxwgQgH3FdZW5VvQnnDP6IpsAXz5CIxiwGDwiFvvNZMxVHjR/m+21LBkVaaOiL0LbzoH/8LvrjzwcQjFwhRhzypp5VnoZQ7QN+AGdzqD2mg/MaXNCGn/bzP3iQGK0L3bP/cT4MeYT2R8+ED+3RVbNpTR0FVV0XhPx9vuG5FjfEcNpayGdxMoNsgmFoZobuZdpxelOV7NrlbGLOj7TSQo/Rxq5eWtaqT6OUTBI3yNl/Cp08OdHR1dKK8PT0mQUFLPZHBfB/TquQRiouWTJveqO2/U3scZs1+gMSbX52+tYjP8Mx7qy1k0PPmQ42rsayOyyJUDHr9C18EjAfYZ/I5uWRPetZ9z6UeSGyxgD1uT+OB7oDD5t9ipLOFigDIm+OLX392X9wT/BBbHuiE41rYfahIpie+9ijbX/1lZRu7wveRaLzdh8IDG6nUh3MrnNThZu/b+UTQJNMgrtggJ6BOoiQPhZYgXXJ0WHj+veoDFz9kNB0d9TuImxg2Le10i37eFwfNAW8SGc5g9sKFbAllS2u0PPkCVauYdBbFf3zBnrKcUHnBrIPROt3qvMHZC1Lj+9yi7pTM1+7o5svRVreIPnDu5ytwSP+06bj81oUThyBJlonJLgq6rzRUAyuSoV2vo6i6MDRdEFca2qzS+5UvE+/15l3WNuLD0uNU5FNq8p5X9tUyylTfQ9qcWXzFRJN4RnLR+LGNCcfox7qaToWjf0NxustbbIXLlfuR+WtIn2k7XO6vFDBnsFeCz4MD8k5JHE05pcPzYXJuQ23VxwSFf4lUlZn38NE0p2mDVOriaE1EX7PchyEM8NVTHxsG0szNWgdL2dhDCb1IfLmAEf1NvNlUUUekhUTIYDHgCOZ2etnL3fkWyyGWme96Cx8cSbpdTpFfimW6KYOLuLiSr8Agg037nJsiW+qj3PWWcf89Sb+lUOf5ZqjhcHtVwZYlO+7M1AHtc2212i9xf7+m3nX+hkGJ8XKNd0kbuDo1k1oydSZanE6OO0MPs2dAQru9r2YJ9o0Pd737TXLL1hO3GajYbJIg6VOzx3qEyDgdIDy5K4arbVEyqVevyQK4AA9IrK/50DM+A2D3bQ1uGRH8q6QKmgtlfO6LoYBzCtvnNcyt763tejX3mMaO13J5Wh+xd3lZLHpxNYwxnFcNVd0hnHcPun1vVjRFDpFcuHCNYrqJdGJip2vfRZBErhBGfvy5LWcxZN8dYu1LLCBtoxBRD71nhRjjyn3WFVRXvV9bD187tWJEawGtefc76gZ9fqv6k47/j9m3T7Xl5c0ZXK8+FCu/OkXAwNZue1b8LWIigMCWKCkqz5ScP7ER1j2Plsw/7Wx7Sz14mY50rkY72+i8Wfv4yyZqCmZfL59UtZpoOuiIoeu1dgptUnUsZRqJl+xnz0VXvc1v6gYqbZRtmDwNI1PSSCnSuNK4aLVxW2HNgejRfhARoIuX2ODOUYDsSayk5lLuvc29r3xIYens4p4ry7Mbp0YBf50IwfFnj0mP8cxAqQc/obgLF93IKR2lfA9rZVi5ed+AuOJ1Gf9+X70MoqZcLTEEcI0YSDhwEjOJjUzDFszafW6yF5Wt9hGz1FJbBfIParAiS8B9c00rJhBNBqwC2MirmvJe9qgKA99apJazEgSclb7VY4shAmGw== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: a1a50330-2ee2-4816-cfa1-08ded1ee4e0e X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:17.6047 (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: kzRfrinrt0ifH9K6tXr/+SpY0BcvunjDQmz+QVK1gOHf+OnMmg2gHR1IG5Mxv3uINY7rQD4CK5roUeRICSmKRA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P189MB2739 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 ; Wed, 24 Jun 2026 12:44:26 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239499 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 Wed Jun 24 12:44:04 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90834 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 175BECDB47F for ; Wed, 24 Jun 2026 12:44:26 +0000 (UTC) Received: from OSPPR02CU001.outbound.protection.outlook.com (OSPPR02CU001.outbound.protection.outlook.com [40.107.159.13]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.6140.1782305058372622363 for ; Wed, 24 Jun 2026 05:44:25 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=dBxcHScC; spf=pass (domain: est.tech, ip: 40.107.159.13, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iEgf3VlyxE0ia32euVqztSJ7isbNKrXwSBnvb+AKmebd4NjUfoX25OkLoiQIdwIJJdzUN8F5cK9PMwR84vvpx2KOxnLWFY8CbB0unE+8CUugOI8q4UAWIniU0HU/6/LD4FPN+AOptAFwA/m5M7hyxmP9YKz5saLc884R6jogP31Ji9nHXeaeiHW2C/WGwe+u8kQcSRiEZMSzUUplpwIdMaqSAHMBfg8Ig++5HtdnSBYk07YCviMh/9OeMz57HdXd+L9KKwmRROYms/+3ro8MTO36WVr4AIZO3G3t85RwM9XypQ1m1Euh6E3y98AOk4u9JCK1SJnL5tHX21Gpe+eJXQ== 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=WWgcYX3nfwqsHJ+IPEqM8dwQ8RfRGRm4WVvPCHZST6ohzl8U7wCxQjK71G00M1fPWCe8XqODpBAPWbmC850Vmy97FI2I7gHPtMbDsOq1U7Ez7sIAZQf0YEzRRnlwnNWWtzRR2zphAaGkQpQrfwOeRXYcfps0g1lumLOq2TpNndvrpePtHW3+isWdNcBfTF16Rwkt/G8n3/I7vtRFKXK8TZbuXpkQ7GMR8dtZRVLdMClO+Ezhzv2ZNQLlEBLgfFCJ06InHu29DM6BxLTQ0u2001cR/saP01ZF/dy1jLnuJewIP4X94qvMESyA2HaDxBlApGNwioSQNhF7siZGsX3G3Q== 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=dBxcHScCvTlwNtVQDxNELzdrAPF33xpnDehzqGduHfZmd6pCkFALpEs/rGnlE9jdm2tI9ccKHgIqwyJ/7ZNGcxkSD4LVCVsXJGODynO/nx706ZLtufvDdurd3BpqdvgW7I5+SrwpWAH0CErCbxHa0lQgqWwH4N76Z6NacVZvhIpPhqB/lV4b6W4R6dp+dg3EufkSsnXlw103QVoeLi6tGx1+P9wFTAtbYYYLElUWHiC2wfI3Q1kZ1ldO7+HM/wTc3a36W+iJBohoHUCDvkKA6YQtXkl1gdpxme2FQQRvJIWfTOcqOQtIcPlNhfrKKKlB2Y6UGHbVk7U3t5Z7WI9yyA== 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 GV1P189MB2739.EURP189.PROD.OUTLOOK.COM (2603:10a6:150:1c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 12:44:18 +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.0159.013; Wed, 24 Jun 2026 12:44:18 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 6/9] oeqa/oelib: test GitApplyTree patch names Date: Wed, 24 Jun 2026 14:44:04 +0200 Message-ID: <14738a2a62d7cf0de544fe41a10513e9b8a8947d.1782304923.git.anders.heimer@est.tech> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DU7P189CA0014.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:552::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_|GV1P189MB2739:EE_ X-MS-Office365-Filtering-Correlation-Id: 39d5a876-047f-433a-4c60-08ded1ee4ebc 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|23010399003|1800799024|376014|366016|22082099003|18002099003|3023799007|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: A0sK9YqvCjLh12pG+cJnLtPK8Arx63MU+7ub+vNnmugadgNgX7xBgPdiaz2erzc/2KayJTf5/Bz24G6ltRcJ7cQbafSZFsi4oVFGyI+skL76v3e2hvbkT05AAWuhdE/MhJfSp9s4k/VTcEFi+lubfs+ybleI4k5QVPtGBP+MlmAOqZiVhXqcCAM9hthfDJGieYiA1JiISKmZU1+JUYDxDkLU3jnxpIDAkLMOOk5ZwOMxlN3KVla5L20gL6C5tdhO6wxolSEqmLpH/xwNNKZtLWBweRD4izyLooinnZFETzF3AYwX9FmSc/kQdxsqhty8/77c5wXhVEQN+ltkVKlezQ9prPP6zjV9D0TlAJIybUy9mDOp8/BoWwP1IwRBj6w4pmwwWQqyE7lBY6nmhamNnbTxFQXCubP9iBNiHfpqQXSrLVpvP/VqHzqLcL/3zNQB2KsZBZavR+i5JFerplN5eI6NmDbg51iGTcnVNxOigFThprXEDmkRxJB7j18ZB0SZzdu3ZiJkhYWdrt1kBO66KiGp2CAm5vJ9ThwZE57NpYSzs8YsevEOEhxO1v9NYRYDV4fT5idJcRoLS15O9JF0tZULEFbOTXrc0IXjBQx2IlNsj8A7pZvX/qiuQfN3PuU+DXyPiOTGh/LMyOBxsR7RHZyfQElORqot0oDH4s0xayY= 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)(23010399003)(1800799024)(376014)(366016)(22082099003)(18002099003)(3023799007)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: V6eZOfIuwAJxiclSYrnd8ZQlbfE7I/QjQXSw0OUae+AsjSt74u5p9EZc3U4fqpiPCVUi46b12Vl+yIyikV2Qto89XDmnTSGaTZvhFgIK6iIF+XH3+1vskj0AhC+JV9PVf2r+cZJmM2//KOuUJhCRingjPvta39gil4mN0sMFAIAFGKvUgktMRDu6B2p98FMFs+HXZkqIv4P1tCUokwRuqH4yojp7n34Xz78sYweL//JUwWh1tx3gOhAzMxVcW02TBplUbW0aqCx91g++qRCfKC7epKFu1pRHmaHmrYZZGgY+W3EVpbOtfU9Uhcm6i+l2SdValp57lidcBYSRrL1q/rLAO9mDcEXiV8xJJ32ce+5gZCBzL1MzreHUSKM03U7lepWeNU2HldL1EGTGl/rO6UqZCiBvIEr2hVflJPLoB4lvPCGj46liKqSLduOaNEV6glOL5yS+ENNSUghJSC1SSuZTsRcy6zEJzRx/MtOjl5dXaizF8F3dLu8u8pbRvv9t55IrPbkXtB9vdYragKbYQurn+Liv2xYSe8X4eNyOi7mwAM0QIrVwoewCFm7DY1OXBdc2+RC3/N9yJVyZQjyQNQO27r9ZtbWZr0XIMKm8Jdjk9fQLyUQINo3+0Txv738EzLbCxtmZh1o67jDlnjWx/4ohQT0hV3Lv1LlNGf1uBfyzpDkRwJdMXumxRCNiFSVpD/eqxekLQZDJ86uX0fbYhZp9Y+mSVIPTmi2qZ8HcBnc3aVs5hCYn9E2za9z2XVhkUjLouheJK3RBkqQvZ81WolqYKTVB1qDNGUfmeWDxy2kRaa770zlN0MVfzZmcPtWn9nAP2Ch0+cspyXu+waKalcm+Vx9kwwNBagph189sYXcQoEFZxjJkpD5OpwCP5woxQrTgUdU3Vqn1Sf4hLz+851xPPGM1snLyp46zcfW2hFASmwQLXHhRhNm1GtPMrzpYf9GEP7IRiY6C+mzD2W0j2AzkthBHb9MpkWLh31yh+CculXUvujYGQX6a0KwrV0YgwBkOs8T2fzdoIyNMXu8Q7PB7qkL4q1IkA1ugUGWdPqBjI6I5aM48UunbTzDc4NHcO+/apq0QsJ2+LQrlrRdIW6/sTVnteRsOQBmhsoCzz+l2l7fCFU5ZnVIKdMRW9YTCedDMrspuluKoD3bv5yEwr54CbSNqeV1Z654yNqFNx6ZKW1Fmdo9XOnJbKt9BaC3xWvLZ+627qLvgnSNLsPbmNzykHeBF47IlQLB33KZxGq0eUT+gI/XNNYyTOjqM8tx7pO3VkdQV0smBVy7KSQudsROavXM8hVtBoH0Q3zkIw0Lqfvv/g+pwlEuI69Bt0OC1t05svHKuL/GE79SZrTcWotECoadxJv3YFjCMALV73Uxjl8VjrPnLejvdCvSQSTHHzGuIU1Vu5sR+sCCglx4/0yMHRRVPxruvi5KsR9R9t4njwh5+IsPUPJH/A5cGtNIfHr1wsfFef7EHFO1ka9EvYNqhelOC+Iku+pruPRpyLjohIa5zmcWnU2OJdjRus+jVoOoimGyPXZY7/apQyRe28ljn0Dgnr6dTG8krz8YmZIxFCZm61fing6TquX5f7G1BvcUYjgthaXfrapJRBQV4OY2UreIi4j6R+2fQ4iGawx9JhmP4rcvAgxyDyjX7IMUPoj/VbbY5YQxEwOgHCBFRdb8jGsviCVCIaivhUHqtmWxE7DYwmTrSqg1oZQHqViqePLePXqS01V6k6/B/r4kPlg== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 39d5a876-047f-433a-4c60-08ded1ee4ebc X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:18.8015 (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: IJneC148cpwQruOJIlXpnR9wtpiAfI3c7VA7KP3821cKbAvpolzHnKmIsMZAef6KHBZHyOWOZQQ3A3WMhf5uGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P189MB2739 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 ; Wed, 24 Jun 2026 12:44:26 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239501 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 Wed Jun 24 12:44:05 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90840 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 16DA1CDE008 for ; Wed, 24 Jun 2026 12:44:27 +0000 (UTC) Received: from OSPPR02CU001.outbound.protection.outlook.com (OSPPR02CU001.outbound.protection.outlook.com [40.107.159.13]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.6140.1782305058372622363 for ; Wed, 24 Jun 2026 05:44:25 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=0TM5IKgU; spf=pass (domain: est.tech, ip: 40.107.159.13, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=y0eqU+Hc4Mzstxu9xMXX3npH1HL98Hvf/ANyZgiYtWFRmFgOBfV1tH7ZVyW5auv/6s0dAsUjNUD/RY0+Mc7t8GNVKCTpuAcZ1lbThTm+Bx5x0CwdBYFIOUns1DQX6oDcoE5Uwlx4DejiGNpfwx47yUk5At53LdSEWSF1B1NNqKefRQ6tNq+VExdUU6UsTk4y/uKQqF7sqwHv9R+/RdyHXpB6J4hGhxmNnWw/kQl9slafyMdTtEJE5FWw+GRE0DLG/w6jEz8rZThCNWyJiBFG6fFB8zFgzGMCsvy5IAaosDSZtMhcd6WYJ2PO37Y3V5fAJtMARPqkWgGUBervmXu8KQ== 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=ZjavUyTQVJEXvVnEGEPOBtOZF8jDhFh6GZ2nRbRFt8+bA1xLOfDzlknPsUMb/QZUYlllYpX5vHZv0IQeVVTtHOTdXR6XuO1q1h1QW+6AK/qLsHSt1V/2yf7EO6vAKbR9wkAiuj8ghP10NrE5iMVU3GT3aveFE2MdmvTAl00AhetC8wxuPQdjjV5JgMFpbWIH3ZyEvDk/Gkpv05RloOGq7YAkkySG4Z/aivied2AVyhVDjAGzAZmLvbTJYWKGrm8PA2hh6FMG7ZB9Qy9xYrYG8bT8Q0pBLASYfkCAVPAxMox9d7S8r52hGpnYm8JByiUQSsxPUnJp4ObaBJpGiB4ksw== 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=0TM5IKgUhMQz/nDRtHw67AGdBLdeHiZzy+ahvoSp6UDwz0fgwWd1h8jbDTLHdTGShJW6PDO5YDsAAxzNgWb7vmK/9xO9tZde5wu7J7zu4nudJbXeAmxTS8oKVsqIfkK+3Y8N8yt6PsmK3N2ovQ12Q3aXd6QPq8ZMaBYhbkGkowh3uKHJyC7aJZIoobuUjVXOcFIUEqJnGD1NCu+xIzkaCb0LdVXHNfJCY6nK6BpS+uRw1m4U3OKI24Xmz2xv7U5DuHJTTJAf+EMutlyeNxPHJD8DII5uZm4ltaHhdhokUFB5JCWMr48fhky/tbMICEZlz2JgU4GAB4SqaQjUnCsQxw== 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 GV1P189MB2739.EURP189.PROD.OUTLOOK.COM (2603:10a6:150:1c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 12:44:20 +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.0159.013; Wed, 24 Jun 2026 12:44:20 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 7/9] oe/patch: pass GitApplyTree commands as argv lists Date: Wed, 24 Jun 2026 14:44:05 +0200 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DU6P191CA0030.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:53f::9) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|GV1P189MB2739:EE_ X-MS-Office365-Filtering-Correlation-Id: c6feb819-41a3-4d40-36af-08ded1ee4f80 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|23010399003|1800799024|376014|366016|22082099003|18002099003|3023799007|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: O91j+wmb8vIJ2XK7YDNS5NnI0z2x1euMql/Cy4V7Vg3f2quSd1WZnQP2UmsAdsdMeMti6erJj5xdSrMf0UPOHU9FBrGTcXb1N80ZsNjcsfUJ46bPjVgu0ML9Erl+J1bczquvvRgNle/TDokwaNcvUamP9TDzJbYHnY0Dd0WjzE+HCjQ28t7RT9V9V1YZOSmunQ5w9o/nAgIrHN4F97rdN/XflBDwiDd1YEzXt9lo36uH8IXpH16NwHXEgDDnb6NEuTDq6doVRXndQn8lHb+rqdpt2xE14n6bxXn79sgQO4OxmprQ+vdYfMHb7LTASupZfQcBSDat//kB1Bz6EusXImzSTaka7/TLRUfwm8w8esAMiogpYe5ggJvtX6YXFmR9FMlU1a/GIQUyLOHlqcgb3bMSfWH1IS5if2AoBrxnVbwLw7WfFXHC2RY80YTVObzzxFR5xS7JB9xr5xllNE7RISLqHeqZmSEZITTc7Nj0qCMSWoS9Lt1g6VwQ2GNDbREbm1hEqeRuQZ505W3SQB/aJXodua/3bBDa2HwthAZSf1wVreRmAdRPy1tPn+rbH7e0bSEMoqPbwYA33dPCkLo5xBk7kGOG1Xco41+3rvjI3Q+3TYSCdGWiPOKtCG1PsmtMSUnlChB94z6RmVK4O3/DN+fJQ4wpEo7pamTT8MvE6KQ= 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)(23010399003)(1800799024)(376014)(366016)(22082099003)(18002099003)(3023799007)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vwftBJPgOmAZ8WGcDkdD5Gk0Em8WE4IsX10q4JQioN+1oYYusCGqUWHs9Dwhj0AiE/p1KAomzx8+tW6NWisxVbPObDu+QWu3geW6exFecAB58bf1deMKpDAMawhJtoSArm2KLau/GKOvnyI4tZ8TISvF+bsn7QIdo5oPK+OdZkVV1IzFmWtSnxp4/WWFmDqeGCuWszB7nyT9+cqfifJAGiO6VWJsi2c7+VEEoM4VEOTkATV0BJgxQy8LToyTJ5dj4UOUboutlJ7Z5AIJ+lgv0AathVJ11jWqoH1yvlT3XZA7KRqYGBfXIlw/CBep3fZYYqdxG7CZaesuxPIThze9k6Gw1wFmV+3R22le7n38SJDpfpXUWubAah5g2niKfnsPxRoaLqxH6cha6dLzPo445sMBpvh600k5xbhrwS40npLJlI4v/HKTJDOtwr/ND4WoAb9qUzLK/kt9f8nXQq6RV/5l9NsU+RaIOnzcDjROckJOMte8e79bUCStlR+IRT7Pn5nMgVLzcNePq0BmtEYw90wS/G8XHV4F5w7UddFfIns1SR+1Yme/62IqLvb3Q3XicKsty5GqnwNGVrn7p1tQ97fUXExi2cKqnYWfXhupnxnKc2sIIUSctkAcqseu+7eP/r9hY/EMWd812U4FLXmttd0/9S4MefcLn94YdBfD3vAVqcJu3hz8nkWoc9jSDk/6bcLt4B460M7fDCGr5MGK7fiyOLIy+XQ62fjH7thvPuKSHFtqD+MkTmgiub4Cbqf+5UmPwIliUY1QPGC7xe+dn261yKJ4/wNhnteUTZ3UsQ0QlKW5C2ELyzUItw/MTcnvf5DuhyA0xkTQXldL86nd/mATTNchVU77s4HNNx/P/+mg3laQuWf5W5kBNwqM3qhTH5rpJ6WSowUU741NfOXAz9w+BmMfX3BOk3Hpo92XfBSSZgKPwBuu0mB6wghv6qx3FfgKNiMvuVdj4GXV2idH0A7gjatE+6oJJw3ofZ1voMa/NtKWI67vSbRacjWycHOmLYzzY1MtUstN8a8sU3BK961LQrcUYvxsLw+V9NWIdrauyfPTBNkVfXI0YRvpNjSWt7Xmuz31KmBiDy5H221Uw9bY9DXjnwsndV8LQnXnF/Wi8NBNf3PzMoWTBN7lgaOARPr+8lsRuJtQ0SfPg186tMU8D2KOy0peoYC6dblEyjeJL2l2u6L60Ri5KmJK6kUTGGkLWt2fRrjwQOmM7UQVT14WWtL/fJbyMAJqq+OIJxffNTS19R9x3cHXszFZylnYPAoh3okPbzG/+cgkek5X0vPS7uBgbp/2Ccchx/YVxX1MdzFxiVROdrJt2OcG30AAP1FqVWcYeGa+ORucb9WR4QRym2FGkT94ekPfQEa6RnCnGN72JfyYtBnfJcOdXgd4vfNxKYcVy3msKml+UGYYueLfYLGPHz0/HJoEpYB8wjFrO4U4m/oL135XaZw3cxW8tkef2BnNByXkDYd9GCAPhAIb+Vqh6BaCOrE7pITC/D/i4lJbXT29NRnoAhN0geDAFhlc+tXyyWkD+pMT+ZKNEPWGnjCzaIndDB/SmDgtuKXa69ktB0zBjIqiFBGXUJMVIMzRohfD3gQsMA/mjwFm+6CnJ4oRoR2/MZEyGh6K7nMpLDEY/xc7gS3f+xfmraxVrn/XYvyCYTYhkHrYbqUiWI71qZT0m0BwtVCXHvAMzLuHiZpyj3leYPUTygdIHDVUq1fiajz4yOhYdihrfkg30w== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: c6feb819-41a3-4d40-36af-08ded1ee4f80 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:20.0516 (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: dgvBa8+fH5Gh3IqRGX82Cd1c3Wcq45GBvqqiDFxJ5j5bhfjzlNH59RTzMTUOxhN6eXmg59L8iPxoxAtKnzBimQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P189MB2739 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 ; Wed, 24 Jun 2026 12:44:27 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239502 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 Wed Jun 24 12:44:06 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90837 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 2403ACDE002 for ; Wed, 24 Jun 2026 12:44:26 +0000 (UTC) Received: from DB3PR0202CU003.outbound.protection.outlook.com (DB3PR0202CU003.outbound.protection.outlook.com [52.101.84.65]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.6143.1782305064769723551 for ; Wed, 24 Jun 2026 05:44:25 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=CKydfU1G; spf=pass (domain: est.tech, ip: 52.101.84.65, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OCH5FMBa6HsYDEqQL7TbrfqCQEK6XyZD/Rwznstu0NMfUkRavAdGAmaD0ZRulkUQtZKy7eWWqm+bvkwX69TnSksg3uBuxPUD52SulfWilflbr6C22NHEDsg+t1ORDvksmzreyDOq814ERazfC8tiQXSwOQtTj3089PGwXUNtGuBa+Kn92c8aupctsT8Jzry7xaF5VatGtO6mx1L16qJhoMXkgSDFSQaGWQrKly51oOFibyXaFAFwfFvlZn9Gu8dl9QrVmKXvuc2WsJ/R1Yu+regZqFxyglp/ch7Mwk6MsAsZMwD5KtIRHo2gobp7PXzz7z07PMwlgb4do4gxWDmQzw== 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=s7vR7fvRrLue7bwd2TDLxnaCZ5+i/LLQst0hs41nJhhc0y9OLGAHJWARXpmzFO5uMb6EqTPxCsbbdZiUU1J9nifDTWCKEZeUVGgFoYP6CZZJ6EP9OK85ve9IWr2Glf3D89Y6cpYsNSVIPbEWLpFyptFiNZoTAFgdUOKH6L1utb56y8kQHpjePrKiw+icTnKh6H1+6kZufD/gwQZ+DdDNxsOsLOqETq6XZ8P+VIGj6JhYTqPR1xrT0sJLV2nNn+wqgtugeP+wvMKKipGL3/xlL8YbCHigcn/dVMqd4CWAho+dbIoArcILZY63x6+OQiFfpNZOPaSmMfGt2+aKfUydBQ== 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=CKydfU1GvGzj4fxQLe7LSPvbvUL13ZJ3ScOEvhjj5pvi3EzQVT2wYLpxSPuk0oHVLeYyqlL7E/cJTNn+xi4RSKdkTdXCvSay+8p3GZOzpNkR8lP12oIO4yIO/m0i/pDPbmcaC4jhJCKqjhwJX7MRE3JSBpleUQRxEa6Pp9Igh556nkbkd1H7BaL+1NVb7ybg8w1vTJRakv0iioZgqTb6yjJQOrmNWKXsX7nh+dah7ADBcIvDBI7dj05OnWwSij+crU+K70Q7XYd4spS+8EpHPAkNcGDk+EDUSNVdm4u7szEdST3kuxdLCzb8IlCaEdhsvrPbi3ujiXfv1Ls1IF5PPQ== 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 VI6PPF1CF26DBE8.EURP189.PROD.OUTLOOK.COM (2603:10a6:808:1::18c) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.13; Wed, 24 Jun 2026 12:44:21 +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.0159.013; Wed, 24 Jun 2026 12:44:21 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 8/9] oe/patch: return manual-resolution commands as argv lists Date: Wed, 24 Jun 2026 14:44:06 +0200 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DU2PR04CA0336.eurprd04.prod.outlook.com (2603:10a6:10:2b4::15) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|VI6PPF1CF26DBE8:EE_ X-MS-Office365-Filtering-Correlation-Id: 3439f4b6-b25e-45d4-a6ac-08ded1ee5049 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|23010399003|1800799024|366016|376014|22082099003|18002099003|3023799007|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: M0IeQvDxAyLGqmOGLURyCjaKlXU+igMgMWNnC6l2F+blGr2aouMj+jMkhyWyp/unslqpnCiaWKJ/I89IyGch5etkLJ7HLnf6XO6U2eYXzxaVl6qHc2oK1rymp7kInleX8VvYan2Y2C5fDmo1UuevaYilZCa0Aq/MBTxPQPzgYs8c3QZc8W4T3StcZwg5e7I42K7aWw0oQvEiXsHnbhlNQjKvcoMj9kz7QAT1BzbA3gJxZaxtTlZALeQC9nGS/YvK1hOlOv+3Wjoh4Ls4NJOjsaMbKpiuXZ4yUEEkL2FyOwTcgE3pqyD2oJiEzBmqKlbDGQKayMlhyWRj9JB8gLdnEvb89rXOzWqhcH6oHisBWF950hUcuC6zNB9Ruoc62dfhXabaaVZ/fe4bdIYZm3ztsXumijhen2wlZlwLtPyGJ4TyKo+qFLdTjlS1XqokRVl0/X5gvxeh1JSuqf2MiIOqPjsZxTNebLE/9E8SN2NrPhhuMgkhGwcb7IkukAfbglC/2wTFWh0nCKngyJAYYM23VtwY8MgSQZCoho6La5mGKeGkdC5O5eotwhl8aIyv67gXvS8usHhZ4Whwc8VoM9ESTXPKibQCFUz6IrBA38/iHAq7V6xEZKoW8ewmjRvor3ENVkk8wFWCORAeRNHlqgiXrqbnXdUbm+2x4uts99QoEhw= 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)(23010399003)(1800799024)(366016)(376014)(22082099003)(18002099003)(3023799007)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: EVe7m7HmNJgLodLIbVjppm2BXY61k2cYZ7VlTHGnLJmGzrcOJbwRwipXMcQyQSolRkmDZPb7U0gn3UMKiVRNdrFuai7HEG9+hJljZU00cdbm8qVx8hUfFdISM5tYu+YT5ulzQsTf0QkIzBbyv0yf6W+29xUPYmw2qZQ5CKOJSEj5Y4GMrlWo6GQbf75uQimGfvhInGm15wkPaAMdiHMFIQYI09nNjiSsZ+kCajg+marK3KVPDdmfJJ3nARcOGCx6VOVOj4Txr4KdB5lrvfmjuhoI3FSPYK8QL28RApd5ELLZnmsy/g7YNBuKzrmyLPOmwP5udPUXo+FvVUQ4PC5tUZAHGSXV63TxOUt+rk6zC4WJheFxKtPlbxnQ/UluITpTveVEjRDEpned0YSf33w+B2MDtqonE+J3BRqqvBxCvj6/TYuS7tBf3wtXmFG0VcqZNIXEfXRRz79Q49e1YGnQMRIZ2xzdLwS+juOOSgVkUedv2H8eBpqFpwaOZR/Uh0Wbq6I9OxIYy1HPrluMMkOVUl5iFGEedtzNw8V6L4xLesouJ3T4juGMKnZsL5b2+MQc4r8oWUIOgYU6F0WyCd7MnGxiz/G5WN6BhCo59AFgs8/mOaM+j8EQ1D8rJHAtSX/VnCH/LJ17CF0VGNYu/9070PaEbw1Q6Y0MeLYLkMye5XIpTGLaZkgw9GU2T0zcO31prDgf2Vw1jZUUhySZm7X0QYSo8i4UQpQp7RH5eCIOt0ChcqJ0wKkfjO5FfGAxuZh/P0fSvPrC4L+5eR/SoTrVjPlro4JbdVxo12Q69FJxEjE667PKkg4TB2jV9zwLaWIuZzpYxkzH8sQHJXyX3mh94Tmh6NizQKbbI+a9gs7hIy/Let1UgF6/ojO7DA6WAlr4slV5r8cD4C46pPi43Jnbhs+R7fCbtb3pMWzb/253msbP7Xuv4pKyl2xAwER1UXjE31hxt/JQb8K+YM9d382pWoxuDaAQcdqJC+kVfe5hCxBTysgt3FPMcTi8BuLjAASOVzI+k0Vfxm/mCR9TlDvpj1kYxsqjZ3Os7eegkbwiYFZKSPcYEn9YqAN2MVvTx0F8/MNGvWWENTqG4mGvPLoBqxwgbJw/Ob6nGISaUX/08fI7wBMWvVOP+6nxG3oUMN8GSB663/3S8Zdv8BzfWVs0X/wLaWt1Ervi4OPuwdb5J4KhFftA97aIFeC/7vuM8el7lzbcn1LKJpsiUHWDSvM6iP/lbOi+IVot3V7WJu+sURs6dUoktLRikbdnB28trkIzD5H9cdmXUcCfomPoBdCcagyZerZLTWPpQYOgQESXSeYA0sK+UZALi6TrQSNltW/5GmBBzHw9AoWXCkODCEX2kTrb1ZKQhKcV0J0XEZz1ev0F1qeN5yxGku8YS9lz+PA9ssAkLssC+u5Cp5IAZXVhf+nQUAY6hN7hTq7naiZu3ufVe9d147K7EgcVqAo7NIwsJD3lZ8jd5OxjovyGlrBy97hoV+ARszgMjv5OW9ZAJ2YNfRlyBDnh9UoNDZg7elYGV7GI9ZJeUhg0uplXmtoUoOxY5h6x0H2t4xkyUHzr7+KlqsyLke1YGUWg8E46hR9S94vTwYoWhsC1AnKD6WRHKkG4zZhkvJgcxyssKwp0w7CkolSrv/ViXZXXzblGKFQNeM4DpTr8srk3F3N5KZEDTLmBwQ3KBCNyrp2kFt431usPWNMSxHFD5C9LDSIZDvgBY2UZW2TunhqDmmfHqVW0zw== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: 3439f4b6-b25e-45d4-a6ac-08ded1ee5049 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:21.3342 (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: 5OcrZuBFxnFySJ26SWcuBElSKrV+gUMMd4RTXlAQWwSY0o8izd1socDlrTp4nSXPkmbI8WrgElGExCuYPFv0QQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI6PPF1CF26DBE8 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 ; Wed, 24 Jun 2026 12:44:26 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239500 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 Wed Jun 24 12:44:07 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Heimer X-Patchwork-Id: 90841 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 06FA0CDE009 for ; Wed, 24 Jun 2026 12:44:37 +0000 (UTC) Received: from DU2PR03CU002.outbound.protection.outlook.com (DU2PR03CU002.outbound.protection.outlook.com [52.101.65.1]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.6115.1782305068329570639 for ; Wed, 24 Jun 2026 05:44:28 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@est.tech header.s=selector1 header.b=XvfsrSKZ; spf=pass (domain: est.tech, ip: 52.101.65.1, mailfrom: anders.heimer@est.tech) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kqksTdncu6Y8ie2o4IjmlqSA68JaFNAeQV4gJhgnrR+dJmIbgxSug4+jI0ixHQHxm9BUWcfLlTi527UXohFzInEhFAnQarqj5032MbV9bmRQ8wjDZIOguRbZItj1IwIv34FJPok299QffwSZxOrsBIE++r4RaT/xKtJ8vXtIyhbG3LpFLfOcupMc4q0g1bwro0JCGhTFAywFZq9EXoMVhLZuEKXt4CPfueYsRJySjRG3DfzW384qUOQ0h1h8w/LAE7i2gSjhTM8GHlONjLLCGoREAIu8uK/fT2xTECynGa5Tm6Ki79Xf1LkGwZYvWoNFZU05/8rqOhjV5SrEINXK+Q== 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=HtKKe5vEsVDsVid+Vi/ppNGVN8DQRBVEIVRQMUPZ4wM=; b=xbs2IxQ24YeniBz7+/1ahJ0bSRI4tBpXIg0KCtqAdx5+fja4ezfEjt2v6B9UlJxBCikpyFXe0Q3mVjmlwOIEyO1SAfllb0H/dOIse5jK2xYrjqLsB/qnk7RWdtWj31v63uIg3tLKH5aHzZVxxl6U19pvV1DBYLJHYVNZ5IFwtz1G6U6kWud2UPYjkOzc+HqxmnCV1RTLQGFdtDvfz6+FoUjqJS9lbzmQ83+qF+rWbseXwEo2IpdI3hoYB1IbZAPdTJq/mgRK8pa3BGoxiGGz0cvqj53ucp/pdQyA4vH7crikiVBr4HdiFYoGJvuK53R28keXyqKrbbric6ZpnYm/7Q== 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=HtKKe5vEsVDsVid+Vi/ppNGVN8DQRBVEIVRQMUPZ4wM=; b=XvfsrSKZtoRIl0IANtxpsL0h6rue2ktqbEGfH3C6ciUN74l1GhWKpj8ybyuzcnwgz384Wp+KXPRAbnp6Y8T5q2qgkdgorkA2xbGOHICeIsLX6zOKIC8a1BBb1HN0b9iSYFuqj3t2NapUzDiMoF7a6g6mXNTrQ65ZF7hCOYzZF0mRFXyaNacZITR99TcovrGrMfO88zvwgMWhLmcUQpvLAr2m/SN2nP6Cx8Sl5/bGp03mSgkkdiqDiGN5+AlqJMltWE7Y/s4F2h5ItAv4bEAj9nlcez6m4Y+k4vDvXzYIqvR9FhnqVl48ido8aEaW8GMgbjmKi7uaHac6vApz3LfTgA== 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 GV1P189MB2739.EURP189.PROD.OUTLOOK.COM (2603:10a6:150:1c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Wed, 24 Jun 2026 12:44:23 +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.0159.013; Wed, 24 Jun 2026 12:44:22 +0000 From: Anders Heimer To: openembedded-core@lists.openembedded.org CC: Anders Heimer , Daniel Turull Subject: [PATCH v2 9/9] oeqa/oelib: test patch command argv handling Date: Wed, 24 Jun 2026 14:44:07 +0200 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: DUZPR01CA0021.eurprd01.prod.exchangelabs.com (2603:10a6:10:46b::15) To DB9P189MB1641.EURP189.PROD.OUTLOOK.COM (2603:10a6:10:2ac::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9P189MB1641:EE_|GV1P189MB2739:EE_ X-MS-Office365-Filtering-Correlation-Id: fd18492d-5fb7-4a15-52f1-08ded1ee50f7 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|23010399003|1800799024|376014|366016|22082099003|18002099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: f78UWzuPv1KeOYg5Y4f0Usq3ai6XFjYBCp32kHatzug213tBjol0TiirZXn0544C5pFaFqYZJteG9TzOo+6xEk81uYFJuR8LWPNeAWcrOaf2yFhTDfh8rFWcI68R7mh16hLmMGqnlzF8pl80kZpFvgK4UwIvh1KvR5LOd9hEh73hMy3qnkMm0MSP+hbFBUvrRJ+1+1na4XBy6kkA0UuNp3Qi+X0xWSZ5DlX3UupAlJ8oHVT8bZVHOEn8Fwtww1HeVUl8zGXsWQtG7MdgaHD/HXHM7jNSpAnYBqUgffi2CIFDlVxr4gKY1mhZ2zh8zjNtrQ4e33MIv7d71Vd4wfDxC6rnrzkNNm7kk5HWJP4KdCeqczK2y3Tm71kDE0xR3IwhAJP4kIZceajsMFZEFx89sumDjPyacPAembDCOzCcvvfLPkHaAvIj8WikOV8eMJPxq4tZhGyx33D6LF8WQ4K6wz9W3g4lxKKk64LBjRzHH+PXJ1j7AxFYJH7hsXfkQEa/Qa8SzBiYKAp+3evlOS0NTLJ9qxzWAg90Y8Qll3y1z71h4nbe56ADxZO5CqntgZAocNq48X9uy0B5P7+sSxqF1rS4Ifz/6jivt/OUv/lOe4fTIdqZfmXIUnEXpuOIBiCHa+4JuzK/qCSmxsedNM6mJOlc3RovIrF6s8JJ5mkcuFs= 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)(23010399003)(1800799024)(376014)(366016)(22082099003)(18002099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: R6292pgRNzpzCouo+gH7p/DSW+sl60YXmOJVEPV+x3O7N7NsfGUqDnKfyLE7zyN30C5nGiYICOsRYI6I8e2HDMNaglGs8r5kHpET0iKRx9ynWcIsB2dJGRd+wuGwPd+9LXCdlb9BbdWYniKumslWzs3xbLCQyQ4MLfqg82G0GCnLX5vVdGkDVr39KpAPOFJWR4AaqTgy69FjLk8OsXRSPIPUCjDV4gZ5BRu7MkPjuvUqubNutdiE6A9Is1jsazJyNm1yMavcqwBXIb7jDyntMmrBoRMJeysXO/23UQkvMrxajdc/ztk3ogMgOxrJC8IE89ZFyqWagNRSdYKI7agNIDRCUn6gb0Ut+ynU3RhuXdqtHxoYw+KQG4yojf+yKMLWLbUqbb2pl4jhwTGSUkr2XZMqJWZ3+b6/mMpQ3d9t8FMlkXZD9NXywL35Ri9jdlV+bhusWNmGP2bgKxnEMXOZWnJdX5tTZGvjgbPoqdGZ/NQNsztH4X0eKJNHA4rP5/fr14hKpfRTaoaG/7VvTgaiIV/q343lKRjsMr9M74g/O2ukHPljlLq0I4Gu62czA66SNzoR8G/z4OcTefL5ZcMW8Jnwluxvmsmx6PpGbX50yh3YE3pspGtjb6BtQaqhcA2JRYct2vEE9sthFiagHSFZAKlrv8Eh5ctbgbJqfDBg56m89xCp0eqVTVvphcaATFVMYl/KO9hEUYmrYtykczc3bh90rOfwM8WEaTNRDFtKQwwmtJOTSIcGNy3OcAMxRzD/lAitVr2Vj7tJEq1pSXFmDho225zOiLR86RR1Jn9EVGIVYGuSyBx9stZEQkpgV811uE1WpBNVwsjHebOyWpRiYLdsVbgIma3ni/Vu+Clt8pzWEmFHS3tKWjKdc2aN3IQW8dQEH6ZN2GE0nIV2OMr/T1UeM5fiHUrLXUqvYAGQtbobrN3c8S/NxFM7wjWbV4kiHRH+qkz2W6959fO7r/9wTTDMSbMrWaaRjplG94kBjNLLrXJO7yIpE25M0BfgdHpP3pjIyyZdMprdn/sCnKjaJ6JH77yNvu0NnFMDTRo8rIoLvE73eSqtfh9NHOZBBj9+tXqMr3Fh1ji3vnXyjLUOPCaZh5jPzw2p92chrL9bRuIpZWhNL8xwxfmXclhfbxlNBeL6InVxOS/ikjW/7CnK6YRNkC3QE/8Ierq7fGVK47KQ2de2RG3oniiCiQY947nUQabp5ps1GhzSEsT1PaCY9OlVrtKPRN9bPLUVc9vuLMUFnD3GAgVkAm3ipp7Wyc4Xi074Opu8ps62nSH1khn0BNRr7Wi4VyUIKs0JC6nU0izEirnPtpFnnhM1vP4W7+H1UA5k+TBIL37VNdE/iPZsLKovOTejez63/kURSjZOCg1A7yAIy8pDa/iHWuSRzxxn2f1VET6ak1XZAN5Pq4u1u7ERFgmArn+LziZZYcoL3aoodU9h2/yh1rDmq0AXqjsKWAJ0MqdcsDW2D8wtMcCvoqUtIrqX+Wi0fhisCm6Kk/lTG1XgLblxRcXQOhD74DIoiXUFGfzBTmYDNe63JyBLJdb5sP0EVLNXyqbYoJaDOjZ6RHgvIW44XPMdj/rFYfDntxKUDVuuvc6Nmtfhm7qklWIzgp58VgbZMMlSRbLPIGgDiGiOOqvdsQO0+6Fz2IXoaumOI0Miclm0isXIMKlVZAicOT//OcMCLhz28W29xCPZ32joWO/MrwdTV57UlsTLFf7HgScO/UN5KsjQXxsvcg== X-OriginatorOrg: est.tech X-MS-Exchange-CrossTenant-Network-Message-Id: fd18492d-5fb7-4a15-52f1-08ded1ee50f7 X-MS-Exchange-CrossTenant-AuthSource: DB9P189MB1641.EURP189.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2026 12:44:22.4793 (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: X6n6f2rq1ezES0EbuAHYy4tvMxDUeN3I5aaXNAd5WclB50XSr0U1DqK5MdXLAagzgSLXEAs7Pm//Aep7YLb+qg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P189MB2739 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 ; Wed, 24 Jun 2026 12:44:37 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/239503 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 | 101 ++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/meta/lib/oeqa/selftest/cases/oelib/patch.py b/meta/lib/oeqa/selftest/cases/oelib/patch.py index 69e06b5ac1..8492549764 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,19 @@ 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[:4], [ + "Fallback Author", + "fallback.author@example.com", + "OE Test", + "oe-test@example.com", + ]) + self.assertIn(metadata[4], ( + "2021-01-01T12:34:56+00:00", + "2021-01-01T12:34:56Z", + )) self.assert_note_and_extract(repo, patchname, "+plain diff change")