Re: [PATCH] scripts/setlocalversion: git: Make -dirty check more robust

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2018-08-29 12:26 GMT+09:00 Genki Sky <sky@xxxxxxxx>:
> $(git diff-index) relies on the index being refreshed. This refreshing
> of the index used to happen, but was removed in cdf2bc632ebc
> ("scripts/setlocalversion on write-protected source tree", 2013-06-14)
> due to issues with a read-only filesystem.
>
> If the index is not refreshed, one runs into problems. E.g. as
> described in [0], git stores the uid in its index, so even if just the
> uid has changed (or git is tricked into thinking so), then we will
> think the tree is dirty. So as in [1], if you package linux-git with a
> system that uses fakeroot(1), you get a "-dirty" version. Unless you
> manually $(git update-index --refresh) themselves.
>
> The simplest solution seems to be $(git status --porcelain), with an
> additional flag saying "ignore untracked files". It seems clearer
> about what it does, and avoids issues regarding cached indexes and
> writable filesystems, but still has stable output for scripting.
>
> [0]: https://public-inbox.org/git/0190ae30-b6c8-2a8b-b1fb-fd9d84e6dfdf@xxxxxxxxxx/
> [1]: https://bbs.archlinux.org/viewtopic.php?id=236702
>
> Signed-off-by: Genki Sky <sky@xxxxxxxx>
> ---

Applied to linux-kbuild/fixes. Thanks!


> Notes:
>
>    Testing: I ran $(git status -uno .... && echo dirty) after each of
>    the following commands, checking sanity:
>
>      % > Makefile
>      % git checkout Makefile
>      % chmod -w .git
>      % > scripts/package/Makefile
>      % chmod +w .git
>      % git checkout scripts/package/Makefile
>      % touch new_file
>      % touch scripts/package/new_file
>      % rm new_file scripts/package/new_file
>      % mv Makefile .clang-format
>      % git checkout Makefile .clang-format
>
>  scripts/setlocalversion | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/setlocalversion b/scripts/setlocalversion
> index 71f39410691b..79f7dd57d571 100755
> --- a/scripts/setlocalversion
> +++ b/scripts/setlocalversion
> @@ -74,7 +74,7 @@ scm_version()
>                 fi
>
>                 # Check for uncommitted changes
> -               if git diff-index --name-only HEAD | grep -qv "^scripts/package"; then
> +               if git status -uno --porcelain | grep -qv '^.. scripts/package'; then
>                         printf '%s' -dirty
>                 fi
>
> --
> 2.18.0
>



-- 
Best Regards
Masahiro Yamada



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux