From patchwork Tue Jul 7 21:14:54 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Ripple X-Patchwork-Id: 91942 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 1623FC43458 for ; Tue, 7 Jul 2026 21:15:23 +0000 (UTC) Received: from mx0a-003cac01.pphosted.com (mx0a-003cac01.pphosted.com [205.220.161.93]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.1038.1783458913168077904 for ; Tue, 07 Jul 2026 14:15:13 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@keysight.com header.s=ppfeb2020 header.b=sFOAcrkv; dkim=pass header.i=@keysight.com header.s=selector1 header.b=nvyngx1A; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: keysight.com, ip: 205.220.161.93, mailfrom: john.ripple@keysight.com) Received: from pps.filterd (m0187214.ppops.net [127.0.0.1]) by mx0b-003cac01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 667KiJSV240806 for ; Tue, 7 Jul 2026 14:15:12 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=keysight.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=ppfeb2020; bh= X8WnHZ2THrBU1OUp64yid8GTRqDyzwEJufA4gW9kyJ4=; b=sFOAcrkvD6EUhUDx fp9sKJtkM54xw0S1Tp9HQxJYHD6huMlUtLmG5cDOS2Z1VgrTknD5sFZc4AbOksYB eggt5JCitfFNLn5aHBnHHcTbnSTpOsfAdbB43BjhZIlD01YMnt3fGZTtMMotOahR AQJpnEpQkcP7tFTtBzjxDYyxrfKuGqUvWzL6/+531yFLMGVXl7YBt1YSrxf9ormy /WKxa93PffI13Qm9BnG/9jE7RE3txoq1G4zuxSeGQ/QG/cDccAVcjzWmuYyD4oH9 kgKiSQw/WL9J0uzQIG+TIXbHrBw/UNZlIg8BVdFHmhpdyCzH9mRtvrvlKm6iNtAp viBVDg== Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011026.outbound.protection.outlook.com [52.101.57.26]) by mx0b-003cac01.pphosted.com (PPS) with ESMTPS id 4f98rmg38r-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Tue, 07 Jul 2026 14:15:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SdUqzA2XyMaaRPAFGJqUk1kAWmJNvq5My3CuEYL3eA4EUfC5fAyI49E+RxDEe0VCu4zcKkp7HCkfRdBFtAeRRZgSnumQc5JndjxtZ7dRPCLAEHLBwBMn8MdO8hGO5VZTgcVlcebyaAGNDxHvST/2TH2tLi8xmkcNRVw5x34g7Pu8eoZcKkvUEnI9VLr0azU+bF2HHUblZ9PqOKFcqyeGKr/M/Fakdiuq9l80xnrs2R4g+4NXlSfJPw9HKdbPQJTmzyE0VkbHEsOQgFbelgTlmLii4sLEvfktw3c17JWI4SkqftN/UZChBq5GMNjHEkQ49CeC6iJSKG0OeDt6zdITFg== 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=X8WnHZ2THrBU1OUp64yid8GTRqDyzwEJufA4gW9kyJ4=; b=iRCLGsTWFpII/ye9mS32nXjJQ5L8imi/iyS7fJjftrpSyXEheEPBDflMWq4fVYm/cLc4s0pGgkix6CV02FAQGmiGtSM/XfOHHUmCHEhuSVVIT/SICsFOYioLX9+gsgSMPxt58N8wrx2e85BZkvO8XFuRFQRxcBWbwTQSKVXh98X3yU1xG2YNGhnxqBqIg49PJ4ZmjCeNhOgFdQOmeaOLTOKjEn3Qo4dA+BYKDggtG3hOgkJeffLFWwhTOnHPdNtdHyGmlDGCQqQRCBjI6s/RWX0EjH6+wz69Ez1T5dq5E24lxcH8yAV+NZcZ3HXzzwLtMTObFUAYctrd2HybWbDntQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=keysight.com; dmarc=pass action=none header.from=keysight.com; dkim=pass header.d=keysight.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=keysight.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X8WnHZ2THrBU1OUp64yid8GTRqDyzwEJufA4gW9kyJ4=; b=nvyngx1ALMNQSch7nheesovYNHITK6LqBZtr2xHGF+PjJ2w20MmPD8LyRYMB+w8AYgHx3Ce2kw48JtbjNsCLDL5tP/37f4QIpIczP11gCMC45DOY/8laSV+gWH+BH8L5jxIGznn8KlH+2Pr4IyyWSYYrzbzlcv1286j8FMBeUZ4= Received: from PH7PR17MB6130.namprd17.prod.outlook.com (2603:10b6:510:1f5::17) by CO6PR17MB4900.namprd17.prod.outlook.com (2603:10b6:5:357::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.14; Tue, 7 Jul 2026 21:15:07 +0000 Received: from PH7PR17MB6130.namprd17.prod.outlook.com ([fe80::7052:ef05:ccc9:d9c2]) by PH7PR17MB6130.namprd17.prod.outlook.com ([fe80::7052:ef05:ccc9:d9c2%3]) with mapi id 15.21.0181.009; Tue, 7 Jul 2026 21:15:07 +0000 From: John Ripple To: openembedded-core@lists.openembedded.org Cc: John Ripple Subject: [OE-core] [meta][PATCH 1/3] go-vendor.bbclass: Fix test file exclusion and license propagation Date: Tue, 7 Jul 2026 15:14:54 -0600 Message-ID: <20260707211507.2585072-1-john.ripple@keysight.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: X-ClientProxiedBy: SA1P222CA0162.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:3c3::13) To PH7PR17MB6130.namprd17.prod.outlook.com (2603:10b6:510:1f5::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR17MB6130:EE_|CO6PR17MB4900:EE_ X-MS-Office365-Filtering-Correlation-Id: 1f508ce0-75f9-4475-f078-08dedc6cd22b X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|366016|1800799024|6133799003|55112099003|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: w3LK+bAB9cRKzW9wE3W+UCk29/uwRLiEmUkFG84WiYalKuhCUcR04isMx11HhRuy+Yh/OwrgpGeFH71JTdJmeYUsZe2glB0jVD5+rwGY97Hyw0L/m1K/K46IbIbanqavUvc0H1+6CNAUNS1r2qYmQlXa6+Iez4AI7IauA//xduhnMPfGU3ojLm7KaUU1UXA1pp92eXA3K9bZ+hIWVcckunDsMUBC4Ok7ZpOHpfK8kqHOhKTUO/W57DzY5tvCBmbZDRSItMkjtaeSkUjt3ijUiO8u6SJ4dwojlN8bowJR1uhG+Jhr/GSd54bj01iHGhBPShTiJedwuQnTsYmtLzR/VchTnicTSMYtQ3cQkTUOpWO4wOv8t+u2BSfQXl6Xnu2I//N2A+zVDdGZDgSKwz1eQMhIw8lITV6EgwNp+gXFqGeTuAjgkz1E5+Gc8kMtx9EueBCk9jws/sa63OzeeAiUs12SPlN0fba3juXf7KLdfsV0POC01HDCAXqOKukO9/L1T0E2WZZm35h60aqYkyD3jks8FUdPRN1Vx+jodjtjeTBPnwxO1Z65W7bh8LEKbzA6Vo09AQs7XFE7+LTboMSTLronJYpmbdvVunO2xLsBPmQWTKzwjjmR88uK4g9CMhgT X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR17MB6130.namprd17.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(366016)(1800799024)(6133799003)(55112099003)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: x0+ig+sE0enQkU1uSZWcxNDK4Hg+uQ4LgJ1JuNvH6O2go5UcNqGp2ddyNcf3X0cfdrPUXICa8X9GTi+3cYz6Aisu8umoCsKTJUlqNLVlPm97W2v9bTrmV+NmK1nGoxWA+gdvMVgWOi+9eiUx+wpAZ7mrzjupTy7twSLdakO5I+hFzSAr+JNgaQgelQpKOPl9estZvgMHdkNtmG2HOiZzxegf9obQgsuVQJGCBAKeczI2xBx5Am+bQMBBa+oqAHiw2M1Nj59LV2zw+a69FmInBCaZe2BW561tfewbK5UEszMt8rUgRl4HvZB99oc5Kpdna+IEt2mnpa10brs24CuDtNLJR5kdkGQePlybA/oqfPCxrCHBD+BrYcDsI9sXkbRv6gPqtH7d5KuYaTr8OgaSBgTivB9JqxqvAUBrKFck6SISRQ+TSecMvr0SM4l0m/KdRkJEKrnEEru6m0neaQ5VcgMNkWPsqOgZU6cw0dv3aod32U2L0rE6yqRhJQGWywOWVIQYBtc2i5xcjN7xyJrD4/Yo9cBdfehFFMoztqTr3SYQajvmLtiN6/NkRmmoczsrbsqZUNMTgV2adz5Y5W5rpoD9F9lK9jPvky1Am8CJtNdc7ljUfm31X5BNr9GE6eERahdvRGNQlMueLl4HqAxhEE8Iswu7o0w3Xox/VAUFcaJGY3hKVQUilCsVg4Ck8PVOlwMbLcrEv5xw1iKIWX2GtBlxlnfEiIv+XQZpFuuUeEHAAJS/hbA1NXq2fdg9Dpk63M+TVao2Q9irM6J+V4Wsr1dHhYGVWSVvyH3elX0GTeEiCT+etWWqRZXTZMcYH1ztqgFlM6v53YxhrH0r1u/hZDY7AN9eUkbW1JPv/0RrSYeZ3C4797MUCVyUqcNQX4Lq1GSJLNVrrC2uzgOxYJSfORDFg1Nh7my1JH/Bx1w0+TxCei4wj+/2U3guXc7BT8Pj/+Yp+1P3ZRSLJhxcbzbHERU4FKzebhU5sUQPEnOQC/OazWAbrZ4bRHX1cMEX9ZV5wIQdyybALeakP4xPfepLED00BLjGh8fiiq6ScyVBcECoD6INKphckKutc2W1XlZt4zFVxGtrd46PvYlJYWOeuGB/9qgy8Nf8A6Rk5FaRrRgEuGXr+cYKDWBCMkmQj37s8o4boO89a25NokUIk2YWg0n5OcAGB56wRMdrydndXqCUGf3XeESBUIWfZzEbW7hPlkDKv/yYa23E5nOc9HdpvE3lknou5PPYUhGjRinLcnh+PNvi/522B0ZO0PfXigIjYsQRvSOJeDJ6xr1xyP4xu3zSBx9mJWPnhJu1VgCWbAWOMOXZDo5nq5oMylUc+b9He6CACzgs01lui6doGRMcBxOxNh6FU2PQQpl39AP1BXKyFJLlpxY9f7gVwgw7YsLYBB4vuFXQ87vq2UzObjZfFshSIjt1ZMErw7y7NwZIS4VlV0QIp40cZxmGtO6pOUgkvn4Kqz239gkdCukaTzyvd+VcUOwaBpb3fDKsn7wpCuTxKMIMesJOlPO0cM10Zwq3pxjH+eUvuhC9fmgyrJsZjYyrM/BJn7uXgQs+gr9+HXQtBfDEQ1F7Og90/TT1VUx3hveCnhTHwx2lQkInwJP9tm3cY7GDttI/9yhKIOfcyvRj/0dGPvntTYKPsRnksmnlJc0w7AZS+7YZVy2egPgOrYEd59ddUrq3QFCgSCgUA/HmiuKCUofRExSWVA7+qKa/3L9bnHkU+iisIYqBg++qtg== X-Exchange-RoutingPolicyChecked: rhtFY9ZfSN9qhgXEK1/inLOK9xBcOJfUWGCCtTntCXbNGAGY9o2g/uhepR18dlRfwPCnLdhJTfYGmUZNOeJ44X0/GDJmCGWuuN6nP83woLv+QVC0qpv1kHWL5TtRkZ3qJqPlrqJ16azlhkEZS6dCsqcAJZ+nzrcwjNyzO3uTLGYdL2emx9wCeYVq78IghT5m8zqc84/5kw5XapUCB/XdatzwAHKn8YSjNfvj13ZPl/xgJGI9V53vrd85zCwgXCOkYjJtrfzn/EmMFlDb7ATicW3mcdE/b0fg7EpicoISUjjBX0xrIYEQrfJjic8Gec+8a3H3RnFNgJ95avpW6cUW3w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: fl9kXb43VxmE5EG5ubCeZ+2C54JPbyytc2Kmk8anfM9JLfqz6vlJPzPfxBzHdwV2SerGM3QoDwHJDx5k5VbP+k146eAinLoSy6/jTcZx5b2Z3l2V7EZN/akgZjfUeTdcs0xLelV5SNgFqQPPFWTpPNy7bHTAsKh8ZYC2BbKnznCOrSrYuzgrXlKaBzz8gZj2Ymk8X7dkPulTpYON+b0jErLi/nnolfCMrqdxgtsomKLmL62zdfCosj032nWCXOERKiCSECYDtO7qM5CjcYMJC/aRPSoG7xxHfRp4mjDWrMeyt0EEbFiI6zLSunL8Im5GpP3m9n8YPgs2OyFI6PE4/a5e5QbvGNBWaFz7BfHGeKcmEO1gid8yAtLF4tCqPj9FkCbBe+dC3v5nbf5Pc7xxuvweoOcJx1wufDlDvHdKeak5HIORP+B2iLMD6ZOuc6geFUyOkTH2jXb9JM+63adWfcGdQjTw9U+rVMltee9DPKJEFN9XPnVVm3ARe+oOPDdDkHfYmiLUnqDAj8GoVLtS0r1PuT2uqNafuJQyl3x1PxmHY7s02+9wXzktw3qDv9E/IXQLWreo3Ctcl6U2qdSS4pr34m0p2HTstg3CeuVM69YYQgYeaioFAFE5AOWkGkbf X-OriginatorOrg: keysight.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1f508ce0-75f9-4475-f078-08dedc6cd22b X-MS-Exchange-CrossTenant-AuthSource: PH7PR17MB6130.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2026 21:15:07.6093 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 63545f27-3232-4d74-a44d-cdd457063402 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 59uBKDaqWbcu9jKimRuCSiZRNozbxrCxlvdWFfSU+Rt5Zxf8TQzxQWb7Tlf3kIEhneQ5Q6PKfYOCI0BAHARVvxpsQ6eEFaTRJHiwsHnt93w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR17MB4900 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA3MDIwOCBTYWx0ZWRfXztzNK1LPEJbl tfcmGYkTwHzxrfmh/iLzfz1V19pMgevdVu9LD1DA2IPydQ0yYPz1H+h9NjHikVNGRbd0AqT+Y3Z 5a0LLfPFusy5TFupVD6Ii/9Pdd4E3EP+9+iAW3IID5lwr0banp6P X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA3MDIwOCBTYWx0ZWRfX874KV+1JKbBN o4g/DIFgb4+MJCFZSO4FilzZIPRLNkpDc6G2jwhnV1yHOLNDih7gyxbtr2lzaFP0PaIABUazPVN BUoUmjaI4hlgaerX0ys7y5Z303LQWXAqhGcxIRzvLm3qnjtY4vV6CKAbwruIUBhhOzNL8juSZnI ZhrnoToLPXfoUPKzb+Q23pgUdY2z4nx70xksbx8P+gp2xNa0F9Jyo3nzTiy4ebmfh+Jv8zWDyhD snXQSjuRXKgXxTlyHsrHYeRwHWrWcEDTfp6ZaZVWyOqrfhabd/8VY7ovrSU0u8bIg/5SHBK8HGB I1uKIkjI5Dxib+UQ/FT6/1Eqg3rCJl8vb40VaoYM+SVHCYh9A+Lv9V7t/K++BngGLPh/M+0C4Lg SBouf+Q3Yv9SXVdD7qqdz1erhlL/XV2aLnA54F/SWwmqoxgkyhuXHfEf11Y5+vATZfnZF/S+T4n fhzv2ggjcJ/k/oX2rzg== X-Proofpoint-GUID: 2lETViq-By_z5u15dXSiNWFxDrdfDps5 X-Proofpoint-ORIG-GUID: 2lETViq-By_z5u15dXSiNWFxDrdfDps5 X-Authority-Analysis: v=2.4 cv=HuFG3UTS c=1 sm=1 tr=0 ts=6a4d6c60 cx=c_pps a=pvbKGUK/Si0pumwNLfsG/w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=vu2TTH8h0NUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=FLoIbiw2ZNY34kqd41oa:22 a=mOSSRekXLlsqcmK058qe:22 a=plf8rDjJAAAA:8 a=F6MVbVVLAAAA:8 a=CKkP6PFZCmJgk5SHP5AA:9 a=JWTSs7K9Rhv-lrTctFka:22 a=6mxfPxaA-CAxv1z-Kq-J:22 X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11840 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 phishscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607070208 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 07 Jul 2026 21:15:23 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/240408 Two bugs in do_go_vendor: 1. The shutil.ignore_patterns glob was "*._test.go" (with an extra dot), which never matches standard Go test files (*_test.go). Remove the extra dot. 2. The license-propagation block used os.path.join(src, "LICENSE") as the copy destination, writing into the already-processed vendor.fetch source tree rather than into the vendor destination directory. Switch to os.path.join(dst, "LICENSE") so the LICENSE lands in vendor/ where go tools and licence scanners expect it. Also fix the guard condition from not os.path.exists(subdir) (checking an unrelated relative name) to not os.path.exists(subdirLicense) (checking the actual target). Signed-off-by: John Ripple --- meta/classes/go-vendor.bbclass | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta/classes/go-vendor.bbclass b/meta/classes/go-vendor.bbclass index e879d629a8..85a3c1b586 100644 --- a/meta/classes/go-vendor.bbclass +++ b/meta/classes/go-vendor.bbclass @@ -141,7 +141,7 @@ python do_go_vendor() { shutil.copytree(src, dst, symlinks=True, dirs_exist_ok=True, \ ignore=shutil.ignore_patterns(".git", \ "vendor", \ - "*._test.go")) + "*_test.go")) # If the root directory has a LICENSE file but not the subdir # we copy the root license to the sub module since the license @@ -149,9 +149,9 @@ python do_go_vendor() { # see https://go.dev/ref/mod#vcs-license if subdir: rootdirLicese = os.path.join(rootdir, "LICENSE") - subdirLicense = os.path.join(src, "LICENSE") + subdirLicense = os.path.join(dst, "LICENSE") - if not os.path.exists(subdir) and \ + if not os.path.exists(subdirLicense) and \ os.path.exists(rootdirLicese): shutil.copy2(rootdirLicese, subdirLicense) From patchwork Tue Jul 7 21:14:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: John Ripple X-Patchwork-Id: 91943 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 2AD9EC44501 for ; Tue, 7 Jul 2026 21:15:23 +0000 (UTC) Received: from mx0a-003cac01.pphosted.com (mx0a-003cac01.pphosted.com [205.220.161.93]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.1022.1783458913831030919 for ; Tue, 07 Jul 2026 14:15:13 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@keysight.com header.s=ppfeb2020 header.b=2My3Itsz; dkim=fail reason="dkim: body hash did not verify" header.i=@keysight.com header.s=selector1 header.b=deNAhppc; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: keysight.com, ip: 205.220.161.93, mailfrom: john.ripple@keysight.com) Received: from pps.filterd (m0187214.ppops.net [127.0.0.1]) by mx0b-003cac01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 667KiJSW240806 for ; Tue, 7 Jul 2026 14:15:13 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=keysight.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=ppfeb2020; bh= J6BGy28rjdDk/Io3/0QuFCJFiWhzanGBRv69GVdHAVk=; b=2My3ItszO8ENyrCb DUGx5fFtM0DstFys5aRh8H/IULl3vaNWRYyh7KnyT/UUWfb73Rb8sjde/qtzv6e3 NBNo6loT+V2l/0leqTPeqrc/WQ0/SVUAMp5m4eXIuwbhSY+JIw3zfy6e224aZxil Vad76skgcT/8jsOfUE99Qcz6ZP/wiNJ3gHWUr0CHsa94Q0L5loKOLzHvv1Bs94RL yiybcH3hvGgwQk8wWY8McUCZ9BuSiVzNXvVEvJRWgsGNywn3gJKIXJ5dd1OxpPxB 9leG3+XxHndJJ7uaQ7T7JsZahky1GO5wKAZkXc44hyqDLRg99UpFlJ2kDoVo3YdX dFCFIA== Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011026.outbound.protection.outlook.com [52.101.57.26]) by mx0b-003cac01.pphosted.com (PPS) with ESMTPS id 4f98rmg38r-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Tue, 07 Jul 2026 14:15:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O570OwrVBHGLsGctGpz2fNaeKj8YwEQEKTfiaLBSTsLBEalWVg0TqlmecRznS3QuLIpevrg8sX1W+MlSPwFq005OHv5totLfUQ6gK7wLz1gxC/2SRl3isEKJAsEt8ZaSuYgT57YxwMQb9rzRKTaBLi8KMVA4TpqVR02f7z1YrAHn7sy3zCj4/joyeOYINyT1kTQGgELBsvvrhCTe5I0yxRaSVjfkhh/GS/cbaFFTibQRG4z1xGFF/XbRX09zH9koUgigkdJ6SowsNJE4BF0tdZBxCdtQk1AQ0KupTpke148OjfSvOy1ONEVT/O5uszTsVQmrN9VlOp5/7M7TOGZtWQ== 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=J6BGy28rjdDk/Io3/0QuFCJFiWhzanGBRv69GVdHAVk=; b=WrgI/uYy3oE1h4YzdjpxNTA+Ga9h0OqJYU23EEOuB8T8IIIdwxaeoC7OPsIbWX6I0fM/pvv5zCxEufomAHZSjYfFQkyo2kql+NyH4KcmJtlqi8mWxcYUXHgu3afcZ4jax98ngU3Y39vnFsqVxfKyFqfme7ysG8KaznUCsxoggZlG9p9CwGOc+JhLPt1xBckOVGn/MMuiaDlJQVS/WRASmeAeB2iw0rsytpmYGPutS3X6TFggGsf1NfT5pt5nHX10QMyMaRrS5cLTRZMtexYmGpcDS6DOLOCvvV7BsE6ALBlc9JnQU3GkHQMH8xfFNOUIhSSOUKSkXLUwdBuhyc+mmg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=keysight.com; dmarc=pass action=none header.from=keysight.com; dkim=pass header.d=keysight.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=keysight.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J6BGy28rjdDk/Io3/0QuFCJFiWhzanGBRv69GVdHAVk=; b=deNAhppcKpcu0p2zPReVt4lhlgYb83cGvonogkRXtP6Zl4vTzs/PZ6PffGAplJnIYz9NT9RHUzR5nR4mYq6kJWJ0okB0KJWTKBGPs24M2r+9vV+OcOT0WwMnUHcCD6GDISDe++5ZvJa0qp+gcv2nedQuC6vGaHH+WfPuguBaF5w= Received: from PH7PR17MB6130.namprd17.prod.outlook.com (2603:10b6:510:1f5::17) by CO6PR17MB4900.namprd17.prod.outlook.com (2603:10b6:5:357::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.14; Tue, 7 Jul 2026 21:15:08 +0000 Received: from PH7PR17MB6130.namprd17.prod.outlook.com ([fe80::7052:ef05:ccc9:d9c2]) by PH7PR17MB6130.namprd17.prod.outlook.com ([fe80::7052:ef05:ccc9:d9c2%3]) with mapi id 15.21.0181.009; Tue, 7 Jul 2026 21:15:08 +0000 From: John Ripple To: openembedded-core@lists.openembedded.org Cc: John Ripple Subject: [OE-core] [meta][PATCH 2/3] oeqa/selftest: Add go-vendor.bbclass selftest suite Date: Tue, 7 Jul 2026 15:14:55 -0600 Message-ID: <20260707211507.2585072-2-john.ripple@keysight.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: X-ClientProxiedBy: SA1P222CA0162.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:3c3::13) To PH7PR17MB6130.namprd17.prod.outlook.com (2603:10b6:510:1f5::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR17MB6130:EE_|CO6PR17MB4900:EE_ X-MS-Office365-Filtering-Correlation-Id: 573921ea-80f5-4649-3d27-08dedc6cd2b5 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|366016|1800799024|6133799003|13003099007|3023799007|55112099003|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: 0qG9ay865T/SXl7hUhIKRLVLcj5N2mMqjdb4H9/Tzet0Fo3Omp2C6IYOdg66LX57KlOX4/2gp8ORx5CKTH9l/xn8yfaU3cgN9Xgj6eVmZ25ggUcsguJzbd/jvnwkAxCXdJytdkY3yh+XjFotWseJP9WPa12Gs4jCC3mIGBivUR6FTk+rZ4mg/DdUoOQlO8PPdbSvDE3/Yad40vXC1cF3w70MsW7OJR4DhQtOkaRi3wUX06T0SnS2aZjPnGVJoQTjKvoz3X2NNJHx4eulFq7R6sJED1Mhfz4c+vx9iuXWOa4h1y/Coy6qlFbOnvjMzcSh+94Vfkfpgdfo5biSVp/tQ2S3e5c8Qp0uwCCgMHD20T2OR86oc1/GkqYCf1d38pNZZjhEgYT7Qvl+xkbaMbmq9gzD+9JV3Rn8qfVpq7Mk5mXeohx/eLDqgwGOEnxtBeTy3zSdG1hPAGuvrut0xhGO1J3wv/Zyn3rN7PkY06uvri5ryYfUQSOg3c2AyVuR4x997tf3OUtYScbq3sx7sBHyF6Mb8Fptd98LY2J6xMFvGWwDt6YNYtWaIx86cKFRbo/8xvR0ubI9rIGvLmjVMQl71JAkTvPedUJ2n9e9N880kD4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR17MB6130.namprd17.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(366016)(1800799024)(6133799003)(13003099007)(3023799007)(55112099003)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?EWXcAgn+qKtLN0By5LRvYtPPEyIv?= =?utf-8?q?+UrM4acxKWo/cHxqf+908zWyjLCPd+CkyormXZdVJ+thjYf6Td3z3qgoFZe76xbQs?= =?utf-8?q?ivKzEc59ll7gUxNIyUSea/3Ya3mFEkwRM/X2+b+xS+Ck3d/vR6hnF1EsB1hxWfv0N?= =?utf-8?q?f7GbMWAI4Z25g/agAfUQ8E2jbYqxJtGmeIz59PSDeh5F6Im6qCnM23zN4/ybQQpPH?= =?utf-8?q?xJaxpY2BFVf/SHFzehxVAAvf4p6zmw0i13iH3Fa8Ed9GhecQzRmgUCpU30tSTRBw6?= =?utf-8?q?u/X6YUKdr7k9uM8w9Ldfyhx8vGfwi+QK5pof4OE0S8K6vRjlCyIG0yAD2YU8uCOqy?= =?utf-8?q?2fe3gyr63/hwahfQeRJ1ahJtwsI6+lmdEoynaWXAIWdaIr8ZnMLFUmKAgg3NCOrJC?= =?utf-8?q?o+3+t2n1p4+VRzsFrx7XWKN/S+hF/wl08pe/ETlEYY7hEZVB2Ybqt21Q3nZ2fanZC?= =?utf-8?q?Gsp/2HsscoeNZT2hLXi0eBfHJT+nTQqIz3L1PzfcwQo6UsJnlZlDJF2nqICTHaizj?= =?utf-8?q?0X0Ea7xjASQwd7EI/dLJ+n10uuIckVEg6QfcXfWhjJcSOq6OFozeMITLoCiyoIM3r?= =?utf-8?q?36cc3QZrN4hdlo6h9JqNH22BBFh09GKNTXbMRAgc5nVi2cWgEBilvZep521xHainK?= =?utf-8?q?RvwPcvul1VN5eFn32cXo+L18x/xF8MsYcBNACkEyndQ+dsCiSCifkCerb3Og89U0X?= =?utf-8?q?XBtS4T+0OsCyaSW0RbHMr8VEan3WA+GJqUT0BEI1r7b7q0q20DLrUaVXInjgXaKz7?= =?utf-8?q?X0LDi/Ik52k4QNPsuMg8C784Ti/Vd12AVZm62NBoy/HCA38u1F3Bzjl55P4EgC0Ke?= =?utf-8?q?+rniCjwy97/OyG9+9Ls3Uw2sLhtR5+5ORwxeehIgbC693zZyUIBRwU6NS0MTjTm/e?= =?utf-8?q?RZGCBtJBUfl35nmyWXbnYDnpxevwhOZdBmcolXoI3LBkAAJPKsB9cr+mg0iKcKkwn?= =?utf-8?q?XUzF5irToJXfOiP7uBVHEkm0lfsFb83XNInoJu+E8nZ3Mr/tgSJ7BNf36KYlUG1Pp?= =?utf-8?q?MKuyhu0MX4YOy19wUxGmKc17CskCBqG+aYD7eh2LPETnOpDHWGa0ajjGLuWYsx9Kq?= =?utf-8?q?VjpqGEUEsz3uGLfkZI2iGiyZr90My2KFIGWWacjm4rW30Mz0hZ1RtDTOuSq5L01i9?= =?utf-8?q?wf2a4KHlGxNldzfPL/IyxrdqT9fTRXnYvUI1NLbfy97RMjpjTCkViPGrqkja/9rN9?= =?utf-8?q?khBQaV30l+glS7BPg0NonHKrFclWOEce7zx83HXlp7Nn8baWdL/O2rEbGolQGGZhX?= =?utf-8?q?r4d22ujY8kdRY7pYdFojOQ/KyF6NjBlE+YRth8o1mdOcXSSWOnStkxracwuHbdI2I?= =?utf-8?q?V0Y3tRFY4mjKTmMOKLnZgrQ3P2wWMk+7Rfq8Y5T0oi877B6s7nklPqf8Y0uVvbpzr?= =?utf-8?q?B6/aYbqeHYZiMBVv4Dtej7Glq1Lj1MMy58daPrjuA0ZRzWjj/5tqcTExAqHfXGhlC?= =?utf-8?q?uXMCErcIUh+2dzX9MPRcHHyI3MtNnle9F+2FVBum/ZKx70Rx5l+CqaobCS6CMcXBi?= =?utf-8?q?D3MHimKxmf6FQg+z2vu2PLC7arJoWC1/8Dex2EMBtykEDprxiTlTWpKBhcYxxtqQi?= =?utf-8?q?Yanoe4VUpvI8MmKh3xshf6zD7WY9Etc3BWmlegw4cAawDjqkXZy9Q7Bii5Zyf6nJF?= =?utf-8?q?Zzo5KuCRXgrjWNoqoVUToE7IrFrKuVAA=3D=3D?= X-Exchange-RoutingPolicyChecked: PUG4e85ys+wHrC8MZXgfC6DaahKwcAg1ZOZ3hDdnqllO39J6YBE2PmQa58fx4epRTuueHkFNeZviZYbRX0xAHfyk8RSURTaT11eCnhkLwdMu31vsMZoF7hBSzPWVEi8zi38Psm6JXAN94MB+sY/TXpBOKRmws7TGeIqxCkZ2oCeIijCWJrefrQj+1fAeArFB/SdYPqEWw5Rjpzvj+vqT3dMtP8kL9kvhxU3lUhcvqPrF16kh8FPQmFUhn6ixhoevf/xkDJYxMgNJhWRlYdHatyLRSxjYVyoMVMbtHgBjeTXE1+2fG1p7NnUd1HbSGuLb4CGyMmvJQs0tzGGeXUDXtA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: lzAq4sotLXp9KXBjYH7frDuXvYjxwNU9udHDpwZLpFkgc/AjEfNhp4T/c4mHvnHCrmm71goKX2XbNJeVprKLmQbtnidjPrPw44JLVPBzwrYhBYlHnYG1MXMe1ZZlhpbVpuhtOFqkvMn6LSOv1l/WeYUYyOCDrIsnFpNE2h5zc2pF+CqIejubGOTNw4/n53DECDOykApIg07yR2qUWujLAmyCT+5Gp67dijzX0TsW+dbUaNlXXQxW4Z8fiSGQwB92ys3mJDTd/E8uHUJbljmVqrbYEVy1T2eMOcyn97v4pv5zPbe6VigRl1I7pWLuQMNaEN0maTfLr4GUq495zqImu6vdpHoYOq/XppkSfQreZ+djltc3G1ry7wEx43m3JG0+t3eaCcU6dzduZVy5kA1nVtVwp3oSiJokbsizJY5BRGFulixD8hVNss9Ojl0n0wokYlsmomjZMKn0xar0Sq8Q6StkKd92qAp3UsAtnbUSboCbR/5FYlt1eRSP1I2RkorzaCcTe4YJZt/+TfIwvGfQeB+6Vb2vLQ2DmdvTO5Q2kieCI3fP8CZGIy8ZBLwT1c11+QTGASE+x4hc+jGB6EyjbX9M/XJgSgAAvu4PBlguTbQKgrtr9lCUJnO9nB8/UKa2 X-OriginatorOrg: keysight.com X-MS-Exchange-CrossTenant-Network-Message-Id: 573921ea-80f5-4649-3d27-08dedc6cd2b5 X-MS-Exchange-CrossTenant-AuthSource: PH7PR17MB6130.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2026 21:15:08.4803 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 63545f27-3232-4d74-a44d-cdd457063402 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zdX8t2PCvXr7v4dHNz97a5fPLwG940XoIz1E0sv93SBYkTqlvbsUepsbTAYVLtRxrkRSanwC5mEWrIZLR4RnOYzS2NszWJsCTM67K/oSAxc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR17MB4900 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA3MDIwOCBTYWx0ZWRfX82dgRtPAvalO lnqYLDsr4afnnTWgjn6O2v+2lyppuIZCjCM/Iz3MrpBLoQZkt5LKQt8+bLE5v54tRdFCo/aAIpQ qDVxglwTfy8s++D+I7w7cQPzeRH3BYjYOCi5x9PPYAbitvN67Zfs X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA3MDIwOCBTYWx0ZWRfXyaLFsNx7wRcD bT/fQvE+eo6ewN7vRzvStd/Qg/BvIDubqQcb02g5s/JEOnGm6wujn3bfvTSdfc98MQzuP09UgLr miJ1z0+xaVCNwnUnE18KuxNncQMW6cJx8B3dHAIzsFe0lLQ9k+Yb4u6SYGuq9O60vVooVlHIaOs 6Ukrikbff46O6PLfsX+xu0vw5YbhgFYDB0i4eL3Z2n/QTmPWCLfeHk1h90AKKMqIaIqQuCBSwhV cwXZp8dGfmSnk5RSiB8j70zTZ/wOS10umVdLyBEEDHji0FbywTRmm4vxQJwIQvccnomTXy7ZH8x VhPNq4Y8pL9vuLzgZZkVKVbdClzVJKBshaQGlI/nwbMNJqQtLvQc+EJJO1fGYsIl6pL8H3SKmyM hkE9iTeVb/1rsqmM7624mOPd+kqwmVH/Sg2S0NMbEy9X/No5okabIg4p51dI1IjeZEV/pAhQgQC ivECZGSF4hCLgJ7hZCQ== X-Proofpoint-GUID: LrvLU4Xs0d3btPV_c0Scvc7M-1nwftJ9 X-Proofpoint-ORIG-GUID: LrvLU4Xs0d3btPV_c0Scvc7M-1nwftJ9 X-Authority-Analysis: v=2.4 cv=HuFG3UTS c=1 sm=1 tr=0 ts=6a4d6c61 cx=c_pps a=pvbKGUK/Si0pumwNLfsG/w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=vu2TTH8h0NUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=FLoIbiw2ZNY34kqd41oa:22 a=mOSSRekXLlsqcmK058qe:22 a=F6MVbVVLAAAA:8 a=iGHA9ds3AAAA:8 a=NEAV23lmAAAA:8 a=A1X0JdhQAAAA:8 a=5cgIs88SztoUVwLlgL4A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=6mxfPxaA-CAxv1z-Kq-J:22 a=nM-MV4yxpKKO9kiQg6Ot:22 X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11840 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 phishscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607070208 X-MIME-Autoconverted: from 8bit to quoted-printable by mx0b-003cac01.pphosted.com id 667KiJSW240806 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 07 Jul 2026 21:15:23 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/240409 Add govendor.py with two test classes that cover the behaviors fixed and defined in go-vendor.bbclass: GoVendorSrcUriTests (offline, ~10 s): unit tests for go_src_uri() parsed via bb.tinfoil; verifies the basic URI shape, path/pathmajor/subdir/replaces encoding, and that non-git VCS omits the git-specific nobranch/protocol flags. GoVendorTaskTests: runs do_go_vendor once against the real recipetool-go-test project and checks that external deps land in vendor/, *_test.go files are excluded, pathmajor=/v5 falls back to the repo root when no v5/ subdir exists, modules.txt is reproduced in vendor/, a local replacement (./is) appears as a symlink, and the S/src/GO_IMPORT/vendor -> S/src/import/vendor symlink is created. Signed-off-by: John Ripple --- meta/lib/oeqa/selftest/cases/govendor.py | 264 +++++++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 meta/lib/oeqa/selftest/cases/govendor.py diff --git a/meta/lib/oeqa/selftest/cases/govendor.py b/meta/lib/oeqa/selftest/cases/govendor.py new file mode 100644 index 0000000000..a56cb93698 --- /dev/null +++ b/meta/lib/oeqa/selftest/cases/govendor.py @@ -0,0 +1,264 @@ +# +# Copyright OpenEmbedded Contributors +# +# SPDX-License-Identifier: MIT +# +# Comprehensive tests for go-vendor.bbclass: +# GoVendorSrcUriTests -- unit tests for the go_src_uri() helper (offline, ~10 s) +# GoVendorTaskTests -- integration tests using the real recipetool-go-test project +# (network fetch of git.yoctoproject.org + github.com/godbus/dbus) + +import os +import shutil +import tempfile + +from oeqa.selftest.case import OESelftestTestCase +from oeqa.utils.commands import runCmd, bitbake, get_bb_var, create_temp_layer + +# Module-level temp layer shared by both test classes +templayerdir = None + + +def setUpModule(): + global templayerdir + templayerdir = tempfile.mkdtemp(prefix='govendorqa') + create_temp_layer(templayerdir, 'selftestgovendor') + runCmd('bitbake-layers add-layer %s' % templayerdir) + + +def tearDownModule(): + runCmd('bitbake-layers remove-layer %s' % templayerdir, ignore_status=True) + runCmd('rm -rf %s' % templayerdir) + + +# --------------------------------------------------------------------------- +# Class 1: go_src_uri() helper function +# --------------------------------------------------------------------------- + +class GoVendorSrcUriTests(OESelftestTestCase): + """Tests for the go_src_uri() Python helper in go-vendor.bbclass. + + Parses a single fixture recipe via bb.tinfoil (config_only=True) once per + class so the function runs inside the real BitBake class-loading machinery. + All tests are offline and complete in ~10 s total. + """ + + @classmethod + def setUpClass(cls): + import bb.tinfoil + super().setUpClass() + + recipe_dir = os.path.join(templayerdir, 'recipes-test-src-uri', + 'go-vendor-src-uri') + os.makedirs(recipe_dir, exist_ok=True) + recipe_path = os.path.join(recipe_dir, 'go-vendor-src-uri_1.0.bb') + + with open(recipe_path, 'w') as f: + f.write( + 'SUMMARY = "Selftest fixture: go_src_uri parameter variants"\n' + 'LICENSE = "CLOSED"\n' + '\n' + 'inherit go-vendor\n' + '\n' + 'GO_IMPORT = "example.com/testpkg"\n' + '\n' + 'GO_SRC_URI_BASIC = "${@go_src_uri(\'github.com/foo/bar\', \'v1.0.0\')}"\n' + 'GO_SRC_URI_PATH = "${@go_src_uri(\'github.com/foo/bar\', \'v2.1.0\', path=\'github.com/foo/bar/v2\')}"\n' + 'GO_SRC_URI_PATHMAJOR = "${@go_src_uri(\'github.com/foo/bar\', \'v2.0.0\', pathmajor=\'/v2\')}"\n' + 'GO_SRC_URI_SUBDIR = "${@go_src_uri(\'github.com/foo/bar\', \'v1.0.0\', subdir=\'sub/pkg\')}"\n' + 'GO_SRC_URI_REPLACES = "${@go_src_uri(\'github.com/baz/qux\', \'v1.0.0\', replaces=\'../local/baz\')}"\n' + 'GO_SRC_URI_SVN = "${@go_src_uri(\'example.com/svnmod\', \'r42\', vcs=\'svn\')}"\n' + ) + + with bb.tinfoil.Tinfoil() as tinfoil: + tinfoil.prepare(config_only=True, quiet=2) + rd = tinfoil.parse_recipe_file(recipe_path) + cls.bp = rd.getVar('BP') + cls.uris = {k: rd.getVar('GO_SRC_URI_' + k) + for k in ('BASIC', 'PATH', 'PATHMAJOR', 'SUBDIR', + 'REPLACES', 'SVN')} + + @classmethod + def tearDownClass(cls): + runCmd('rm -rf %s/recipes-test-src-uri' % templayerdir, + ignore_status=True) + super().tearDownClass() + + # --- individual test methods ------------------------------------------- + + def test_basic(self): + """destsuffix uses expanded BP""" + uri = self.uris['BASIC'] + expected_ds = 'destsuffix=%s/src/import/vendor.fetch/github.com/foo/bar@v1.0.0' % self.bp + self.assertIn(expected_ds, uri) + self.assertIn('go_module_path=github.com/foo/bar', uri) + self.assertIn('nobranch=1', uri) + self.assertIn('protocol=https', uri) + self.assertIn('is_go_dependency=1', uri) + + def test_path_override(self): + """Explicit path= sets go_module_path independently of the repo URL.""" + uri = self.uris['PATH'] + self.assertIn('go_module_path=github.com/foo/bar/v2', uri) + expected_ds = 'destsuffix=%s/src/import/vendor.fetch/github.com/foo/bar@v2.1.0' % self.bp + self.assertIn(expected_ds, uri) + + def test_pathmajor(self): + """pathmajor is encoded as go_pathmajor in the URI.""" + self.assertIn('go_pathmajor=/v2', self.uris['PATHMAJOR']) + + def test_subdir(self): + """subdir is encoded as go_subdir in the URI.""" + self.assertIn('go_subdir=sub/pkg', self.uris['SUBDIR']) + + def test_replaces(self): + """replaces is encoded as go_module_replacement in the URI.""" + self.assertIn('go_module_replacement=../local/baz', self.uris['REPLACES']) + + def test_non_git_vcs(self): + """Non-git VCS omits the git-specific nobranch and protocol=https flags.""" + uri = self.uris['SVN'] + self.assertIn('svn://example.com/svnmod', uri) + self.assertNotIn('nobranch', uri) + self.assertNotIn('protocol=https', uri) + self.assertIn('is_go_dependency=1', uri) + + +# --------------------------------------------------------------------------- +# Class 2: do_go_vendor task integration — real project +# --------------------------------------------------------------------------- + +class GoVendorTaskTests(OESelftestTestCase): + """Integration tests for do_go_vendor using the real recipetool-go-test project. + + The recipe fetches git.yoctoproject.org/recipetool-go-test (commit + c3e213c) as its main source and github.com/godbus/dbus/v5 v5.1.0 as an + external vendor dependency. The project also has a local module + replacement (github.com/matryer/is => ./is) that lives inside the main + source tree. + + do_go_vendor runs ONCE in setUpClass; individual test methods inspect the + resulting vendor directory without re-running bitbake. + + Verified behaviors: + - External dependency files are copied to vendor/ + - *_test.go files are excluded from the vendor copy + - pathmajor fallback: when the /v5 subdir is absent, repo root is used + - modules.txt is reproduced inside vendor/ + - Local module replacement creates a relative symlink in vendor/ + - S/src/GO_IMPORT/vendor symlink is created pointing at S/src/import/vendor + """ + + # git.yoctoproject.org/recipetool-go-test main branch HEAD + SRCREV = 'c3e213c01b6c1406b430df03ef0d1ae77de5d2f7' + GO_IMPORT = 'git.yoctoproject.org/recipetool-go-test' + RECIPE_NAME = 'govendor-real-test' + + @classmethod + def setUpClass(cls): + from oeqa.utils import ftools + super().setUpClass() + + # overlayfs-user.bb in meta-selftest requires a machine-specific mount + # point that this test environment does not provide. Mask it so that + # bitbake can parse the full recipe universe without halting. + ftools.append_file(cls.testinc_path, + 'BBMASK += "meta-selftest/recipes-test/overlayfs-user"') + + recipe_dir = os.path.join(templayerdir, 'recipes-test', cls.RECIPE_NAME) + files_dir = os.path.join(recipe_dir, 'files') + os.makedirs(files_dir, exist_ok=True) + + # modules.txt for recipetool-go-test at SRCREV: + # - github.com/godbus/dbus/v5 v5.1.0 (external, fetched via go_src_uri) + # - github.com/matryer/is v1.4.1 (local replacement => ./is) + with open(os.path.join(files_dir, 'modules.txt'), 'w') as fh: + fh.write( + '# github.com/godbus/dbus/v5 v5.1.0\n' + '## explicit; go 1.18\n' + 'github.com/godbus/dbus/v5\n' + '# github.com/matryer/is v1.4.1 => ./is\n' + '## explicit; go 1.14\n' + 'github.com/matryer/is\n' + ) + + with open(os.path.join(recipe_dir, '%s_1.0.bb' % cls.RECIPE_NAME), 'w') as fh: + fh.write( + 'SUMMARY = "go-vendor integration test: recipetool-go-test"\n' + 'LICENSE = "MIT"\n' + 'LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=4e3933dd47afbf115e484d11385fb3bd"\n' + '\n' + 'inherit go-vendor\n' + '\n' + 'GO_IMPORT = "%s"\n' + '\n' + 'SRC_URI = "\\\n' + ' git://${GO_IMPORT};name=recipetool-go-test;branch=main;protocol=https' + ';nobranch=1;destsuffix=${GO_SRCURI_DESTSUFFIX} \\\n' + ' ${@go_src_uri(\'github.com/godbus/dbus\', \'v5.1.0\', \\\n' + ' path=\'github.com/godbus/dbus/v5\', pathmajor=\'/v5\')} \\\n' + ' file://modules.txt \\\n' + ' "\n' + 'SRCREV_FORMAT = "recipetool-go-test"\n' + 'SRCREV_recipetool-go-test = "%s"\n' + 'SRCREV_github.com.godbus.dbus.v5 = "e523abc905595cf17fb0001a7d77eaaddfaa216d"\n' + % (cls.GO_IMPORT, cls.SRCREV) + ) + + bitbake('%s -c go_vendor' % cls.RECIPE_NAME) + cls.s_dir = get_bb_var('S', cls.RECIPE_NAME) + cls.vendor_dir = os.path.join(cls.s_dir, 'src', 'import', 'vendor') + + @classmethod + def tearDownClass(cls): + runCmd('rm -rf %s/recipes-test' % templayerdir, ignore_status=True) + super().tearDownClass() + + # --- test methods (all inspect cls.vendor_dir, no bitbake) --------------- + + def test_external_dep_copied_to_vendor(self): + """godbus/dbus/v5 source files are copied into vendor/.""" + dbus_dir = os.path.join(self.vendor_dir, 'github.com', 'godbus', 'dbus', 'v5') + self.assertTrue(os.path.isdir(dbus_dir), + 'vendor/github.com/godbus/dbus/v5/ not created') + self.assertTrue(os.path.isfile(os.path.join(dbus_dir, 'conn.go')), + 'conn.go not found in vendor/github.com/godbus/dbus/v5/') + + def test_test_files_excluded_from_vendor(self): + """*_test.go files from godbus/dbus are not copied into vendor/.""" + dbus_dir = os.path.join(self.vendor_dir, 'github.com', 'godbus', 'dbus', 'v5') + self.assertFalse( + os.path.isfile(os.path.join(dbus_dir, 'conn_test.go')), + 'conn_test.go should have been excluded from vendor by *_test.go pattern') + + def test_pathmajor_falls_back_to_root(self): + """godbus/dbus v5.1.0 has no v5/ subdir; pathmajor=/v5 falls back to root.""" + dbus_dir = os.path.join(self.vendor_dir, 'github.com', 'godbus', 'dbus', 'v5') + # auth.go is at the repo root of godbus/dbus, not inside a v5/ subdir. + self.assertTrue(os.path.isfile(os.path.join(dbus_dir, 'auth.go')), + 'auth.go not found; pathmajor=/v5 fallback to repo root did not work') + + def test_modules_txt_in_vendor(self): + """modules.txt is reproduced inside vendor/ and lists the external dep.""" + modules_txt = os.path.join(self.vendor_dir, 'modules.txt') + self.assertTrue(os.path.isfile(modules_txt)) + with open(modules_txt) as fh: + content = fh.read() + self.assertIn('github.com/godbus/dbus/v5 v5.1.0', content) + + def test_local_replacement_symlink(self): + """go.mod local replacement (./is) creates a symlink in vendor/ to S/src/GO_IMPORT/is.""" + symlink = os.path.join(self.vendor_dir, 'github.com', 'matryer', 'is') + self.assertTrue(os.path.islink(symlink), + 'vendor/github.com/matryer/is should be a symlink for the ./is local replacement') + expected_target = os.path.join(self.s_dir, 'src', self.GO_IMPORT, 'is') + self.assertEqual(os.path.realpath(symlink), os.path.realpath(expected_target), + 'Local replacement symlink does not point to S/src/GO_IMPORT/is') + + def test_go_import_vendor_symlink(self): + """do_go_vendor creates S/src/GO_IMPORT/vendor -> S/src/import/vendor.""" + link = os.path.join(self.s_dir, 'src', self.GO_IMPORT, 'vendor') + self.assertTrue(os.path.islink(link), + 'S/src/GO_IMPORT/vendor symlink not created') + self.assertEqual(os.path.realpath(link), os.path.realpath(self.vendor_dir), + 'S/src/GO_IMPORT/vendor does not point to S/src/import/vendor') From patchwork Tue Jul 7 21:14:56 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Ripple X-Patchwork-Id: 91944 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 3B8ADC44503 for ; Tue, 7 Jul 2026 21:15:23 +0000 (UTC) Received: from mx0a-003cac01.pphosted.com (mx0a-003cac01.pphosted.com [205.220.161.93]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.1023.1783458914492635937 for ; Tue, 07 Jul 2026 14:15:14 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@keysight.com header.s=ppfeb2020 header.b=v5SRscac; dkim=pass header.i=@keysight.com header.s=selector1 header.b=L9bOX9rV; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: keysight.com, ip: 205.220.161.93, mailfrom: john.ripple@keysight.com) Received: from pps.filterd (m0187214.ppops.net [127.0.0.1]) by mx0b-003cac01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 667KiJSX240806 for ; Tue, 7 Jul 2026 14:15:14 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=keysight.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=ppfeb2020; bh= Ti9JSqIXVfa3dwtsYXVn1muCcNUHI8xlDOIgExa+zvo=; b=v5SRscachSeNhNTQ PxKFyJ5XOOAlSwsU3uuyzHlsiJMLSW8l0SaZAKeWZ5zjNm5l++hymPiJBbUmv87Q UxVs5PfWAr9zv6Lk+7mlB5JXC9iCP3dE3RaqfaDBQjRpadfgQnDjNvD7h+IrOD+t tugLRfIG9jv3CvveuAnnHoW4Kjq9H8CN49L2EvIVeNrfscIwG+HqVk2gUmVpVv0R fGImpXYFiswo9Rp6EMkXGeLUi6c9XWSpwtHDEvyyOUsVqirfX4XiRD7FymHS8pzx 3vfeWHTcvLt/A89qdq9zD52vB1/KiF+0K/0XodutvRXRNfePiIP4WMpElNGVYrze R0J1uw== Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011026.outbound.protection.outlook.com [52.101.57.26]) by mx0b-003cac01.pphosted.com (PPS) with ESMTPS id 4f98rmg38r-4 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Tue, 07 Jul 2026 14:15:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aQUaD+0d9+bl6w0Tr2l5ksgQJyulvadj84yxcZUjYXgSXjFNs2XLysVAdkCX5UrkOgwOFMi1LCSp4g3Mo/BeDo+Q21dE8w75FUMUhcdpumBff10HHAigX+JU0TA1M2Z51shjooSRVcfYFzMb3IIXCCaDLPiEBDiq7RWKP/xcJwWzGNkuy74g8vmBsxX6Ay/z2nja/6LFQZZf4w42EJdONs+Xg16zM8v0B+hJPIUy0gQd92NME7IakMqXwF6nF6gE03PMEoIws72WVejt+rylxZeRs9YkJZ9Mer3pb0XyLX6tC0OUygycEZl2LiuxJstKeHQHiXg/xFxzKpQ537tdjQ== 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=Ti9JSqIXVfa3dwtsYXVn1muCcNUHI8xlDOIgExa+zvo=; b=onLSL/ZbbzN9DxaDgu7U71fhbbldrR0C5Qa5NCDpJ4vK1QhWi+RI1OeOqqgOqwab8cqM8+jFWGeyQq1JPPJZqbiyx46hLl3vbhlJ3gyPbMn5zG6s+CUGXGCcaOeQ52tSspAz9k9emBx6PY6a2j7ZLFHLasaweWQwCFlBK+8pbqhJ0prPFxG8uCTLrZNt/OPy1/Dc+teg6DmcvTXsDHQ0u/kDd/2GmaZ3WX3rq5AC2Gb1KWeUUvpggoy+rYjzXLq4HDzW2vtyb3VkhtEnaK4QbiV6eImPb6U5h7whnwRibPIQtytoVyIGW75h+9XcQ1SRIt1SJZW0ScPdCWGkcBoX3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=keysight.com; dmarc=pass action=none header.from=keysight.com; dkim=pass header.d=keysight.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=keysight.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ti9JSqIXVfa3dwtsYXVn1muCcNUHI8xlDOIgExa+zvo=; b=L9bOX9rVBXIPQy54/W3uCAwtRYKs9fs499F/1+WLGjYKqC/dL5y0/NcEJa3sBzv4UuiHkz43QRFya7KBiuUQOjCMfUgte0hZI5n+UUF2GV/j2zGu3MuW6EOkOF8nJ29wR02B38kFfYnVmzGAFD+F1+P49pZdJHiHh88n5nGHBWE= Received: from PH7PR17MB6130.namprd17.prod.outlook.com (2603:10b6:510:1f5::17) by CO6PR17MB4900.namprd17.prod.outlook.com (2603:10b6:5:357::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.14; Tue, 7 Jul 2026 21:15:10 +0000 Received: from PH7PR17MB6130.namprd17.prod.outlook.com ([fe80::7052:ef05:ccc9:d9c2]) by PH7PR17MB6130.namprd17.prod.outlook.com ([fe80::7052:ef05:ccc9:d9c2%3]) with mapi id 15.21.0181.009; Tue, 7 Jul 2026 21:15:09 +0000 From: John Ripple To: openembedded-core@lists.openembedded.org Cc: John Ripple Subject: [OE-core] [meta][PATCH 3/3] oeqa/utils/metadata: Handle empty git repos in git_rev_info Date: Tue, 7 Jul 2026 15:14:56 -0600 Message-ID: <20260707211507.2585072-3-john.ripple@keysight.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: X-ClientProxiedBy: SA1P222CA0162.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:3c3::13) To PH7PR17MB6130.namprd17.prod.outlook.com (2603:10b6:510:1f5::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR17MB6130:EE_|CO6PR17MB4900:EE_ X-MS-Office365-Filtering-Correlation-Id: d9beddba-f834-408b-7f81-08dedc6cd332 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|366016|1800799024|55112099003|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: yJQXEvSfqUVajRse9oR2fFEiI3gPjSYTRJ0oDlDwR15g6kfKVA7AYgrHCQz9hn/RVPnI4UjDHHR16LwlsF5QxTdEabpfpwJBICSmtHYOk3qEn+V8rlC0Y7Q2WvEY7OzjEZgzIKSldZw06nA4ybE2EFMCVSSeN4fB6UPFHviqFxA034w/sMrzmBa8ZDn2gBHzbgAsenLuSiiidLrUYu3BtzqRhOPFtt7aqkkdwtCEn7DGUwys1wJpof/p7zYWNh6RNXU2SY0/tEcnWl/cvBeyfDrpoi852NbM0gfzAdho5bbQesQ0UX4M/eiv1MYGEds684Q/p0pq2p/6tle7T8815OWT0gnI7b5MjbYHixqOY16xUYkl7ZEoZTTHk1BatNXwXt8M/W4ynLgmpwqtLhtljDwuBYMg5l2AB1VhTbMzr7uaZ6WZ/40zFFFct74eipObOLmnBq0cuscCFUnssBBTsIEyBBZDVo0s9uJzPlNkP6RQgtbVFxVVafKMHWQE4nfrI6pIfb9xIYL2yrV1h7JjYmM9rXElkt2olK5n4t3FoG5JleQti6UUzCaZHxkdeQME5hWw0XJ2W+iWgc//mk/E5d1MK0ZrDy/rU94CM2ZgEaYGHAB+e3Nocw2c4prUT2QFQch0iIoDLjtKoP5iPOqR+QrInat/kMwMz2rjUklf3II= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR17MB6130.namprd17.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(366016)(1800799024)(55112099003)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 63hBr1YbjP4Rq1G6NY7EDbEkFfTMwR3Eyqf02wYCNMw7UILwUvnbnDV/j8fb5N7OhEZvwyyv84Uboai9d8nFBYtS4L4F1QEtXuEkEEHXqn9TvACSNg+/BkTfusQFKqIHkUg37L4d9dNGdV/zI3x7azygeaAN03jfruenmCFnFQKGU9Gk96X3BfnLVPU4V2uGIdD+VGg7xKxNhtxSRCmmhEB9Mu+QTi6NlwVXdh/P10sqL4OXopfRRPsfBSE62a0R3NRGkXEYAI2TjWLEbOR9GZ7/zjvvVmYp2Y/ZvNYUuP2QEWajXO3Wfy6ZwZWh665HiECEEpDurYBK7kNirZz7r4r8XAAua1lRAnqC23QVRfQk0+xbF5uvp7nEdJTl7FClwfOcWIODlt9B7QdNQXWRJQF1vGujP+g6A6c4DSCqSmn9+nrSWHLi6IaVlnkLWRiBPyOwwKoIsJRPenfRgUoAnkv9MKD1/BBnHvkQN1nYf3fNQzWajHp8m7cPzQly9X3bX20DJBPQJG2YcwU2RTxngrQ8s8/unq6SIS6BYupe5sUcsQDMJFnXY+YJu9H7U29zPp7Pgd/7XYQgoReZVL9k8Gr9Qe5+czPHd05LlxzFoazCiIrLkuxnknedJ3cK4zlMzTWBGDq8LQkPz8+Ktf5dQdaz+ZjZ8LA29vz6Lx+FbgL+ZF/OUrvt1qT+16QPo6hmRCE64ZEXDcItjEpg/kCtqPJSwiLR1y9B5K40GedpaQrh3JLq8hPlCs/o0aXCB37/fHyuPYFcOgJuWtWjKp8hTv6wdJnjDUw2fvd2cWPEthu9xhN0QuXtxHCeNTrdNDAHEMyO978jhqc+NisF7DEb5fVD03q7YnouZhU6lB1U3r+//9UwIiCaa+JUvZcxd+hXMxLmT2qyQh1f/sofuC6j9ArDpFB2FJ8lCVOcDE8SRh2SJGjURSnfiVqk4JXt0fwIWbjpBHvm3e3veZeAkxAopiLz88APetONHdLXb5VNYNBmJn/nq6dCFAYMIojHnmz/3YYQ9iTeWEEcd9hltK0eoIo/3hPe2ZSctYAmV8J1Fi2r3tyoDgmPYkHqCAwGovttwGfKpg6UEGT5OiJHh6Jm0LnLQ/FZjKKl10pSuPsWgj8n+OG4byw2Y6nHZT/hdje/JQRbBNXx9jWPwt+2iZe3MAQqxmT9PDknrMEYAsVOeAsX24FG2CW32+SPx5A+jjft6i7XZyRQquIs0JJMqWfCDPmHJ3eTiVWSIIsz8MuxJLIjHmpgWkO4zk3BENMnEfpSENCH9D3CfPX7cfYhL3Uun/0rw3CFX6L7Qun2N++05uI4k1xv1EtpV5x8fXj23xYigPvMhRtWdjkNrFZHsilUSPgN/d7BAO2FmdarpiU+MF/BPJX5+t0Br8YaMUbUP9EHY93RAphh7fEo60TSH+rGepAolYEpgNJP4dF+gbULk8Lo93T+2ahNnAi3vSYnN7mHT7s+R7CwJeLGVPjmDZ6hSKnq5pu8OjEu+QDRRNQjIU2nGkCJE0aIqCP5zOdbQ05U0A+KvDtNz3k7e02RS3qVI/16JIaL7+op1UKJMjl0/WL/lwjMrkduI7GlnJ3lFQHmxEbOziG/UdwG1KVGEGlelvgmM9kidvlcw0XZ3ZoxraQVTNT1ixvnbnrw6/UBOXCOLzqhdZavJlEJahnY9CaVmCiAkc7P8mruuGd46Ecdvfm9byo2iLFB7JyvDG39/O/LvY8RGmH2hAUOhbRk9Zh0Uw== X-Exchange-RoutingPolicyChecked: eyRtf6AQ9tKXaHb1nQzFoU2hR8Mb1MX+SntsJXhytyk8szev5AnGVrFbEohwsU16ZXN8yL947HJCYaTeCVJOCTCFF+C/UOszdqGAiDIn/rzAf7XrLsHbKsYw/yYfEmtW41hxdBZeA2dYzDY5D7rZPP1/ce+zmjqnNqfLefjtTYju6wYetzYh6M+qWAAYqV6cFaga7SzPn0NtcAMKA9G1futo717822xFjB3fVlJrfyVExWcipeaZDnU4izXWkTqPbTnVbLREBPAPmOu4/+RUZh1ePPCzkYU+1BIrW0Fzh5NAPCvFPtx7i6HSguPyPia3yFHq4Cx4z2vp1pf3y4hK5A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: nDWTv2XPeyVcW1Fmp/gMYZGJPa0VMu1LHtMhvufiIQXLboC4aOVuDiYSGrF5cwVtpUvTxHPuqsN1jbaCTqShZtoCsWbUG1/53W3CU8U0DuGxAiO4utirFtSNbtLg9/q+fO8AeZ16YJeXrkgrhNKOOWI3kyoijueMW1sKH3N6T8t+O9EWVLxdbG6EZRTx/9DPk4O37xQWui3yUTSmu71litgn4s2MHsLyTlt6l6H0k/5l9SOTFFUzpD8gV+e0L6+Ea7VOfft+/8vO4Lkj5gjlbPFDEGArNOlPzu7QDfuO1EmS/90yDpcwUWgvyBAFp0j+XnKswRR9HbEzBF0CsBlf1jE7q/wIjfPWBOvSQEBmyMClLCdq6YXpeHu5oHo5m3bxFjobx8ybNB4GP4kxOpEaABiVN1Ew0OPlavUfh/n44LzMbkL13G3bIQBPX4Pd4yLaS0j72yeVRhyIxC4CQjhqcXSHXSQL2sa8dNwMCKie4TbFU8Fxa9iNM0kjB4gp5784vCCVO5U0eEjJpkdn5W1iN/FSY8XDtGAAE5UnoInkZ6RfIPd3tcPB9jrKoXeohfTKp6M4vn0CZTt5V+TOMEJx+Zl1FiwDtDVZK/+zDzk/QS6g5Uxm//SDSadXTrHNVxqQ X-OriginatorOrg: keysight.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9beddba-f834-408b-7f81-08dedc6cd332 X-MS-Exchange-CrossTenant-AuthSource: PH7PR17MB6130.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2026 21:15:09.3407 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 63545f27-3232-4d74-a44d-cdd457063402 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HJ3a3qeQBVzwgs2/mvYGdw6FlLmlhm9fYz6cHrVaXeX1nYuzqoIoz+GWUhZFbmwxGGA42EvLiY6QibKmX8dJeNHtN6BsutlCy5rppM4K3U8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR17MB4900 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA3MDIwOCBTYWx0ZWRfX0wqO6LI6jQCS WKEpUPWnUeuEHhhfdKM9IUCCytbEO33Bj1le5Pes5hyT+2jcoacQ80oqS5TYEw/1MV9TnbnZFmS hiDtGGqOR7YJs+3pwsiOIHJYmmgTtvMvo3TwDXXp7l2bv3ZGkPeW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA3MDIwOCBTYWx0ZWRfX8dkS7pte789e +iT/BStz3QHs1bt2iR+6/a+5QPvwlIK3iy/eLDTLJ8bR5t8ffHviU3P/HxFB2JBlfRgugBNuXH/ 4wN9/YSFJti499AHUVLQu9E3zGbrMyxIuz6K8TcY8j+rfo7gdr2hAgdG2ArHZqtLnGxGIUFMHRo wcAb5+oGGvGpCJm+7tSepRMgTvBMIjo3fjo+iHIaHxzdg+pfJL76mZ3kTYPITvKvn6rf1UVgsQc /l+xIrOLtnY92flKF6jB9TTeWuE80zbDShU8fOgaoSQ5D5/Th2HC+gTSJccyH+ZsRBEVb2LvrIl MWMz2TK4G48QqsxpnZqsYkf8QWPBC3twHFkLuyoJz0d01AXiGG0o35H5OnypsX+BVHsaP4M+zRg 1d0zmR+jnIfCZMZ+cmytMGZiSnWfGX/y39sIJMvhXZwn70M1WJSF2NRIuq3c8dFhatGeNbprsZC FjmOvJMzF/Tr1uR3nrQ== X-Proofpoint-GUID: V6A6736bTTMYXPur9cs8v0uNGWTogBfA X-Proofpoint-ORIG-GUID: V6A6736bTTMYXPur9cs8v0uNGWTogBfA X-Authority-Analysis: v=2.4 cv=HuFG3UTS c=1 sm=1 tr=0 ts=6a4d6c62 cx=c_pps a=pvbKGUK/Si0pumwNLfsG/w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=vu2TTH8h0NUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=FLoIbiw2ZNY34kqd41oa:22 a=mOSSRekXLlsqcmK058qe:22 a=F6MVbVVLAAAA:8 a=EdBruz6J0uSETTZaZQgA:9 a=6mxfPxaA-CAxv1z-Kq-J:22 X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11840 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 phishscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607070208 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 07 Jul 2026 21:15:23 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/240410 git_rev_info() calls repo.head.commit without guarding against ValueError, which gitpython raises when HEAD points to an unborn branch (e.g. a freshly-initialised layer directory with no commits). Wrap the commit-info block in try/except so metadata collection continues rather than crashing with a non-zero exit code. Signed-off-by: John Ripple --- meta/lib/oeqa/utils/metadata.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/meta/lib/oeqa/utils/metadata.py b/meta/lib/oeqa/utils/metadata.py index b320df67e0..c8df17392d 100644 --- a/meta/lib/oeqa/utils/metadata.py +++ b/meta/lib/oeqa/utils/metadata.py @@ -85,12 +85,15 @@ def git_rev_info(path): repo = Repo(path, search_parent_directories=True) except (InvalidGitRepositoryError, NoSuchPathError): return info - info['commit'] = repo.head.commit.hexsha - info['commit_count'] = repo.head.commit.count() - info['commit_time'] = repo.head.commit.committed_date + try: + info['commit'] = repo.head.commit.hexsha + info['commit_count'] = repo.head.commit.count() + info['commit_time'] = repo.head.commit.committed_date + except (ValueError, TypeError): + pass try: info['branch'] = repo.active_branch.name - except TypeError: + except (TypeError, ValueError): info['branch'] = '(nobranch)' return info