When compiling into output directory using O=, many files
created under KBUILD_OUTPUT that git considers
as new ones; git clients, ex. "git gui" lists it, and it clutters
file list making it difficult to see what was really changed
Generate .gitignore in output directory that ignores all
its content
Signed-off-by: Vladimir Kondratiev <[email protected]>
---
Makefile | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Makefile b/Makefile
index 141653226f3c..ee66ea28869b 100644
--- a/Makefile
+++ b/Makefile
@@ -483,10 +483,13 @@ PHONY += outputmakefile
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
+# At the same time when output Makefile generated, generate .gitignore to
+# ignore whole output directory
outputmakefile:
ifneq ($(KBUILD_SRC),)
$(Q)ln -fsn $(srctree) source
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
+ echo "# this is build directory, ignore it\n*" > .gitignore
endif
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
--
2.19.1
On Wed, Jan 30, 2019 at 8:15 PM Vladimir Kondratiev
<[email protected]> wrote:
>
> When compiling into output directory using O=, many files
> created under KBUILD_OUTPUT that git considers
> as new ones; git clients, ex. "git gui" lists it, and it clutters
> file list making it difficult to see what was really changed
>
> Generate .gitignore in output directory that ignores all
> its content
>
> Signed-off-by: Vladimir Kondratiev <[email protected]>
> ---
> Makefile | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index 141653226f3c..ee66ea28869b 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -483,10 +483,13 @@ PHONY += outputmakefile
> # outputmakefile generates a Makefile in the output directory, if using a
> # separate output directory. This allows convenient use of make in the
> # output directory.
> +# At the same time when output Makefile generated, generate .gitignore to
> +# ignore whole output directory
> outputmakefile:
> ifneq ($(KBUILD_SRC),)
> $(Q)ln -fsn $(srctree) source
> $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
> + echo "# this is build directory, ignore it\n*" > .gitignore
> endif
>
> ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
> --
> 2.19.1
>
The idea looks OK to me.
The implementation must be improved.
You need to add $(Q) to suppress the annoying command echo.
Also, this patch does not work for all distributions because
echo "\n"
is not portable.
GNU Make runs recipes in /bin/sh (unless SHELL variable is changed),
but the implementation of /bin/sh depends on distributions.
This patch works on Ubuntu etc.
because /bin/sh is a symbolic link to dash.
But, in some distributions,
/bin/sh is a symbolic link to bash.
Docker is useful for quick tests of
various distributions. :)
See the result of echo "hello\nworld"
[Ubuntu]
foo@8ad1275125c5:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.10
DISTRIB_CODENAME=cosmic
DISTRIB_DESCRIPTION="Ubuntu 18.10"
foo@8ad1275125c5:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Nov 14 23:00 /bin/sh -> dash
foo@8ad1275125c5:~$ /bin/sh
$ type echo
echo is a shell builtin
$ echo "hello\nworld"
hello
world
[CentOS]
[foo@c3fbaa4b6f72 ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[foo@c3fbaa4b6f72 ~]$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Dec 5 01:36 /bin/sh -> bash
[foo@c3fbaa4b6f72 ~]$ /bin/sh
sh-4.2$ type echo
echo is a shell builtin
sh-4.2$ echo "hello\nworld"
hello\nworld
On example for workaround might be:
diff --git a/Makefile b/Makefile
index ee66ea2..010c1c6 100644
--- a/Makefile
+++ b/Makefile
@@ -489,7 +489,7 @@ outputmakefile:
ifneq ($(KBUILD_SRC),)
$(Q)ln -fsn $(srctree) source
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
- echo "# this is build directory, ignore it\n*" > .gitignore
+ $(Q){ echo "# this is build directory, ignore it"; echo "*"; }
> .gitignore
endif
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
--
Best Regards
Masahiro Yamada
From: Vladimir Kondratiev <[email protected]>
When compiling into output directory using O=, many files
created under KBUILD_OUTPUT that git considers
as new ones; git clients, ex. "git gui" lists it, and it clutters
file list making it difficult to see what was really changed
Generate .gitignore in output directory that ignores all
its content
Signed-off-by: Vladimir Kondratiev <[email protected]>
---
Makefile | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Makefile b/Makefile
index 141653226f3c..b1d651e822b1 100644
--- a/Makefile
+++ b/Makefile
@@ -483,10 +483,13 @@ PHONY += outputmakefile
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
+# At the same time when output Makefile generated, generate .gitignore to
+# ignore whole output directory
outputmakefile:
ifneq ($(KBUILD_SRC),)
$(Q)ln -fsn $(srctree) source
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
+ $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
endif
ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
--
2.19.1
---------------------------------------------------------------------
Intel Israel (74) Limited
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
Agree; sending v2
On 2/1/19 6:18 AM, Masahiro Yamada wrote:
> On Wed, Jan 30, 2019 at 8:15 PM Vladimir Kondratiev
> <[email protected]> wrote:
>>
>> When compiling into output directory using O=, many files
>> created under KBUILD_OUTPUT that git considers
>> as new ones; git clients, ex. "git gui" lists it, and it clutters
>> file list making it difficult to see what was really changed
>>
>> Generate .gitignore in output directory that ignores all
>> its content
>>
>> Signed-off-by: Vladimir Kondratiev <[email protected]>
>> ---
>> Makefile | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/Makefile b/Makefile
>> index 141653226f3c..ee66ea28869b 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -483,10 +483,13 @@ PHONY += outputmakefile
>> # outputmakefile generates a Makefile in the output directory, if using a
>> # separate output directory. This allows convenient use of make in the
>> # output directory.
>> +# At the same time when output Makefile generated, generate .gitignore to
>> +# ignore whole output directory
>> outputmakefile:
>> ifneq ($(KBUILD_SRC),)
>> $(Q)ln -fsn $(srctree) source
>> $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
>> + echo "# this is build directory, ignore it\n*" > .gitignore
>> endif
>>
>> ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
>> --
>> 2.19.1
>>
>
>
> The idea looks OK to me.
> The implementation must be improved.
>
>
> You need to add $(Q) to suppress the annoying command echo.
>
> Also, this patch does not work for all distributions because
> echo "\n"
> is not portable.
>
>
>
> GNU Make runs recipes in /bin/sh (unless SHELL variable is changed),
> but the implementation of /bin/sh depends on distributions.
>
>
> This patch works on Ubuntu etc.
> because /bin/sh is a symbolic link to dash.
>
>
> But, in some distributions,
> /bin/sh is a symbolic link to bash.
>
>
>
> Docker is useful for quick tests of
> various distributions. :)
>
> See the result of echo "hello\nworld"
>
>
> [Ubuntu]
>
> foo@8ad1275125c5:~$ cat /etc/lsb-release
> DISTRIB_ID=Ubuntu
> DISTRIB_RELEASE=18.10
> DISTRIB_CODENAME=cosmic
> DISTRIB_DESCRIPTION="Ubuntu 18.10"
> foo@8ad1275125c5:~$ ls -l /bin/sh
> lrwxrwxrwx 1 root root 4 Nov 14 23:00 /bin/sh -> dash
> foo@8ad1275125c5:~$ /bin/sh
> $ type echo
> echo is a shell builtin
> $ echo "hello\nworld"
> hello
> world
>
>
>
>
> [CentOS]
>
>
> [foo@c3fbaa4b6f72 ~]$ cat /etc/redhat-release
> CentOS Linux release 7.6.1810 (Core)
> [foo@c3fbaa4b6f72 ~]$ ls -l /bin/sh
> lrwxrwxrwx 1 root root 4 Dec 5 01:36 /bin/sh -> bash
> [foo@c3fbaa4b6f72 ~]$ /bin/sh
> sh-4.2$ type echo
> echo is a shell builtin
> sh-4.2$ echo "hello\nworld"
> hello\nworld
>
>
>
>
>
> On example for workaround might be:
>
> diff --git a/Makefile b/Makefile
> index ee66ea2..010c1c6 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -489,7 +489,7 @@ outputmakefile:
> ifneq ($(KBUILD_SRC),)
> $(Q)ln -fsn $(srctree) source
> $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
> - echo "# this is build directory, ignore it\n*" > .gitignore
> + $(Q){ echo "# this is build directory, ignore it"; echo "*"; }
>> .gitignore
> endif
>
> ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
>
>
>
>
>
>
On Sun, Feb 3, 2019 at 5:50 PM Vladimir Kondratiev
<[email protected]> wrote:
>
> From: Vladimir Kondratiev <[email protected]>
>
> When compiling into output directory using O=, many files
> created under KBUILD_OUTPUT that git considers
> as new ones; git clients, ex. "git gui" lists it, and it clutters
> file list making it difficult to see what was really changed
>
> Generate .gitignore in output directory that ignores all
> its content
>
> Signed-off-by: Vladimir Kondratiev <[email protected]>
> ---
Applied to linux-kbuild.
Thanks.
> Makefile | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index 141653226f3c..b1d651e822b1 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -483,10 +483,13 @@ PHONY += outputmakefile
> # outputmakefile generates a Makefile in the output directory, if using a
> # separate output directory. This allows convenient use of make in the
> # output directory.
> +# At the same time when output Makefile generated, generate .gitignore to
> +# ignore whole output directory
> outputmakefile:
> ifneq ($(KBUILD_SRC),)
> $(Q)ln -fsn $(srctree) source
> $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
> + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
> endif
>
> ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
> --
> 2.19.1
>
> ---------------------------------------------------------------------
> Intel Israel (74) Limited
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
>
--
Best Regards
Masahiro Yamada
Hi,
> When compiling into output directory using O=, many files
> created under KBUILD_OUTPUT that git considers
> as new ones; git clients, ex. "git gui" lists it, and it clutters
> file list making it difficult to see what was really changed
>
> Generate .gitignore in output directory that ignores all
> its content
just found this when testing -rc1.
Unfortunately this breaks my setup, because I keep a totally separate
git repository in my build directories to track (various versions of)
.config. So .gitignore there is carefully crafted to ignore most build
artefacts, but not .config, for instance.
I am not sure how git would interact with the build directory for you?
Do you build into a subdirectory of the kernel tree?
I was hoping that we would not overwrite unrelated files in directories
outside of the kernel tree. In case this is about a subdirectory of the
source tree, can we somehow check for this case?
Cheers,
Andre.
>
> Signed-off-by: Vladimir Kondratiev <[email protected]>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
> Makefile | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index 97ee0be24d52..d487fca342c4 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -483,10 +483,13 @@ PHONY += outputmakefile
> # outputmakefile generates a Makefile in the output directory, if using a
> # separate output directory. This allows convenient use of make in the
> # output directory.
> +# At the same time when output Makefile generated, generate .gitignore to
> +# ignore whole output directory
> outputmakefile:
> ifneq ($(KBUILD_SRC),)
> $(Q)ln -fsn $(srctree) source
> $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
> + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
> endif
>
> ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
> --
> 2.17.1
On Sat, Mar 23, 2019 at 12:53 AM Andre Przywara <[email protected]> wrote:
>
> Hi,
>
> > When compiling into output directory using O=, many files
> > created under KBUILD_OUTPUT that git considers
> > as new ones; git clients, ex. "git gui" lists it, and it clutters
> > file list making it difficult to see what was really changed
> >
> > Generate .gitignore in output directory that ignores all
> > its content
>
> just found this when testing -rc1.
> Unfortunately this breaks my setup, because I keep a totally separate
> git repository in my build directories to track (various versions of)
> .config. So .gitignore there is carefully crafted to ignore most build
> artefacts, but not .config, for instance.
>
> I am not sure how git would interact with the build directory for you?
> Do you build into a subdirectory of the kernel tree?
>
> I was hoping that we would not overwrite unrelated files in directories
> outside of the kernel tree. In case this is about a subdirectory of the
> source tree, can we somehow check for this case?
I am not sure if it is worthwhile
adjusting the upstream kernel to
the workflow of an individual like this.
If it is, we could like this:
outputmakefile:
ifneq ($(KBUILD_SRC),)
$(Q)ln -fsn $(srctree) source
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
$(Q)test -e .gitignore || \
{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
endif
> Cheers,
> Andre.
>
> >
> > Signed-off-by: Vladimir Kondratiev <[email protected]>
> > Signed-off-by: Masahiro Yamada <[email protected]>
> > ---
> > Makefile | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/Makefile b/Makefile
> > index 97ee0be24d52..d487fca342c4 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -483,10 +483,13 @@ PHONY += outputmakefile
> > # outputmakefile generates a Makefile in the output directory, if using a
> > # separate output directory. This allows convenient use of make in the
> > # output directory.
> > +# At the same time when output Makefile generated, generate .gitignore to
> > +# ignore whole output directory
> > outputmakefile:
> > ifneq ($(KBUILD_SRC),)
> > $(Q)ln -fsn $(srctree) source
> > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
> > + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
> > endif
> >
> > ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
> > --
> > 2.17.1
>
--
Best Regards
Masahiro Yamada
On Sun, 24 Mar 2019 11:22:11 +0900
Masahiro Yamada <[email protected]> wrote:
Hi Masahiro,
> On Sat, Mar 23, 2019 at 12:53 AM Andre Przywara <[email protected]> wrote:
> >
> > Hi,
> >
> > > When compiling into output directory using O=, many files
> > > created under KBUILD_OUTPUT that git considers
> > > as new ones; git clients, ex. "git gui" lists it, and it clutters
> > > file list making it difficult to see what was really changed
> > >
> > > Generate .gitignore in output directory that ignores all
> > > its content
> >
> > just found this when testing -rc1.
> > Unfortunately this breaks my setup, because I keep a totally separate
> > git repository in my build directories to track (various versions of)
> > .config. So .gitignore there is carefully crafted to ignore most build
> > artefacts, but not .config, for instance.
> >
> > I am not sure how git would interact with the build directory for you?
> > Do you build into a subdirectory of the kernel tree?
> >
> > I was hoping that we would not overwrite unrelated files in directories
> > outside of the kernel tree. In case this is about a subdirectory of the
> > source tree, can we somehow check for this case?
>
>
> I am not sure if it is worthwhile
> adjusting the upstream kernel to
> the workflow of an individual like this.
I would argue that we should not overwrite files in the build directory
which are unrelated to the actual kernel *build*.
Another point is that one could easily add the build (sub-)directory
to .git/info/exclude to make git ignore it, without touching any git
monitored file at all. But I couldn't find an easy way to keep
my .gitignore file in place.
> If it is, we could like this:
>
> outputmakefile:
> ifneq ($(KBUILD_SRC),)
> $(Q)ln -fsn $(srctree) source
> $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
> $(Q)test -e .gitignore || \
> { echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
Thanks, that looks good and fixes it for me!
Cheers,
Andre.
> endif
>
>
> > Cheers,
> > Andre.
> >
> > >
> > > Signed-off-by: Vladimir Kondratiev <[email protected]>
> > > Signed-off-by: Masahiro Yamada <[email protected]>
> > > ---
> > > Makefile | 3 +++
> > > 1 file changed, 3 insertions(+)
> > >
> > > diff --git a/Makefile b/Makefile
> > > index 97ee0be24d52..d487fca342c4 100644
> > > --- a/Makefile
> > > +++ b/Makefile
> > > @@ -483,10 +483,13 @@ PHONY += outputmakefile
> > > # outputmakefile generates a Makefile in the output directory, if using a
> > > # separate output directory. This allows convenient use of make in the
> > > # output directory.
> > > +# At the same time when output Makefile generated, generate .gitignore to
> > > +# ignore whole output directory
> > > outputmakefile:
> > > ifneq ($(KBUILD_SRC),)
> > > $(Q)ln -fsn $(srctree) source
> > > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
> > > + $(Q){ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
> > > endif
> > >
> > > ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
> > > --
> > > 2.17.1
> >
>
>