Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp958923pxu; Fri, 23 Oct 2020 18:41:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwmE7XzDPYZuDVUuwqaejFWG9YP1tlGFXLa61KHArBqz8qwSdSC9OdnovYVP4QyUcLWIhtT X-Received: by 2002:aa7:d892:: with SMTP id u18mr5172385edq.305.1603503698374; Fri, 23 Oct 2020 18:41:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603503698; cv=none; d=google.com; s=arc-20160816; b=lN13Y8gnW2cEwMPs/Uu5tCd0JTYRTc5WVuC8NOdlYJjIEn5Z8DH2ivHk3nZfDlnlhb rXvoUxbwTAXFyf+j4/bfK64ggAvIGzXeQZcEWL1BbMBQu3EpgvW1cU1y0RedXyQ6YzT1 hFTtn/WFdd9OI7Q7Pfz6zF5WN7GM6iui1jbyyjAzX32ccDZnlVDmBxOCaDsQQnPXWJIG rFkbLB842ZcXFk9T6P1d/bZ063K6HLmtLHjdqtyRdkHSXt9X1Dh5Uo7fk6Z2HBATCNZk gqa+ccF8uQRkcGtCm7zRtlx3bPwKgkJkY+ZIuwPUNNbmskNNCONcQDwq6E02hFW7BeF5 Inuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=++BugjGu7Yhj4JJ5Ke8vw5pSfa1dW+nAyP06MUn3l9A=; b=qxupCGXhR+bSo+Gvmf4wfyQPQaV/q1s8f82Crga44ZCRBxJ9XKIqVcgj6jX0iG5s3U xoNgJwOHgcroU05rIyYvq2Seb9B9HuU+1IpnM9JG+Su72x6NZro/wl9O9wUDeEYZTQQ2 ayfu3WvOhjKu/kxJSS5YN8GwhQrOD3aNnHmSBBFKzvJ6o0SpCsLcbR0wChSH82a0YLYj Z9IX7rJ9/jDfyeZquWje5LJiZfhOT9RkWgd+sSTfjnhHMOd3q8lzrYXBQu56Ab6vSiO9 xfE2DYkZB7d/gCWd54TPdUulefnKNaHWUivZu2mOoI9CUJ/9RUQrjg9W9YtXmvgtfkVQ 0Pqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=fR0nhC4h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u19si1984357eds.502.2020.10.23.18.41.16; Fri, 23 Oct 2020 18:41:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@rasmusvillemoes.dk header.s=google header.b=fR0nhC4h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754342AbgJWXWT (ORCPT + 99 others); Fri, 23 Oct 2020 19:22:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56402 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754109AbgJWXWR (ORCPT ); Fri, 23 Oct 2020 19:22:17 -0400 Received: from mail-ej1-x642.google.com (mail-ej1-x642.google.com [IPv6:2a00:1450:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D8FEC0613CE for ; Fri, 23 Oct 2020 16:22:15 -0700 (PDT) Received: by mail-ej1-x642.google.com with SMTP id t25so4544433ejd.13 for ; Fri, 23 Oct 2020 16:22:15 -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:mime-version :content-transfer-encoding; bh=++BugjGu7Yhj4JJ5Ke8vw5pSfa1dW+nAyP06MUn3l9A=; b=fR0nhC4hwwjEQcrMhtmyY8sKhRj7dxdyF2zz4p2zmTkw1Z0wFyN6uM8KqqmqF9puaD azZCsjAie4XeXmRw8k5oFcVimIPj5arVNPrWI/4l7+qfonfFuq1dSKSgUP+3yJoNTWGY PK6TCb5HWFqHN0sC5H3zBhkAPcfUPFCdkfRjA= 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:mime-version :content-transfer-encoding; bh=++BugjGu7Yhj4JJ5Ke8vw5pSfa1dW+nAyP06MUn3l9A=; b=Fp65XsnPp0E0Nu+Sw3ACfb3FJULVF92LmPXwm/JgX8SN7ngmxSiN/RTTN2Kuhbddg0 MEiIS+J4unHjW3OpHat5sU/6uOz0Rxgb5u2P9dh60UTC10tfm+zW2MUcaI05Lmz/Tb3r BbuvfKUg4ZKfh05mX1sVniVksx3vqDGGpxSKtuIMmM+moAR+uw240E3evW2Rs+beuJ3r yGm/k9b+rcePXWkaUT6/Mo0vvtmWXL8mUnNkY7wPUiw4TbO2HSzoYDN+vFkoXL62RWux HDA/L9fL4Gd9+WYVUh0E5xG0i3GTqvb48Y0XhM7q4hqoKNg5vV7I/FCC6nu6/yzMrf70 lgFA== X-Gm-Message-State: AOAM530O+OVZmX8BrSktQqYqEBYClT7EDXBnYUy1ug9f5oiWh7X3RNVa VtFLHx+X2uWUCUNt5maMf8hLK2Ef3lypGoYbBKE= X-Received: by 2002:a17:906:4d59:: with SMTP id b25mr4565331ejv.404.1603495334032; Fri, 23 Oct 2020 16:22:14 -0700 (PDT) Received: from prevas-ravi.aaad.autarch.net (5.186.115.188.cgn.fibianet.dk. [5.186.115.188]) by smtp.gmail.com with ESMTPSA id q25sm1447937eja.86.2020.10.23.16.22.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2020 16:22:13 -0700 (PDT) From: Rasmus Villemoes To: stable@vger.kernel.org, Rasmus Villemoes , Masahiro Yamada Cc: Greg KH , linux-kernel@vger.kernel.org Subject: [PATCH 4.4-stable] scripts/setlocalversion: make git describe output more reliable Date: Sat, 24 Oct 2020 01:22:07 +0200 Message-Id: <20201023232207.10373-1-linux@rasmusvillemoes.dk> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org commit 548b8b5168c90c42e88f70fcf041b4ce0b8e7aa8 upstream. 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. [Adapt to `` vs $() differences between 4.4 and upstream.] Signed-off-by: Rasmus Villemoes Signed-off-by: Masahiro Yamada --- scripts/setlocalversion | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/scripts/setlocalversion b/scripts/setlocalversion index aa28c3f29809314bfa58..0c8741b795d0c82a38c9 100755 --- a/scripts/setlocalversion +++ b/scripts/setlocalversion @@ -44,7 +44,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. @@ -58,11 +58,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