From: Gregory Fong <gregory.0xf0@gmail.com>
To: Michal Marek <mmarek@suse.cz>
Cc: linux-kernel@vger.kernel.org, Gregory Fong <gregory.0xf0@gmail.com>
Subject: [PATCH v2] scripts/setlocalversion: fix false positive -dirty tag from ctime
Date: Thu, 13 Aug 2015 18:08:22 -0700 [thread overview]
Message-ID: <1439514502-30291-1-git-send-email-gregory.0xf0@gmail.com> (raw)
git-diff-index cannot detect that a file hasn't actually changed when
the file's ctime has changed (e.g. if chmod was used but didn't
actually result in any changes), which was causing setlocalversion to
incorrectly add a -dirty tag. Run git-update-index beforehand to make
sure that the index is correct.
Test prep:
make defconfig && make prepare
Before, starting from clean index:
$ ls -l Kbuild
-rw-rw-r-- 1 gregory gregory 2622 Aug 10 12:38 Kbuild
$ chmod u+w Kbuild # intentional no-op that updates ctime
$ CONFIG_LOCALVERSION_AUTO=y /bin/sh scripts/setlocalversion $PWD
-00130-g7ddab73-dirty
After, starting from clean index:
$ ls -l Kbuild
-rw-rw-r-- 1 gregory gregory 2622 Aug 10 12:38 Kbuild
$ chmod u+w Kbuild # intentional no-op that updates ctime
$ CONFIG_LOCALVERSION_AUTO=y /bin/sh scripts/setlocalversion $PWD
-00131-gfa3477d
Signed-off-by: Gregory Fong <gregory.0xf0@gmail.com>
---
I sent this a few months ago[1] but didn't really include enough info
about how to reproduce the problem. This is indeed probably a very
unusual issue for someone to have, but sometimes people write braindead
scripts that do things like update ctime for no reason, and it can be
really hard to track down why the kernel build gets marked as '-dirty'
when there aren't any modifications to the tree if you're not intimately
familiar with the difference between git's plumbing and porcelain
commands.
[1] https://lkml.org/lkml/2015/3/10/793
scripts/setlocalversion | 3 +++
1 file changed, 3 insertions(+)
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index 63d91e2..4ba52fc 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -45,6 +45,9 @@ 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
+ # In case ctime has changed but there are not actually any
+ # changes that would be committed.
+ git update-index -q --refresh
# 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.
--
1.9.1
reply other threads:[~2015-08-14 1:08 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1439514502-30291-1-git-send-email-gregory.0xf0@gmail.com \
--to=gregory.0xf0@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mmarek@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®