From patchwork Fri May 22 07:59:27 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jamin Lin X-Patchwork-Id: 88612 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 5FFB6CD5BB1 for ; Fri, 22 May 2026 07:59:43 +0000 (UTC) Received: from TYPPR03CU001.outbound.protection.outlook.com (TYPPR03CU001.outbound.protection.outlook.com [52.101.126.72]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.12593.1779436772187511780 for ; Fri, 22 May 2026 00:59:33 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@aspeedtech.com header.s=selector1 header.b=mQjkEo0N; spf=pass (domain: aspeedtech.com, ip: 52.101.126.72, mailfrom: jamin_lin@aspeedtech.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fqWzaWI48omNFKBcy2PZ1duKdFI6yYs8Ti0zHdjnVMavfMhXmuEHxgKMgYEx6b+IHrf4ufTOIeZwdD/RC0+SRx8HBqE/BQmWxxbCEjX75vvBMJvt3jqisdmhmO1bOvRcmIlDfisZzLZmqMLgefsh4UmwH9P8xdvGUnbT2+zqZAwkk5uMOQgvdGTRbvvnR2Dasf+8tNE3Zgr9U8Uv+zhoSL7jBGd4QhgkK3vn0lbX5LFY5CyRIjhBa5Eo4qloMC6KuBQDsvQixNPUCa7GLmNxc1NoQlK6bFMz6eueC4Z80lD0fw/CK+BwVo1+VnNQlfDooKmxMNWBtX0bF7RSfBfgLw== 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=gOJflKtXjsOb7Gt8xD6R3ZfqzVqf+e0pdRe0sKo6u2w=; b=UOr4yFIuliq5xSHv/fKm6FM2aHQ3WgiJlqcqAdTi+cO26YTk12wLnXwOHU7GWui9RxAeMZWQl0DGVnNXC5xb+hS+evXOgJpNwpvShYO47QVAa0+4jqJH0LK5yCs2xzR3O7GCyd11SuPXStad4ogbop0kS3I8ITcGjhQnm5o1IXdq9mJ1Nu/T8vmvR7q0O0rdLcK8fPOxEUzy2Z+j/M7Tfl7WbqiZxkHJuvbnDO7zzqoY378gP+BhH3P5p6Vm/H2l734kRz8T3UR7dIZQF4qr4MsuIWdIHHSBBz78Zz49Cu/hCHAxwvcmVXtZqW4Z+t2Bd17p4Q/AuyXrDAu4Jpfp6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gOJflKtXjsOb7Gt8xD6R3ZfqzVqf+e0pdRe0sKo6u2w=; b=mQjkEo0Nl1inl5Eb/K9c8QP4A7Kr5vpcd/XVQA+ZymHPAJP12YwRaXxQm6qqgDpp+fo+rv40ajrtzjQlvkOjUnH2KUJl55Fg5w4C3CDYRmoLb3XA3Ij/P6y1F42qrOJPj8eWpJ6IXdaVGtwOIakvgybRLVdZW1yny4TjPhmwrTEzXCp/e0HVlwgytCk8bGtGnhwXNjMjrvelcv4j/Ohypc0hfzNsAd+9Njz8UcXG5VuU2R4258C0CUpzV2CioUB59bPwuzM2IH8jFz9bwuTfoC1TQELMTFwQ7GZ/4yRClH4I1Wmbg8hwPDBM4XaxztEKelSHu5g7ECYwnGCHNpJZgA== Received: from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19) by SEZPR06MB6118.apcprd06.prod.outlook.com (2603:1096:101:f1::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.48.14; Fri, 22 May 2026 07:59:27 +0000 Received: from TYPPR06MB8206.apcprd06.prod.outlook.com ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com ([fe80::e659:1ead:77cb:f6d3%2]) with mapi id 15.21.0048.016; Fri, 22 May 2026 07:59:27 +0000 From: Jamin Lin To: "openembedded-core@lists.openembedded.org" , "alex.kanavin@gmail.com" , "paul@pbarker.dev" CC: Troy Lee , Jamin Lin , Vince Chang Subject: [PATCH v2 1/3] scripts/scriptutils: Convert nested git repos to standalone clones in devtool workspace Thread-Topic: [PATCH v2 1/3] scripts/scriptutils: Convert nested git repos to standalone clones in devtool workspace Thread-Index: AQHc6cDpkx1GNxcQdE66YMMPIW/zNQ== Date: Fri, 22 May 2026 07:59:27 +0000 Message-ID: <20260522075925.2381158-2-jamin_lin@aspeedtech.com> References: <20260522075925.2381158-1-jamin_lin@aspeedtech.com> In-Reply-To: <20260522075925.2381158-1-jamin_lin@aspeedtech.com> Accept-Language: zh-TW, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYPPR06MB8206:EE_|SEZPR06MB6118:EE_ x-ms-office365-filtering-correlation-id: d0b742db-ed68-400c-f417-08deb7d80c2d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700021|56012099003|18002099003|22082099003|6133799003; x-microsoft-antispam-message-info: orEXoNLubj/yRBxSHwSibQV5goEHiQbxh9QL1W3D36upf84Iz2pdS9mAu77qi2+NpFCp8JU8RTYbT9OdZVMgeOSLMPLFmrD1avY+Tf2IikTCrJWuF6brPvHZ15E/kGdYDr0SdPKKCkDBDJ5Om4a+PZQDtqdNkOL79h4G+g/u+ZIPlDAl6FHmbWsHIsiGwhHAS8+Hn0zY5SqjTVw61aoi2Lt9wY7kuQa8FBFxFRmxo/niJ0fElshN6uCkLtFiEoW+lIBj+ObujrxPbF6+wXKoYH80+Hu3Tdr1ivy8CfnQSF6JtlNqpsSoARpUGLZnyCfRal8N0bV9H94PwyobrNMVDwMlSxk+lFj4UuCdQ7AgiJjbZs5hLvsShLqyO/FsAYssQ2kyTNO77tuP0dZJEnjksiQqZKt2PNltkXYDAqA1zrbJCpWhDEpsVm8vPHOOBtaHt2wyEodNEouRmK9V2GOFIumWBjbZygvI1uEFWnEXpOwHxBHmzg3GgjzpbXXQ6Yq+dhw6eDg2KXS0SW8SJc3iLhVz2tiL5/kUBSwfsMlDzLBEyjF7Zx8V/55AeD46B35GXImWsF9sHadpOmL5tnOOfQes/xWVLzqDXpP5sq/MhyswS9pe9OXdn35HSG/N4M2bs7YHbKd1b9Z51V4tpMcZKzeLpf4XKjTTl3qBm9YM0gcJZV4aKgvv3R0C4GzWvh/J+HLIb44MFdMl93PttdYCpGh6Kvv0RdEnJ2LdIwXwSAsajQzXqQF04nY8gXjAbJCJ x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYPPR06MB8206.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700021)(56012099003)(18002099003)(22082099003)(6133799003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: ebTfAsHrF9Uwlm4vawO0WADWaENZd/9uEL0msFNkpylrDIEPcjtZVLJLygM3jYtlHWrs9E0jLwsyNWvNlqnvcncrhxDHs6ppvsFo4eaatT3iwF5ZSykHslLHpAfWfIMUsbCBraoHdue8j1FKzIExct98kmcSi2iIC87bBr5EM19xgPO4JMjB39YRpJ8q6vnRdal2YFsERV5PPobgR7DEB8lPyX6LbnG0q9/mHe8LtOX/ylv5x4aWPQQuFRqH4whuUctGT5t62dzqIE0g7hQap9onw0e6O61xtgv6ivSspZ2kFbIhow/P/tVaXWpLkup9zXOmoFV9odqfkFwD2iD4jVviYsDZdVQ7wFuflCBSPpO51xCiLJuMrfN50hHUlpIPYPDvz6q1gN0V/g+ZvxVgkdBhWl18R/0bFWVvrcSIxUIjCxK8RKbq5aQGXwYE3WRRb3smxUQQR/AikMokqhK5W4trRZ6qNX237yhL4wULwgjdxVFJS7RvXKve8OtCcFzfGtrEejL1pQj9ZntAvMK+t5qHuqpkBfXtpiq6OT1xhRIqNYU9XWWBZpWg0yhB84kKYIvOULtFpTnO8DIPhr0ox8rGloutLAv7Js8kK0hToh+HoVBrKp6W1W9nnFzUvlWupZ/5DTqQLVdoHalycvAClvQR5Iq/d/FMTIt3tyuXXUJr7BSNmzXrkYLA6+LDc6JS+wi5Qbctana3cImKUyztGgPaBD7DnTY2Ru+tEEar0xGCeP08bAVF2ewElJ995j76FvVUHBRLYglLcWsU3Z+BFKt0O0qmXPphIPfV2J7wS2+C1GyZiZP2uDELOmtnNT0nMW2xZqWK955vi8vjhVKKMw+L5E3POjY110S4n/SWSQwLz2/BIbQKcISFZyJ5I6hmfwL995bpV2hSHc6D8NtWwcw3NYLdsbQwt+Qj6PU+RlfYFV2P21iqUd3xqKpTcgUv3ACFHvtpIQ6ic++JUpUK7mgpT8RJ/vCJ+aXpG2XaprgfVSbIlfPq2uoconPLzTIH91/Q/zi5gSlqAezviFko+enUnFzdm151wY+FLH7TCF0vTvBvv2UPqdmM29vqoBOlw9K8w5kYp8A8LKIjuZFJ0CHG/ztHLZTRxzjZ4qLA1/8t87UEhhQ4BLjTvKa1m1icAPM72Ll6VDXkKfvrUApNC0yVWCOHHGLEqf2QmMB1nOBTMongGBn4ZkYaF9UN02pKUYs8Au9IlG+dlgH/cBvF7b1hoTQ9+GkKRjRAJEs7UtLZbPWtXnANdQD+REzv0hUvmFbpixaPeZB97wcpuZHLJ9t9s3qgNAzcR9wrzdKPDMF5tmph2C1pVDgB1Q+4vO5fyCVJtqBlxwhJDMNSu2KkN5TuPgglhCFDXIWKHb2FxczA7BP8/zJ7fAPakuRCoNRpauR266uwN5K90CRd9pPgap5Y7OHgNl5sXVGIu9Kj6gbo5r04u/qRw+8azL/yIALyVZx8QHVVKkNq3m6z3CgZnH7+8RHl1+J3H+dfsp+E0zVev9hPf17ywT39kwPeGK0PsmKuGMXOJ0HVTwBuOfSGISDAlgCxf17Vd1D/Bf5DBtPv3ylREDaRnsqZUA8yVMH9XtfS0z2KdC7NgK3v/wOYL6dHaCIUoZOA9Sj69xDafzR2q2xrMEa1sVztSbn7+3W7c2ySW059okv3UuYBz9Yi9uVNWWSYkCNF5epxL9y4gCQfA0VufthBGbOv7QFtHoBEWDT+oCCAP0jEYnfw4acAzA== MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: gPb4Ulh7Y+YQfBND3hbUc77j1/JGpPwsikee8zOla1JxVdvCfUx/iU+QYr3xe4xwF6JYm8NtF5C6Oj4VDfkmKvY9SKl9y82N64MVmD9qb6f1KAnO3KoG/+hc5UG6Z177qMfE9VhU1JjInYxUIe1qu/Pn9aGNWe2jH8MJ0vnzxeEJnPB8jJLrxQw9lNfS4fTWOb16pFYmOos82d27w9RANpzg7Y5HVj250NZ6YRSQNMooLvcn3YKK/+s4wkyO7IsP5lwxsVLhoji3bX981WSV8lAvTA9SVjmNh3uZSc4xEy24MLSSJRIdFinPPd8LVTk4Tuzflbi061Vi9k9VzE7tsA== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYPPR06MB8206.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0b742db-ed68-400c-f417-08deb7d80c2d X-MS-Exchange-CrossTenant-originalarrivaltime: 22 May 2026 07:59:27.7733 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43d4aa98-e35b-4575-8939-080e90d5a249 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ulsTg5rsm8z3fxBsk2DRBgBQKX8I3re4vaB7/fvcINxIy5ktxU+ARfMj/qd/ulLjfVrkku0dF0K5a0uhLoipOg6g/TSfTa7ViOXvxvzCCsw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB6118 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 ; Fri, 22 May 2026 07:59:43 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/237530 When a recipe uses multiple git SRC_URI entries with different destsuffix values (e.g. Zephyr-based recipes with separate repositories for the kernel, modules and application), do_unpack clones each source tree with 'git clone -n -s'. The -s flag uses git's shared-object mechanism: instead of copying objects locally it writes a .git/objects/info/alternates file pointing back to the bare repository under the downloads directory (DL_DIR/git2/). git_convert_standalone_clone() is called by devtool_post_unpack to make the workspace standalone: it runs 'git repack -a' to copy all objects into the local object store and then removes the alternates file. However it only processes the top-level source directory. Each nested git repo created by a separate SRC_URI entry retains its own alternates file still pointing into downloads/. Steps to reproduce: 1. devtool modify 2. bitbake -c cleanall 3. bitbake At step 2, 'bitbake -c cleanall' calls fetcher.clean() which deletes the bare repositories from downloads/git2/. The top-level workspace repo is standalone (alternates already removed by the original code), but the nested repos still hold alternates pointing to the now-deleted paths. At step 3, srctree_hash_files() runs 'git add -A .' with a custom GIT_INDEX_FILE. Git internally calls 'git status --porcelain=2' on each nested repo to check for changes; this fails with exit 128 because the nested alternates are broken: error: unable to normalize alternate object path: .../downloads/git2/github.com.zephyrproject-rtos.acpica//objects fatal: bad object HEAD fatal: 'git status --porcelain=2' failed in submodule modules/lib/acpica This halts the BitBake parse phase with a CalledProcessError and leaves the workspace in an unrecoverable state without manual intervention. Fix by extending git_convert_standalone_clone() to walk the source tree and apply the same 'git repack -a' + remove-alternates treatment to every nested git repository found, making the entire workspace fully standalone at devtool modify time. The walk uses dirs[:] = [] to stop at each git boundary so it never descends into already-converted repos. Signed-off-by: Jamin Lin --- scripts/lib/scriptutils.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/scripts/lib/scriptutils.py b/scripts/lib/scriptutils.py index 32e749dbb1..0a83470373 100644 --- a/scripts/lib/scriptutils.py +++ b/scripts/lib/scriptutils.py @@ -100,16 +100,36 @@ def load_plugins(logger, plugins, pluginpath): def git_convert_standalone_clone(repodir): - """If specified directory is a git repository, ensure it's a standalone clone""" + """ + If specified directory is a git repository, ensure it's a standalone clone. + Also converts any nested git repositories (created by multiple SRC_URI git + entries with different destsuffix values) so that none of their contents + depend on the shared downloads directory via alternates. + """ + import bb.process - if os.path.exists(os.path.join(repodir, '.git')): - alternatesfile = os.path.join(repodir, '.git', 'objects', 'info', 'alternates') + + def _convert(gitdir, workdir): + alternatesfile = os.path.join(gitdir, 'objects', 'info', 'alternates') if os.path.exists(alternatesfile): # This will have been cloned with -s, so we need to convert it so none # of the contents is shared - bb.process.run('git repack -a', cwd=repodir) + bb.process.run('git repack -a', cwd=workdir) os.remove(alternatesfile) + if os.path.exists(os.path.join(repodir, '.git')): + _convert(os.path.join(repodir, '.git'), repodir) + + # Also handle nested git repos created by multiple SRC_URI git entries + # with different destsuffix values. Each nested repo is cloned with -s + # and has its own alternates pointing to the downloads directory. + for root, dirs, files in os.walk(repodir): + if root == repodir: + continue + if '.git' in dirs: + _convert(os.path.join(root, '.git'), root) + dirs[:] = [] # don't recurse into nested repos + def _get_temp_recipe_dir(d): # This is a little bit hacky but we need to find a place where we can put # the recipe so that bitbake can find it. We're going to delete it at the From patchwork Fri May 22 07:59:28 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jamin Lin X-Patchwork-Id: 88613 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 83F47CD4F3D for ; Fri, 22 May 2026 07:59:43 +0000 (UTC) Received: from TYPPR03CU001.outbound.protection.outlook.com (TYPPR03CU001.outbound.protection.outlook.com [52.101.126.72]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.12593.1779436772187511780 for ; Fri, 22 May 2026 00:59:34 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@aspeedtech.com header.s=selector1 header.b=mwM9MZ6g; spf=pass (domain: aspeedtech.com, ip: 52.101.126.72, mailfrom: jamin_lin@aspeedtech.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ptBBzPpufzwDpmrWnc2lFXT35PejvTY80cKC5+pj0UHTjuz8SkZUpSv0kj7oIWJWLWl+QTGLm9IMQYm9DZZy42CA2KasDkLlE2VBtvo5/El/+IqfesIzu6UZ5dFfSi5SGtqbaGdtxoftqG3KBu8HzzoGI3yZqNgm8iZZJzbg2LO+2Mq/0eZL5GlzFYuuFYM90F4qPzq6stMoCapjTyIpt+bY0wgqif2U7Am8k4UGIpZQ/RgBOtNWUmFFSc0pezUeLxwMremni7IzcBIgGOST/y0tzPaqxvbh2ucmx2KP5GRIsNePM9b2jRcZccSdGo4YkdXszphJjl73zQzDibfp/w== 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=NvdgtATvB7gSTL6MFIh/e5TsWd4GGlhJ6rbdqOWTNL0=; b=I1TrtLLVxW/e1qSi+eUGihA6K6TkKjla0qOvkqSOfuRZM+yslrykVwiBoJtPJqgFg1QilrXv7pqXoKEMFjm5XFdb35F2JOVyIB4Y9QKp6g06ZX4ChZYGyeVtPwcVs/NNZwhGzf25Am8MLEuOkrhB1LsZfqpjkVvtlp57a03aDSa31j4q3KZXzIcTCwcte3VuWuWJKmE0xCBCGwjQZV8NOtVZKh3ZyNn4dIdr2zJpd22kOY69f8+iXe0fMDqhVrS4PW+034xXuruH6ndxW/vFoj7UrskSrfIQYg82lajxKCzr/2HAqXFMfCaBcg+ZvpUn6iGN8to6m7IfZqtEFFsUTw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NvdgtATvB7gSTL6MFIh/e5TsWd4GGlhJ6rbdqOWTNL0=; b=mwM9MZ6gYox0keCnU/aKcAYPHIav8dhfgqGCFcC1SWcfBLmhDMEWB1W1+wf6VACkGn8J6rxsgfic4QVopHe7x0Qo0GRZc0tmi+JAh5ikBbwTQZQNYNILThEz79ZgpoDRBTKy3QfxfUvWf9faFhn6T2NDpj1ckidbs2V/CGb7VLARPn5Rsm/eY7A2w2vtU1apCkaXifDMpqHeVlzIJIZYf/biYX97/6yL8cCPB9dlbN/+uaKrCDRFhMi+LbR//2+tSR0nsdPXhYsx68/Ql4i2162WVyxzuWFtjb/fETPeoIacm+zBji67qdwyEvgKZ6vE2o1nuPLP4DmD/7Tbf3LXKA== Received: from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19) by SEZPR06MB6118.apcprd06.prod.outlook.com (2603:1096:101:f1::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.48.14; Fri, 22 May 2026 07:59:28 +0000 Received: from TYPPR06MB8206.apcprd06.prod.outlook.com ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com ([fe80::e659:1ead:77cb:f6d3%2]) with mapi id 15.21.0048.016; Fri, 22 May 2026 07:59:28 +0000 From: Jamin Lin To: "openembedded-core@lists.openembedded.org" , "alex.kanavin@gmail.com" , "paul@pbarker.dev" CC: Troy Lee , Jamin Lin , Vince Chang Subject: [PATCH v2 2/3] meta-selftest: Add devtool-test-multi-destsuffix recipe Thread-Topic: [PATCH v2 2/3] meta-selftest: Add devtool-test-multi-destsuffix recipe Thread-Index: AQHc6cDqIND07FRUsU+doLsKY1Ec8Q== Date: Fri, 22 May 2026 07:59:28 +0000 Message-ID: <20260522075925.2381158-3-jamin_lin@aspeedtech.com> References: <20260522075925.2381158-1-jamin_lin@aspeedtech.com> In-Reply-To: <20260522075925.2381158-1-jamin_lin@aspeedtech.com> Accept-Language: zh-TW, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYPPR06MB8206:EE_|SEZPR06MB6118:EE_ x-ms-office365-filtering-correlation-id: 5740002e-1132-47d6-10d4-08deb7d80cd2 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700021|56012099003|18002099003|22082099003|3023799007; x-microsoft-antispam-message-info: NQmKa9WvO+tXEsiS3ti7wM/c4NVzgHqdTzuYGsAzJZ5kCFaINCZ+kiRgK3BUUXPMmmaJPa2+TDXSX4uNH4o/dqBDPioTiCJivUM24xRnr4FgcfVnLT1lJViD77/vFlIzzmptzRkJKxm3xuS6UGBcFtYGyvuB0LJmsl3xcykZu+c6OKXTC8an4vblpVFXZDCMoaqdf92z4YKsbuj5mzs6bzZkUr09XvPTpBFFmiKk298Em17fCGhD37NTaPiGUiY6DQnNGCav3xc2SGheUQNCWm2uOILl9+98iAMG1icaiDcTQold0V4CLCn9FjlyuFFHbATOYUfpyAnR2C4rrc2VdBVh6Y6k8nD2/yjhqubHLNcpobDiTTAzZMe4NzmGwVS1c+vGvHx/aQIy1v6jRljSMb69cLmZ2maA//P/l2/Uc+LAT26sTkFPnwylPODmn75E78AWZxl8Ft9YGZTTlEt0QHiefD+9GbsIhH+2ixvJ46AKcZ1G5/hI2nBmOtFlyxPf64XkOgXE//aI2EyWkOr2YH3G/51CEuiJRRuXtaFqkq1YN0Q63ZCNZsTkMM+NwiUvwkI7mDPUHmUyavWSiP7meXqHOq0fkqcr+8PsFGfBopOy6l8MmGHjYQP0qwy0qenSUjJsa1hc9jVtg+O0CrArZ0wZ11McIUoAJabjSHyDLSX0FqYUc6xIKynW7mbp8yOG2FaDgqhhHveDjXVdGbVx5ngaap2zwTFG4FHhZp6dYyMD0O1xU0SdaAKn+FS4588i x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYPPR06MB8206.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700021)(56012099003)(18002099003)(22082099003)(3023799007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: CmZgJywWLUxv9ayPQ+KUkvA/q//NI1JhulxUqka70bcROk8e/AakuEnhUshvcjzOm5ZpQVvriIIJAYJtTCt6Mddimn3SAmws6Z6QCi8Vx79ncCVwEqg177jwvXpjQDYawUzEwGl02gb5ss9yr42eaeO3QSCqBqBIPMMsFCNRSBiN2x6gNtRlvJq+ZZJVfVLP6gdqbBm8sEBfSCi6dJmRdvVpVs268UGR2ULLPh4Q8EkPikml4UPVHA0Ov5O8EkBZ3TpAw/FFd+E7CsVoJwdJqFO9iq8jhYVVOY8gJvifj/JHINI2Wed47b4eRmSOe2TnNfOim17bCsI9UPDQlY6G4EWjYTDwGO2NeVyXibbXhWdtNvbpk5lg8576GePNLTASlE+zvs1csg+BJUwQZ/DkHUSkv777+Cod1U+sHYNw7vpXnKS804tanG4g7ZE6FoEOhRKOCP3FJLtCsEZy0WzWpJ2yEpXJNnMTAfeRxvfTKX4zo/7SbO5jllVK2g+Bh+d41BeGO06biaQiJGsZcOv66q/g7w177IJvZXGJU6Seaqzbi6sP86cz6vC5o+F0sT/gRV/+OGPwwh91Tsf8mnLgV9eR8U/tGY/IINFFJcP00bq/jRL5moOAXaEgwBtY1ANWVP5SUUKSh7stLSxcs1yaNcPRF4dRChZRPEyHkXdgC4llpL4qBCCX+xH/8lLRCXJp2z4FTSp/M6lB8l4exmA5bXoIWE0QJJSMlgEnyT9ZcoNaQbZT7qIO7jS0Hm4+yxKbWQBiIxwr39t8O1C5BRgpofU9NZm2jpqdRha1l3rQnISA866Uv1ume8XTWU4Jq4Gij55OUFcrCE0NxbPsMKlSw//1OGA5H+8yQ03+X0GJ6dEo2ZqWR2eEGDJ/gRBLQe3RNt1In9C1eKQYfijtn/7l0yfdyDiPg1rEif9ebhy8SeL8z73ndIceEz3r6pql2vxwpeclWHtP6/XMrlMcsbC/vnJhitAlmZPgz1vbRez9BwIwRatdGquAnS+/I/XWPRRxmTXs2/bVnv4IIZr27G1rbNmxVbq6Ei0s1+L0br2fOn6/0rTPo9tlhTXBhF+/MIS6QxvZjatnWJ9cVX1P9JhrTN0F8Q+5MP8i3/L0708b4BRDSQoEh+lo7aDFhtUhUjiAvmZbuPajaJih48KdWA1OYBYFEo3zaBeHzeElG98wTZA1RiL4j1Tfc74P+ZEFakY3XgAS6+NCEZwNXsrvhSVXolKROCKJ/QevPmrKrGsHdggYcuRYjqvvbaEsLvMfpOFGPAxdNwBkQSEhbCXMZJjy2feDUVQNUraFR/mzY84P0qc/W95bVCNmP1rOJ9kuehEd0r3F1ybeqg5wxvIML0X20WSC1ThYchutCpgHVdYUiv08mjvBjJVZYgwyrKIkPsggiBKS9LEFf4mqqqJaXDZBH8fZywADc2hJcm1medvtsfF9flfsNC2kuBXCtKU68dWmzYfTAtLkwKUTs4xmvAerl9OTjof3HXJExGMHKNmjsQlnOgxuCaGpYMO0AzcaAfjOh83eB22GDZxzokGdCDn3mV3XvFza3jgqv6yqVtnsU7aPSx0PNAgFbEqfPykjCQ2kr59A/5LgZrHexy+d8ZxaM+MX/WtA2tJw0tPO7WjWoc9atqXwiGhgTTg7JUahlIywLAxoOTQPDwmGEx4ZWWMq7+yPy+uRXGOkqpRHh2HvX+DQs9qS6XB+H0WreEWMr6iAxUuoZicRfn0MbYnlG2kvPQ== MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: WZtcJS3olR22xTfCfxcOXmVUpy9U63jItezQFIinOqVsq1EUl6VPfu5oyNw0LjeZygF9wnGNhdCQwESRxeacZjVl3330ToHBC5dVxp+RiR0mz7VEruBBpFhA6n0/1fZy9+Rivy1V1moaUBHygN1drlTf2tAmircpaYqXBors9/CX/kPrPkr+IqG18b5qnH9OB5WkIJ+wHUmm3pUGcy4Qdzf1NVjTfDIXYKtpuwTkF0I6qdeNgtAubSPqBjscUfRNXTCSshF0EX9R+7Y1EbDU9iFrUbjr/WhQJoOl82xGKd/26Ij7mOWdB/mdB8CXSYI4L/VTdl5c4//rbAoitdpbyA== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYPPR06MB8206.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5740002e-1132-47d6-10d4-08deb7d80cd2 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 May 2026 07:59:28.8699 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43d4aa98-e35b-4575-8939-080e90d5a249 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: wg/nJDvlKIu2S8XgQqLrblHbUezAsRnpHo+/0oCmY2QbDqSKqZQK4Yw5G+Kpixzw+uHNl5dZF5mHrjvEPxxMQpjaCSlmqLxn6VWAvX/hcj4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB6118 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 ; Fri, 22 May 2026 07:59:43 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/237531 Add a test recipe with six git SRC_URI entries using nested destsuffix values. This recipe is used by the devtool selftest to verify that devtool modify correctly converts all nested git repos to standalone clones. Signed-off-by: Jamin Lin --- .../devtool-test-multi-destsuffix_git.bb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 meta-selftest/recipes-test/devtool/devtool-test-multi-destsuffix_git.bb diff --git a/meta-selftest/recipes-test/devtool/devtool-test-multi-destsuffix_git.bb b/meta-selftest/recipes-test/devtool/devtool-test-multi-destsuffix_git.bb new file mode 100644 index 0000000000..0702b13f3a --- /dev/null +++ b/meta-selftest/recipes-test/devtool/devtool-test-multi-destsuffix_git.bb @@ -0,0 +1,29 @@ +SUMMARY = "Test recipe for multiple git SRC_URI entries with nested destsuffix values" +LICENSE = "CLOSED" + +# Six git entries all nested inside S (${UNPACKDIR}). This exercises the +# devtool code path that must convert every nested git repo to a standalone +# clone: the initial fetch uses a shared clone whose alternates point into +# downloads/git2/; git repack copies those objects locally so the workspace +# survives 'bitbake -c cleanall'. +SRC_URI = "git://git.yoctoproject.org/dbus-wait;nobranch=1;protocol=https;name=level1_a;destsuffix=level1_a \ + git://git.yoctoproject.org/dbus-wait;nobranch=1;protocol=https;name=level1_b;destsuffix=level1_b \ + git://git.yoctoproject.org/dbus-wait;nobranch=1;protocol=https;name=level2_a;destsuffix=level1/level2_a \ + git://git.yoctoproject.org/dbus-wait;nobranch=1;protocol=https;name=level2_b;destsuffix=level1/level2_b \ + git://git.yoctoproject.org/dbus-wait;nobranch=1;protocol=https;name=level3_a;destsuffix=level1/level2/level3_a \ + git://git.yoctoproject.org/dbus-wait;nobranch=1;protocol=https;name=level3_b;destsuffix=level1/level2/level3_b \ +" + +SRCREV_level1_a = "64bc7c8fae61ded0c4e555aa775911f84c56e438" +SRCREV_level1_b = "64bc7c8fae61ded0c4e555aa775911f84c56e438" +SRCREV_level2_a = "64bc7c8fae61ded0c4e555aa775911f84c56e438" +SRCREV_level2_b = "64bc7c8fae61ded0c4e555aa775911f84c56e438" +SRCREV_level3_a = "64bc7c8fae61ded0c4e555aa775911f84c56e438" +SRCREV_level3_b = "64bc7c8fae61ded0c4e555aa775911f84c56e438" +SRCREV_FORMAT = "level1_a_level1_b_level2_a_level2_b_level3_a_level3_b" + +S = "${UNPACKDIR}" + +do_configure[noexec] = "1" +do_compile[noexec] = "1" +do_install[noexec] = "1" From patchwork Fri May 22 07:59:29 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jamin Lin X-Patchwork-Id: 88611 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 67343CD5BB3 for ; Fri, 22 May 2026 07:59:43 +0000 (UTC) Received: from TYPPR03CU001.outbound.protection.outlook.com (TYPPR03CU001.outbound.protection.outlook.com [52.101.126.72]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.12593.1779436772187511780 for ; Fri, 22 May 2026 00:59:35 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@aspeedtech.com header.s=selector1 header.b=EKdAa/O0; spf=pass (domain: aspeedtech.com, ip: 52.101.126.72, mailfrom: jamin_lin@aspeedtech.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ec6UhuQZjFMYe4hbOkxmmzBDpHRYx623lUfnOrGEVWC+SVE3+VGKgXqrZdYMCvNU+wh7yWgVTtLrMpRBRgHdSgvMSCz82hXF2w4YP5IpfNRq+FOg9UrLbJ7PUYGn1LUhrYsXIm6v3bNqcRwLHh57zj3VS7tuAn8t1mu8f5+rP9dHOhRU2KPbmbQsju6bFBDvY1L/D3+9nY2HuwfWBvClczTMka++1unN/hWln7UYIL9o9AIS4Y15VAQT91qjr8NWnuKAgxPbsZtOTE+BrOz6xoYPJlY13ysBx9RYYsY4S1pNziFsckLNG9dz/9lZyQgq4tFFH+hJZJhf6Thsubdkvg== 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=9eZIfMQAYR79ukpakEmlja+hrK05t871HiB3Rk//4Qg=; b=hf5HJIoREkKJDKym10UH278NIF2hUuVT3pEEOcx/HJ4dWA+LJh9EPTMXjG0zaFxdwnR6cERlY3oB8yn/lViBYZQpDY0ag4cHKVpur4MJrqmPwBkMP+M32C7KotScmlr44yhfNBDbuKunBS0TIz+I/DaJJGyYhh94/iUOV0Mv9ebwYQIYcMKHrz6bH8ICIuHy2LruyZMeWKjRG2bRHXvlDHgjh+R7/ke7I+N0G5DjG399nvSnkdS9yjjh1bA1sZCvSdcA4/gY1nRxG2lyDZeWzcQQpYbK4jbx1NV5kcDGRkgCPtBKAkAsF+0B3Km2x6+7A89FC6cpkZfhbaWVx0YO3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9eZIfMQAYR79ukpakEmlja+hrK05t871HiB3Rk//4Qg=; b=EKdAa/O0ATlh6nnk3AoC9cRZLOn23KowK2HDpsCmvMdV0LwI/RkwY1LK/se9hoaEoAxI2D4csvcg46MpvUwD5XY/fC5xwLMZYn4JaZdjkV68gevZC9SRxt5I48zu/4j7yacYlH+Qxrvxotq8NDraldb3vnWXngvIbvQqn7GslrTIVq+o+ozcP0KbGPoODNiUePG/7IvcUcRrl/jva0+KxT5kaLG5rXhLGcI4aEbEYijqLzt+CAtKMcC+2yGfFXlTI8DxEU4ictjGmCXzH6BrwzCbJ9iw/Bb7yG3hrhe2Cn3gEIHIYMdGC0f0p/H7O11qDWLbytggqUOjZjus/31atw== Received: from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19) by SEZPR06MB6118.apcprd06.prod.outlook.com (2603:1096:101:f1::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.48.14; Fri, 22 May 2026 07:59:29 +0000 Received: from TYPPR06MB8206.apcprd06.prod.outlook.com ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com ([fe80::e659:1ead:77cb:f6d3%2]) with mapi id 15.21.0048.016; Fri, 22 May 2026 07:59:29 +0000 From: Jamin Lin To: "openembedded-core@lists.openembedded.org" , "alex.kanavin@gmail.com" , "paul@pbarker.dev" CC: Troy Lee , Jamin Lin , Vince Chang Subject: [PATCH v2 3/3] oeqa/selftest/devtool: Add test for multiple nested git destsuffix repos Thread-Topic: [PATCH v2 3/3] oeqa/selftest/devtool: Add test for multiple nested git destsuffix repos Thread-Index: AQHc6cDqzve80/ZqSEWNFneBJ6uB/Q== Date: Fri, 22 May 2026 07:59:29 +0000 Message-ID: <20260522075925.2381158-4-jamin_lin@aspeedtech.com> References: <20260522075925.2381158-1-jamin_lin@aspeedtech.com> In-Reply-To: <20260522075925.2381158-1-jamin_lin@aspeedtech.com> Accept-Language: zh-TW, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYPPR06MB8206:EE_|SEZPR06MB6118:EE_ x-ms-office365-filtering-correlation-id: b573a62a-f4ff-4a5a-c5e3-08deb7d80d6c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700021|56012099003|18002099003|22082099003|3023799007; x-microsoft-antispam-message-info: CptfL4RghauII0oOyOP495uRUU1xwcw84BvcKX6hvjJiwtlqSfxzbos3b489HYLX95ChMqHkM1a9wDFqyvs3mWXlDv+nuubdsyaCsy15LL0D2Y6uOubwi4j+ef/bSiyCGX8kx69V5GA5d7Z5+JKAx4tmO30VV06sBvSy+zuwAfXjKfDgubEFo6ffN80HGPsiNk8qgT4EkBRMrarsvRL89hKt0wjxc90y4W6cJ+W43+wIr03Do/2Osy+cKoBAq9BW4CJujVn1YIOmdYDBjHiyd6hMsf0e7Usj8lWhSCDTfH90LSpg4jFQpHHI2tBFjgKXuY6tZGEa/zQpGJiRXVwZtZ+TcLPbEw0/2p8N3TauisUQof9+Xc0nnQZcjAyog1Nvjv55PU0aJQMTAePQsfYaHzk5IU4LDExAwfIfX5MHtlWQ/3XtP5f0iAqmxA82Kr1kG9qwfP+sJASDhuyTJ8581WSid7VVsfuwYFdlHanOshS/vwYQLYWCLzHNI8Py55N7tx9ZAmTjd2/XJSkQ6w2xzXRmzNn4SCdZk9F65APYhkuiM7zzx+h2XdUN7Jo0O27yi9rWB8ap0B2Myo4kYUliCIN5fXRboHS8/i97g0x3MfU9hugdG36V0w1iChHQOr3V3IYwHow+G3FP1D5/tejuYuK6i/AgfSuONv5TdKtREKz9mylngtU252UxB8Ce9Jbp35l3seLhrXyxUBds82RBmC5dtb0Irrr0Dt1Maeuf7P0+gURVCcY32Y1axVSLPWah x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYPPR06MB8206.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700021)(56012099003)(18002099003)(22082099003)(3023799007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: VMkmXDA30Z8wFiCDoSlA6Eq6LU05e7YVuSJen6TRBKsgGfebU1EzAShx+TuAojTpMHqsFHYZ1YjQBHYZ22bjllbXGsEq5sr4f0QQ9OAdx3rmNON21ZEW9sGR9WL++DPExbouvK9W3YZUj66a+Nwfw8jtqttIB7ZaeprJ/7WArpkWRFuSTmy04AR9e2GQSxiDr+M0iuJpNAnmhE47HhiutPiAovg461MyzhK8BEnWkCKgNgeyzY6oEkkYF4b7dUZdg7ojPWFnHogUAkFk6SEIAhTQtSwaiAanL/tUHJlzwBUonIuhWxRR7Tu+0Px3QtQ+7EH5FnSYi4rLyI5KYYTV4LXdtR9CXDUTAhx+CFtfcevZrQ15VtNFo+TERkB3zcKXoCHYFJ91Tt93zkFUUy70mcQnKfbo1y9Hy/OHlliCbOdEjvBZ2USW5TpJ6TJoMWwT4WCDCrL8RTxf4MJ8W3VGNJO2hffi3B3JPTL4h0vatizyyrV0oIE8n80HgMs4yPIdcI+HxtPmZDLz+XVfyky/eLPJWXPDNWC13Iv5ZeFco+nobtaAuIsjpLp67aOSK6Om8IrLMm6bDdE89iP/M/koPNHGsfTYipuuz+pBW8TgkVPbfsKC4qRyyr+NqqvPHEaWocpYx5n6OlY7/pW7jmS4eSX2V+rjFO0TJzddF80/fMPbJH4z9+3FSMUE17ukFAPCwqe6bF7k1D7EAYUgzR9OktoNRVio7X0h8V3wKlpNWsQhSuoJfiU/Qi+7TwlUUT55AnQUxCtttrLfF3SfB77gD74eM/mHyQlLLyAeGXgWdaUwwR9mQfyJj6HT8c+d/eeI4Qpv8ymAsXMUjQwzFwCfBc1canrnlAF3fmet/9ggCvSWgCLmgAUwioNkF5NQjk0+b5VtsXvVBtNOZrAPX5muGaq35BgN9kO7urVmaXv3V7LT09gZ13hXY3mXpHBPuhl8zBAsS4hPG9doM7GhkOBYVHJJ3d7jeWOxKGquwzPuD1T065WeHbT4oXan7dDjRIdiKwI6Fejb7p5SC8QFEVP1wf01GJQIRRz7VaXGDDmzwzl6mOmAjNR6bPNsM0GIz9or5pUSmvGT0Uc0ubiO+EbdqVpsCZL0hRoOH7pME4zpWiyfwDtmD4m3vcLRK55isPSVqaCtDkFnhfPxVbuvSgwtNXJ2zfFJvfhbyz9RNu+h5vmSuAzTNs94NOqC/POdCjiw7iB88z6v1nrg1MfY5o+ZwXJL+DCCS9jjzXJzV8uUY3yD+w2gj4yo44QgRHBfwqlUL/0mAQ+Y3+r6WAH0NATGAGrT3iVi4RuFlI9ffJpKLtNkA0F2KghoQaNfT3gAGL0qiEJvicXxGO0jj+4JaZXUV1H5d+RJ8Yf2Gtm6xi49Gq8FsFPbDi1qx0emTaZYfZKPyoUxqU7ITvVFCjS2dQyfpuIv/8C5PbghIvhZjIJdtoSk/GUe3C8fXJpc26MZFfbTO0bN3irPV5rs+Qn9stxfXmitMHcFyPSNXPvcCx8wvjlQ2/xSe2quJsSsCkjU9IKy0TK6Vzi6ZtKTzoRyVWApcLlrY2JYpRSUAuCXos34dWm3tUI4ehiSnanrmBDN+XuPWqIw1sKgogotcNENC++hxoy05q5uOylZOllaMA73/vvjBybgG3+GPgpUq+qc1orSIWyfeU8o2mQ49Ggwp6l6b08V9t3fWMSm71s+2z+eJtjsk2p4RqV6SxWoC0VN9wHSBUDAf0Fn4Emf7YFJ9FHilQ== MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: XvJc5e88ahZduJfH4v9WvbI+pjZZiTr/aC2DQi6g+KxlYojXQjorAaGpYxVbRA4Ib8zS5MkbCq9M/vEMBN1kNQuOaY9lirKac8Wv3na+LCEGP8ae8zWJYjvwq0YQsw7MSSSfOo2464tPjS4zlJk3q3QBM7khHZ0L+UjOfzMMNfr5ZTJut9XBsF85d/E2GaIfGxchxMv0KVkXpQddDa/nFGcl5zMZjr7Rx7yIl2HU8npwcHIF1D2IelxiR+IfLsj2jsS5abzRJxmUAVM7L/xJ0531kmKySk3B3oex/swu5+MHy/IBPgPyNjfQuWZeGddC8vwZ+9jwdZOFONT6ONGLmw== X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYPPR06MB8206.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b573a62a-f4ff-4a5a-c5e3-08deb7d80d6c X-MS-Exchange-CrossTenant-originalarrivaltime: 22 May 2026 07:59:29.8362 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43d4aa98-e35b-4575-8939-080e90d5a249 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ClwcvV+/TnSxHPB14aNAc3Cks297qeKrAIAJYlBPrhUch2Pp9aQQocslVDNj5DtnXnWbo6GkAMJKz4vOHAYGpqRsP6y+6M4Ls86Wux9lvXo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB6118 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 ; Fri, 22 May 2026 07:59:43 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/237532 Add test_devtool_modify_multi_git_destsuffix_standalone to verify that devtool modify converts all nested git repos (from multiple SRC_URI git entries with different destsuffix values) to standalone clones so the workspace survives 'bitbake -c cleanall'. Signed-off-by: Jamin Lin --- meta/lib/oeqa/selftest/cases/devtool.py | 67 +++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py index 5ed69aee1b..b927bbf8f0 100644 --- a/meta/lib/oeqa/selftest/cases/devtool.py +++ b/meta/lib/oeqa/selftest/cases/devtool.py @@ -1182,6 +1182,73 @@ class DevtoolModifyTests(DevtoolBase): self.assertExists(os.path.join(source_repo_gitsm_gitmodules, 'bitbake'), 'Submodule not found') self.assertExists(os.path.join(source_repo_gitsm_gitmodules, 'bitbake-gitsm-test1'), 'Submodule not found') + def test_devtool_modify_multi_git_destsuffix_standalone(self): + """ + Verify that devtool modify converts all nested git repos (from multiple + SRC_URI git entries with different destsuffix values) to standalone clones + so that 'bitbake -c cleanall' does not break the devtool workspace. + + The recipe (devtool-test-multi-destsuffix) has six git SRC_URI entries + with S = ${UNPACKDIR}. All repos are nested inside S: + destsuffix=level1_a -> srcdir/level1_a/ + destsuffix=level1_b -> srcdir/level1_b/ + destsuffix=level1/level2_a -> srcdir/level1/level2_a/ + destsuffix=level1/level2_b -> srcdir/level1/level2_b/ + destsuffix=level1/level2/level3_a -> srcdir/level1/level2/level3_a/ + destsuffix=level1/level2/level3_b -> srcdir/level1/level2/level3_b/ + + This mirrors real-world recipes that embed multiple module repos + as nested subdirectories of the primary source tree. + """ + testrecipe = 'devtool-test-multi-destsuffix' + src_uri = get_bb_var('SRC_URI', testrecipe) + self.assertIn('git://', src_uri, + 'This test expects %s to have git SRC_URI entries' % testrecipe) + self.track_for_cleanup(self.workspacedir) + self.add_command_to_tearDown('devtool reset %s' % testrecipe) + self.add_command_to_tearDown('bitbake-layers remove-layer */workspace') + result = runCmd('devtool modify %s' % testrecipe) + self.assertEqual(result.status, 0, + 'devtool modify failed: %s' % result.output) + srcdir = os.path.join(self.workspacedir, 'sources', testrecipe) + nested_paths = [ + ('level1_a', 'level1_a'), + ('level1_b', 'level1_b'), + ('level2_a', 'level1/level2_a'), + ('level2_b', 'level1/level2_b'), + ('level3_a', 'level1/level2/level3_a'), + ('level3_b', 'level1/level2/level3_b'), + ] + + for name, subpath in nested_paths: + repo_path = os.path.join(srcdir, subpath) + self.assertExists(os.path.join(repo_path, '.git'), + 'Repo %s (.git) not found in devtool workspace' % name) + + # Key assertion: no nested repo should retain a git alternates file. + # devtool modify must repack objects locally so the workspace does not + # depend on the downloads cache, which 'bitbake -c cleanall' will delete. + for name, subpath in nested_paths: + repo_path = os.path.join(srcdir, subpath) + alternates_file = os.path.join(repo_path, '.git', 'objects', + 'info', 'alternates') + self.assertNotExists(alternates_file, + 'Repo %s still has a git alternates file after ' + 'devtool modify' % name) + + # Verify the workspace survives cleanall, which removes the shared + # objects in the downloads cache that alternates would reference. + bitbake('%s -c cleanall' % testrecipe) + + # After cleanall all repos must still be usable. + # A broken alternates file would cause git operations to fail. + for name, subpath in nested_paths: + repo_path = os.path.join(srcdir, subpath) + result = runCmd('git status', cwd=repo_path) + self.assertEqual(result.status, 0, + 'git status failed in repo %s after cleanall: %s' + % (name, result.output)) + class DevtoolUpdateTests(DevtoolBase): def test_devtool_update_recipe(self):