[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <0dc31052-4cfd-3b92-0a4a-96c8ecfafff6@intel.com>
Date: Thu, 24 May 2018 20:50:28 -0700
From: Marc Herbert <Marc.Herbert@...el.com>
To: Mike Mason <michael.w.mason@...el.com>
Cc: andy.work@...owry.com, git@...r.kernel.org, gitster@...ox.com,
josh@...htriplett.org, linux-kbuild@...r.kernel.org,
linux-kernel@...r.kernel.org, lists@...dbynature.de, peff@...f.net,
nico-linuxsetlocalversion@...ottelius.org
Subject: Re: Wrong -dirty suffix set by setlocalversion (was: BUG in git
diff-index)
On 24/05/2018 16:03, Mike Mason wrote:
> diff --git a/scripts/setlocalversion b/scripts/setlocalversion
> index 71f39410691b..9da4c5e83285 100755
> --- a/scripts/setlocalversion
> +++ b/scripts/setlocalversion
> @@ -73,8 +73,10 @@ scm_version()
> printf -- '-svn%s' "`git svn find-rev $head`"
> fi
>
> - # Check for uncommitted changes
> - if git diff-index --name-only HEAD | grep -qv "^scripts/package"; then
> + # Check for uncommitted changes. Only check mtime and size.
> + # Ignore insequential ctime, uid, gid and inode differences.
> + if git -c "core.checkstat=minimal" diff-index --name-only HEAD | \
> + grep -qv "^scripts/package"; then
> printf '%s' -dirty
> fi
FWIW:
Reported-by: Marc.Herbert@...el.com
Reviewed-by: Marc.Herbert@...el.com (assuming a future and decent commit message)
Tested-by: Marc.Herbert@...el.com
So the real use case is making a copy of a whole tree before building.
Typical in automated builds, old example:
https://groups.google.com/a/chromium.org/d/msg/chromium-os-dev/zxOa0OLWFkw/N_Sb7EZOBwAJ
Here's a more complex but faster and more transparent way to test Mike's fix
than copying an entire tree:
# Make sure you start from a clean state
git describe --dirty # must not -dirty
make prepare
# Simulate a copy of the tree but with just one file
rsync --perms --times README README.mtime_backup
rm README
rsync --perms --times README.mtime_backup README
stat README README.mtime_backup
# Demo the BUG fixed by Mike
./scripts/setlocalversion # -dirty BUG! because spurious inode ctime difference
git diff-index HEAD
git describe --dirty # not -dirty
./scripts/setlocalversion # not -dirty any more cause describe refreshed index
# Make sure mtime still causes -dirty with AND without Mike's fix
touch README
./scripts/setlocalversion # -dirty
Powered by blists - more mailing lists