From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 342F7C433E2 for ; Thu, 17 Sep 2020 06:56:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9764921973 for ; Thu, 17 Sep 2020 06:56:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=rasmusvillemoes.dk header.i=@rasmusvillemoes.dk header.b="BFsDtQXF" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726291AbgIQG4X (ORCPT ); Thu, 17 Sep 2020 02:56:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44864 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726109AbgIQG4V (ORCPT ); Thu, 17 Sep 2020 02:56:21 -0400 Received: from mail-ej1-x641.google.com (mail-ej1-x641.google.com [IPv6:2a00:1450:4864:20::641]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 13F84C06174A for ; Wed, 16 Sep 2020 23:56:21 -0700 (PDT) Received: by mail-ej1-x641.google.com with SMTP id o8so1652481ejb.10 for ; Wed, 16 Sep 2020 23:56:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rasmusvillemoes.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hWs+oHzCE+pxj+9sRgHEVF+gX1sDVTnjvZSOKVqUVRE=; b=BFsDtQXFxf/Gir4+cdzUNfMbTASAUTfvSw7BwIJFzjYU4kORzNZ1Vou9PpuYZQkuJp 51NrYTI9N+IxKfov63ZTwAulLmcGTxu6N7IU7vB8OjODlZ+qwNE0Ar0phdtO69En0stn 8o9lbVk0kRuPpKhQRDS2jPMav4ecp2WQf5WjM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hWs+oHzCE+pxj+9sRgHEVF+gX1sDVTnjvZSOKVqUVRE=; b=ONaZ2qmkqM/4qV2P8tragtB1iiKeFgxB5bsUD3DNPLhFFMECdXfGJK0SE3wD2EPURB 1tbnPT4kFaZDTef8E5JNEG9VdLHv0VFT4FZr3UbUEMINz2uymubiFGYDtTllZUWKMQHd nADM5tos+7Cged7WRGYI1E8XFlihg3ECtRUo76HeEtCVz/E5RHZF9a4qt3Yww2ar2GZL 6Gth74EBoiU89mZJonAkQ7fo/JhZA6mrLsQAxcO1eQpijun/2usCKtfKQQ8FFzSWuAEI yNeYiAVJi6KYTr3wzisNPO55pn7AFq1T+ws3yzk/YP4casXFXbgIYXzXgcrCr6AopzI4 3NVw== X-Gm-Message-State: AOAM530YbV883I1XKdSzyt7Rjm5b+g4rLK0ZmvTiJjA/L1MYIbYUAlB9 1sn2PpnAKJqaAP+6wxT9MTc48Q== X-Google-Smtp-Source: ABdhPJzbBaFA/g1m+Icd5LdWGUeNT0Y1+BJer0ATd7eGuRwQJTsduXK8MOe6iUBBVvdH8RE9bvhNPw== X-Received: by 2002:a17:906:a207:: with SMTP id r7mr29909557ejy.32.1600325779598; Wed, 16 Sep 2020 23:56:19 -0700 (PDT) Received: from prevas-ravi.prevas.se ([81.216.59.226]) by smtp.gmail.com with ESMTPSA id t4sm14248382ejj.6.2020.09.16.23.56.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2020 23:56:19 -0700 (PDT) From: Rasmus Villemoes To: Masahiro Yamada , Randy Dunlap , Brian Norris , Bhaskar Chowdhury , Nico Schottelius , Guenter Roeck Cc: Rasmus Villemoes , linux-kernel@vger.kernel.org Subject: [PATCH v2] scripts/setlocalversion: make git describe output more reliable Date: Thu, 17 Sep 2020 08:56:11 +0200 Message-Id: <20200917065615.18843-1-linux@rasmusvillemoes.dk> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200910112701.13853-1-linux@rasmusvillemoes.dk> References: <20200910112701.13853-1-linux@rasmusvillemoes.dk> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When building for an embedded target using Yocto, we're sometimes observing that the version string that gets built into vmlinux (and thus what uname -a reports) differs from the path under /lib/modules/ where modules get installed in the rootfs, but only in the length of the -gabc123def suffix. Hence modprobe always fails. The problem is that Yocto has the concept of "sstate" (shared state), which allows different developers/buildbots/etc. to share build artifacts, based on a hash of all the metadata that went into building that artifact - and that metadata includes all dependencies (e.g. the compiler used etc.). That normally works quite well; usually a clean build (without using any sstate cache) done by one developer ends up being binary identical to a build done on another host. However, one thing that can cause two developers to end up with different builds [and thus make one's vmlinux package incompatible with the other's kernel-dev package], which is not captured by the metadata hashing, is this `git describe`: The output of that can be affected by (1) git version: before 2.11 git defaulted to a minimum of 7, since 2.11 (git.git commit e6c587) the default is dynamic based on the number of objects in the repo (2) hence even if both run the same git version, the output can differ based on how many remotes are being tracked (or just lots of local development branches or plain old garbage) (3) and of course somebody could have a core.abbrev config setting in ~/.gitconfig So in order to avoid `uname -a` output relying on such random details of the build environment which are rather hard to ensure are consistent between developers and buildbots, make sure the abbreviated sha1 always consists of exactly 12 hex characters. That is consistent with the current rule for -stable patches, and is almost always enough to identify the head commit unambigously - in the few cases where it does not, the v5.4.3-00021- prefix would certainly nail it down. Signed-off-by: Rasmus Villemoes --- v2: use 12 instead of 15, and ensure that the result does have exactly 12 hex chars. scripts/setlocalversion | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/scripts/setlocalversion b/scripts/setlocalversion index 20f2efd57b11..bb709eda96cd 100755 --- a/scripts/setlocalversion +++ b/scripts/setlocalversion @@ -45,7 +45,7 @@ scm_version() # Check for git and a git repo. if test -z "$(git rev-parse --show-cdup 2>/dev/null)" && - head=$(git rev-parse --verify --short HEAD 2>/dev/null); then + head=$(git rev-parse --verify HEAD 2>/dev/null); then # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore # it, because this version is defined in the top level Makefile. @@ -59,11 +59,22 @@ scm_version() fi # If we are past a tagged commit (like # "v2.6.30-rc5-302-g72357d5"), we pretty print it. - if atag="$(git describe 2>/dev/null)"; then - echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' - - # If we don't have a tag at all we print -g{commitish}. + # + # Ensure the abbreviated sha1 has exactly 12 + # hex characters, to make the output + # independent of git version, local + # core.abbrev settings and/or total number of + # objects in the current repository - passing + # --abbrev=12 ensures a minimum of 12, and the + # awk substr() then picks the 'g' and first 12 + # hex chars. + if atag="$(git describe --abbrev=12 2>/dev/null)"; then + echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),substr($(NF),0,13))}' + + # If we don't have a tag at all we print -g{commitish}, + # again using exactly 12 hex chars. else + head="$(echo $head | cut -c1-12)" printf '%s%s' -g $head fi fi -- 2.23.0