From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7085973421677346816 X-Received: by 2002:a5d:6d8a:0:b0:204:8aa:309f with SMTP id l10-20020a5d6d8a000000b0020408aa309fmr1124041wrs.38.1649923423467; Thu, 14 Apr 2022 01:03:43 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:600c:3b1f:b0:38e:bc4d:7a68 with SMTP id m31-20020a05600c3b1f00b0038ebc4d7a68ls2139281wms.2.gmail; Thu, 14 Apr 2022 01:03:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy2HkkV6HwEwA1bX/dWxuHDIX0p1fvihjNhiFAdsWlJWeQSBdH6wkVGY88mic28hxPQyC33 X-Received: by 2002:a7b:cc0d:0:b0:381:220e:a3a0 with SMTP id f13-20020a7bcc0d000000b00381220ea3a0mr1966091wmh.59.1649923422490; Thu, 14 Apr 2022 01:03:42 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1649923422; cv=pass; d=google.com; s=arc-20160816; b=ZqCAx1ga/AAT/wa+8jCH9/hLcG4sX21RgiBougEwWfVxwOpoWoA9Gio+CN5FUnBlrJ 3bGy4ahKTr1WY4Lku2Gy37LiXdzk906h8p3KA90kL3C1KUoua1SwzyuWQlBH02SN4l/r rDZepocOp70MkIWY4OHA9k97/SEEaY2jK2pfh5BmklebSM+lWHY4dRCMrDyNQkZOLL9v kJnyV4Uy8H38T/O9qeVtZlPiH313+N13tgj8dpiwZY8oVqhSD6c9DAg75kMMGeWbN/co +BjkKujx0D8o2k70OACp1w2LcRN3kJ/bBgkv31n3zHxZQSCk7mqm7zc1eUZHS59BWS7N q5kg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:content-transfer-encoding:document_confidentiality :msip_labels:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=aDNT0xdFbaR4+QfZq4gNj4RGAuAXwoMeYHtbflHXw+U=; b=0uBtYd1PXNBU3TRshgYmOLvAqG51/Y3LflZVCJSHv6UQTRXj/k87/FJmCurG903yoe n/UwIyjgTlEKbzZCMxtiFrwQJbs5aTk4HBcP5hcpBoj6s86yPOi650cMgzOaxMQ8rwoo 3I0NDnfeAa1AVWv/2NzxJP9p9UC2xgt3BOiPKvjqAHUtLb8ZgHOXysR5YEWx4mg3nCSY Q6UowI8egtZC4nSFjxvGL1pbvbQZn+D3J5V6nxYdP5qPkUeI4iJaBet5iCbO+WvAgWEE cRtAeT4Xmtu0LOHxiylBweQq2ptzNuPo5onWKEx6mWWhkQCzI4EptjycLulZUeyCwtiT pXxA== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b="Z8t8he/i"; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of adriaan.schmidt@siemens.com designates 2a01:111:f400:7d00::630 as permitted sender) smtp.mailfrom=adriaan.schmidt@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20630.outbound.protection.outlook.com. [2a01:111:f400:7d00::630]) by gmr-mx.google.com with ESMTPS id l20-20020a05600c1d1400b0038e5649eef4si76066wms.2.2022.04.14.01.03.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Apr 2022 01:03:42 -0700 (PDT) Received-SPF: pass (google.com: domain of adriaan.schmidt@siemens.com designates 2a01:111:f400:7d00::630 as permitted sender) client-ip=2a01:111:f400:7d00::630; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b="Z8t8he/i"; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of adriaan.schmidt@siemens.com designates 2a01:111:f400:7d00::630 as permitted sender) smtp.mailfrom=adriaan.schmidt@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iPgqjZW0KBRD0aVzv74xqRtBUnaF8Ko6PCW91YhK//bzjP1c9a2OoDsvlHSngigwrjSdzMMLnmiUwNOLmxAM2aJiM1+LCh35ryIh1qUVcK8e/FKnK/Yve2V3vi/wCyJSEHZxb1rB2OVFndxqEhoP8FKklylDRa84ghKOh/xkKAjz+8P3Wkyf8v5rGTZfvQWjkDP6Ii3PC166o6i+wOK98Zq/fJe689adi0Rcq44VZ38VumGPMj0ljd1yGyt1TzUdOLnypUBeEmmXItD7HBvImpU/Js9UYpH9PqV0Mo89zAdf1nnursX8MY9ZUizkGcRaPh2zX5qY2CY7uEf2TTyQnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=aDNT0xdFbaR4+QfZq4gNj4RGAuAXwoMeYHtbflHXw+U=; b=BF4GT7Fz9DNjOlBFlRC2CRz1lD9rZkzvB/1JXnUxTyvCvNFb5ATBZdt0gWvu0go4zA/l7ig/fB8Csenb7q6qyRyO0HfDc/LWqQLzcfX5x38tTXHrq7/iraw6dZ/TNh8odky7vbthrncb4l3N4Sxe4bmOm7QcErRWdUYkWE0GEJavGzcc+6Lr9s4pkkRqsSdjRXRGSFxnk5ekyjvIXN2yXGOZ+J41guX84SSok5rqfAk97kuQw4bI+pdBUF76WzicNl9ubACL+3jbLcJ0NVhAUUxJOnTkNS1x7Vsl5OD6Ow8GYHZPcJMb2WsjwOme8KnGVU08UVsuuSf+p8gKv1De0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com; dkim=pass header.d=siemens.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=siemens.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aDNT0xdFbaR4+QfZq4gNj4RGAuAXwoMeYHtbflHXw+U=; b=Z8t8he/iqbLp/rBvHPznp1yF2DpcvkNWM2ZgY8kVBbFCXQoClnJ6pFq5mbCoGhymPY2GUbNkI/p4AO8V8pVZHjsz5LwEzLnyi4uJzajsjW7lUl9w0eVpYy0KIUqKMh+hwG0ap1J2vGqcIwlFDliSyb3rvJGSMbzPA9JLdG17b/dhcpwWP81ThLfLw7iQFnOqz2H00thatGgrEsrUsZX7flxaz+uvyR6onGNk1R63I3sO5p4Lgt1cwxYYFaXCbZ0l9MTRgp8MP3ZuXwSUzNw/+8so4iU6OaNHrEYJ0mhj88YbjZ1WhXGS6Ek8ftu0VIF11fdOuuvW9pPEeK4fgsCNtQ== Received: from AS4PR10MB5318.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:4b8::15) by HE1PR1001MB1097.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:3:6b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.29; Thu, 14 Apr 2022 08:03:40 +0000 Received: from AS4PR10MB5318.EURPRD10.PROD.OUTLOOK.COM ([fe80::89cb:3713:ecfb:6e21]) by AS4PR10MB5318.EURPRD10.PROD.OUTLOOK.COM ([fe80::89cb:3713:ecfb:6e21%6]) with mapi id 15.20.5144.029; Thu, 14 Apr 2022 08:03:39 +0000 From: "Schmidt, Adriaan" To: "Schild, Henning" CC: "isar-users@googlegroups.com" Subject: RE: [PATCH 2/2] bitbake-diffsigs: make finding of changed signatures more robust Thread-Topic: [PATCH 2/2] bitbake-diffsigs: make finding of changed signatures more robust Thread-Index: AQHYTwC3yK1apOvBdk2VHENfV0j/zKztgIAAgAGMVaA= Date: Thu, 14 Apr 2022 08:03:39 +0000 Message-ID: References: <20220413063534.799526-1-adriaan.schmidt@siemens.com> <20220413063534.799526-3-adriaan.schmidt@siemens.com> <20220413101954.67aca2e0@md1za8fc.ad001.siemens.net> In-Reply-To: <20220413101954.67aca2e0@md1za8fc.ad001.siemens.net> Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_a59b6cd5-d141-4a33-8bf1-0ca04484304f_Enabled=true; MSIP_Label_a59b6cd5-d141-4a33-8bf1-0ca04484304f_SetDate=2022-04-14T08:03:38Z; MSIP_Label_a59b6cd5-d141-4a33-8bf1-0ca04484304f_Method=Standard; MSIP_Label_a59b6cd5-d141-4a33-8bf1-0ca04484304f_Name=restricted-default; MSIP_Label_a59b6cd5-d141-4a33-8bf1-0ca04484304f_SiteId=38ae3bcd-9579-4fd4-adda-b42e1495d55a; MSIP_Label_a59b6cd5-d141-4a33-8bf1-0ca04484304f_ActionId=1ce7ae6a-6a4f-4800-83a5-6a3522319822; MSIP_Label_a59b6cd5-d141-4a33-8bf1-0ca04484304f_ContentBits=0 document_confidentiality: Restricted authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siemens.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4305b08e-0640-4d25-d6d9-08da1ded491a x-ms-traffictypediagnostic: HE1PR1001MB1097:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: gByn+5GKWlARaUhazEspM7qgLkAADwTS9IHSxIFpYOfmvsAmVx1Ojx8ZXsl9LRxS7AMkQxADGEvo2rDg9JkksxXxPNGGNMYSMMPUfwyjNFvfwTvbMAwy8bu6czDOGJTWRflEac9qFsU2Wlgpf3iGDrDeFbctRP4Z6xWzkfMLSsTqjPjn4YCO9aDdewGF4CPTrEdg+cdFIRLrJuz0n2P8Wr3Y6pHQhMU67XPHc1fnzD7fpWlEJxeyXnuXGoGG3CuhiYV2aUq/6+rzte9U2fWmnIromON96GrJzxJUyc8HIGDDdWoTcwBISJu3YI+9dgFytPHWXi1zZNuT0nDC1vYUFZf1s1Tzqw97NGbbLTsgyXKF4S+SrzdhoUF8WGivKQIdbgCboy/Wpc9uQJ9dtnoR3xvdCdrIYpXQtzWZiYarBnTgeI1K6RSFOpfu2fYdMtX1BpNcq0RvDpkoggX1cHpzQJY8g/Q31TcAn1OZSQNdxM+vAfr6cpQaop+WaDUD7SOoNO/oX7p31PPh08qDvmlJI3XUrWYWDqEDBOVWnr+I6s7iKvB0aWQvkSUlS22eDoNKgol2HjDQIHFRjoaXNKsVeDhPmV0TTtFpAl71ZcZpgpRo/faLxL1wX684RUwqHuT7wtZCZ+84ndm6In7r7kA+OQ4WYFHatprz2ilrs5PoMzQVp6U4TgsBZiDFOUs8ZO54DUgei+KNHOrFz5vUbtbkedYTtcJrj3PTMGhHxQvYosEulKdylF0mwZSykHZ3yekkt+kmbzP3Y4npMdWBPVVlyXSdY85qaF92xac3rTGNW1E= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR10MB5318.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(8936002)(6506007)(2906002)(26005)(186003)(7696005)(38070700005)(33656002)(55016003)(9686003)(8676002)(76116006)(66946007)(4326008)(6862004)(66446008)(966005)(64756008)(6636002)(5660300002)(66476007)(498600001)(122000001)(82960400001)(83380400001)(86362001)(66556008)(71200400001)(52536014)(38100700002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?WqAo7X0yzfwFO0g0Hs0JDvm5Ordbes7RFO+XqXak8BMct0AzO14tQF4B55UG?= =?us-ascii?Q?PtnpbjGQlwVaifvOdaAHAFhqiks0omPpnrBBA5B036bQfY2dhYw0OwPM+I89?= =?us-ascii?Q?8OZPnRNj5DTvlCbt5g8E9qupzP/pRyoknNwlPyFAuyu3/rPZUGArFW5XWH+H?= =?us-ascii?Q?6LYTk4zzEWhFF9FCGIxPUdv3i+zvRpTLOPlXvzQtUFeZ46g/GUxFO34x1hr6?= =?us-ascii?Q?cxrB3Yr87CmlVjVQxUZrAsQDv/PqA3sieFZ/cfR7YSyfjg64u3WkdWIXVUv0?= =?us-ascii?Q?5PF/NGt//o0k/gjNaIKx6zvSVcdk9e7ftpZqOE6sThNaY/aDgcjA9T4GI0/9?= =?us-ascii?Q?lDnC9g7GHDS5EF37q8wjHwU5Xy+iS1x+w6w9XI3w0ECXvu7xLLVxUb4ZGQCg?= =?us-ascii?Q?H+eJdXv2Mc0mxUuFg7+JlWvr3ZnbnpTnH5knYmzrHRXPfyMvIr4xEIQk1rg9?= =?us-ascii?Q?1bvX/VEoVLFL7cT4UHOOgzLD1norKUlr9n4pWvGIOjL73EaxDpkQxmLalIq5?= =?us-ascii?Q?X6bFA5pX2uVUEqXtcEQ7OAegAsEK2ZhS9fLnH61+Bpp9eSvOTu4HP0N/0u/f?= =?us-ascii?Q?zW+m02JThdfSxsHklEFAaZ4naxHtvAz23Cc/4IO8KA+LE/AaqRNZp/jH8XiW?= =?us-ascii?Q?ZWTRFUl7Lskb9Tg0S71bIcLjdvrWZvTMeVk1GfMOKmfMW4Ie/KYUA/EFDLqY?= =?us-ascii?Q?EhPHeldgPKrXju5phXa+J8WzE6nmdc+qjHWLhlZghvthYDroPQJvxc8RPGuL?= =?us-ascii?Q?2xm0xGlRTahgFBZmqG3MDgbb2fgi9dDkfIoYzS+G6Sv5mwtF3JAkNRuwbIJi?= =?us-ascii?Q?Lz6IfCfNKBtROCJUuOetAZI3Pn+mg/7f7q3OOLv4GpWT9lQRpBcnivCm7nwO?= =?us-ascii?Q?Aw/KS4NneT2np6eqDczLGdt+sDdJiBkaIAGBrtlMY/E1dvysJPnSDgG7Gc8j?= =?us-ascii?Q?q4slpttPUNwUKDjjjwLKC7w1AMuashSvDpwJzje4m82LqqOCSk55UJOFScbc?= =?us-ascii?Q?5Q2YIO7U5dMIR7k0cJAXkdLVz3rMpMusBk6zIFUiX0BgxHCv62DfScnDFuL1?= =?us-ascii?Q?rnlkoFZRyRsHUpD6D2WcUVRC35qOwWAHz3VslfgctJThwQ3u6IeMS2rgswbN?= =?us-ascii?Q?9DE2CQA6XBSoa5ZvwU4UcVzwbxEmm1E13616ek4HLaelficpPv25zKavarXY?= =?us-ascii?Q?DiLtnbGPYVYYoR6ntYZZxstRf9/b63jGPAV/f8Gs3YhXddD4SEDYIwdzWQBH?= =?us-ascii?Q?YnUjafl2t4CRTguszcgXyhoWiTY8WCXmE5WSgjkUWtpC/XF6D9KSqzJsmifa?= =?us-ascii?Q?QC+zu9gUJsyM1P+7fJyXHvGntqenpT1+NF7gLcXqGVvnyr+d8SNtbrw6laaL?= =?us-ascii?Q?Rgh8aCZmO8rIbDG+xi83g9dtTFZsCkf079nd1wCFcfbv9ZpD7amYfNEsRHK/?= =?us-ascii?Q?aK/cP+GqlAdXYAXKt+G7L9myj8AqJVFNYJNtJfCX2cJeT8Lqylu//D7eXoXT?= =?us-ascii?Q?MiXvi60DCC32bo9RRix9ATf+4Xq7ndnZz/9zG0aI7Rse4O2DzELJjG2QZxCx?= =?us-ascii?Q?l83nK4/ZoIxPy3OFUM3NmAGgFsmuLUA4zgi6nE0F5c0jVrB7lv5MCjrGbjZH?= =?us-ascii?Q?1AqCKeyHH9JLo8DosFMUXsrnTibNBm4WFFnTd078WLmHtWhNS2sznHpkjYaw?= =?us-ascii?Q?rmlEpPGk5qcRzoL3C9a0NL/vXGXldYBP0pGeR1Jm3UvLgUwe8AegR37ReirM?= =?us-ascii?Q?YOOfdylzterd37lFueXxIHSm4q8uRKc=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS4PR10MB5318.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 4305b08e-0640-4d25-d6d9-08da1ded491a X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Apr 2022 08:03:39.6828 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: vmHmec270c2j9ZzAxoI7i2xH5FEFx6eeVEzBbCKnE8Pii+ouEapGT/fWHL3FsK6NHC0gaCzVm2lEL0xctccRHtlWW/haW41StxGo7fMtO/U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR1001MB1097 X-TUID: m2Rkvb1Sfa5w Schild, Henning, Mittwoch, 13. April 2022 10:20 > Am Wed, 13 Apr 2022 08:35:34 +0200 > schrieb Adriaan Schmidt : >=20 > > In `runtaskhashes`, the keys contain the absolute paths to the > > recipe. When working with shared sstate caches (where these absolute > > paths can be different) we see that compare_sigfiles does not > > identifiy a changed hash of a dependent task as "changed", but > > instead as "removed"&"added", preventing the function from recursing > > and continuing the comparison. > > > > By calling `clean_basepaths` before comparing the `runtaskhashes` > > dicts, we avoid this. > > > > Submitted upstream: > > https://lists.openembedded.org/g/bitbake-devel/message/13603 >=20 > Submitted does not count, we will have to wait till it is merged and > then we can think about a backport. It's now on bitbake's `master-next`: https://git.openembedded.org/bitbake/commit/?h=3Dmaster-next&id=3D01b2b3009= 01dc8b93973318127f8eb3c29b9a168 > How important is that? If it is just "nice to have" i think we should > wait and not even do the backport once merged into bitbake. In our specific setup on a GitLab K8s CI runner, we need this to get useful analysis. Other setups might be fine without. Adriaan > Henning >=20 > > Signed-off-by: Adriaan Schmidt > > --- > > bitbake/lib/bb/siggen.py | 10 +++++----- > > 1 file changed, 5 insertions(+), 5 deletions(-) > > > > diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py > > index 0d88c6ec..8b23fd04 100644 > > --- a/bitbake/lib/bb/siggen.py > > +++ b/bitbake/lib/bb/siggen.py > > @@ -944,8 +944,8 @@ def compare_sigfiles(a, b, recursecb=3DNone, > > color=3DFalse, collapsed=3DFalse): > > > > if 'runtaskhashes' in a_data and 'runtaskhashes' in b_data: > > - a =3D a_data['runtaskhashes'] > > - b =3D b_data['runtaskhashes'] > > + a =3D clean_basepaths(a_data['runtaskhashes']) > > + b =3D clean_basepaths(b_data['runtaskhashes']) > > changed, added, removed =3D dict_diff(a, b) > > if added: > > for dep in added: > > @@ -956,7 +956,7 @@ def compare_sigfiles(a, b, recursecb=3DNone, > > color=3DFalse, collapsed=3DFalse): #output.append("Dependency on task %= s > > was replaced by %s with same hash" % (dep, bdep)) bdep_found =3D True > > if not bdep_found: > > - > > output.append(color_format("{color_title}Dependency on task %s was > > added{color_default} with hash %s") % (clean_basepath(dep), b[dep])) > > + > > output.append(color_format("{color_title}Dependency on task %s was > > added{color_default} with hash %s") % (dep, b[dep])) if removed: for > > dep in removed: adep_found =3D False > > @@ -966,11 +966,11 @@ def compare_sigfiles(a, b, recursecb=3DNone, > > color=3DFalse, collapsed=3DFalse): #output.append("Dependency on task %= s > > was replaced by %s with same hash" % (adep, dep)) adep_found =3D True > > if not adep_found: > > - > > output.append(color_format("{color_title}Dependency on task %s was > > removed{color_default} with hash %s") % (clean_basepath(dep), a[dep])) > > + > > output.append(color_format("{color_title}Dependency on task %s was > > removed{color_default} with hash %s") % (dep, a[dep])) if changed: > > for dep in changed: if not collapsed: > > - output.append(color_format("{color_title}Hash > > for dependent task %s changed{color_default} from %s to %s") % > > (clean_basepath(dep), a[dep], b[dep])) > > + output.append(color_format("{color_title}Hash > > for dependent task %s changed{color_default} from %s to %s") % (dep, > > a[dep], b[dep])) if callable(recursecb): recout =3D recursecb(dep, > > a[dep], b[dep]) if recout: