All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Schier <nicolas@fjasle.eu>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	Ben Hutchings <ben@decadent.org.uk>,
	Nathan Chancellor <nathan@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>
Subject: Re: [PATCH v6 01/12] kbuild: add a tool to list files ignored by git
Date: Mon, 6 Mar 2023 15:27:07 +0100	[thread overview]
Message-ID: <ZAX4O2zg8mUulh4R@buildd.core.avm.de> (raw)
In-Reply-To: <CAK7LNATzsVCMsR-43erVnZ_xdDZoZHOMRnxXpKPxBvaaP4e-aA@mail.gmail.com>

On Sun, Feb 26, 2023 at 05:01:00PM +0900, Masahiro Yamada wrote:
> On Wed, Feb 15, 2023 at 10:21 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > In short, the motivation of this commit is to build a source package
> > without cleaning the source tree.
> >
> > The deb-pkg and (src)rpm-pkg targets first run 'make clean' before
> > creating a source tarball. Otherwise build artifacts such as *.o,
> > *.a, etc. would be included in the tarball. Yet, the tarball ends up
> > containing several garbage files since 'make clean' does not clean
> > everything.
> >
> > Cleaning the tree every time is annoying since it makes the incremental
> > build impossible. It is desirable to create a source tarball without
> > cleaning the tree.
> >
> > In fact, there are some ways to achieve this.
> >
> > The easiest solution is 'git archive'. 'make perf-tar*-src-pkg' uses
> > it, but I do not like it because it works only when the source tree is
> > managed by git, and all files you want in the tarball must be committed
> > in advance.
> >
> > I want to make it work without relying on git. We can do this.
> >
> > Files that are ignored by git are generated files, so should be excluded
> > from the source tarball. We can list them out by parsing the .gitignore
> > files. Of course, .gitignore does not cover all the cases, but it works
> > well enough.
> >
> > tar(1) claims to support it:
> >
> >   --exclude-vcs-ignores
> >
> >     Exclude files that match patterns read from VCS-specific ignore files.
> >     Supported files are: .cvsignore, .gitignore, .bzrignore, and .hgignore.
> >
> > The best scenario would be to use 'tar --exclude-vcs-ignores', but this
> > option does not work. --exclude-vcs-ignore does not understand any of
> > the negation (!), preceding slash, following slash, etc.. So, this option
> > is just useless.
> >
> > Hence, I wrote this gitignore parser. The previous version [1], written
> > in Python, was so slow. This version is implemented in C, so it works
> > much faster.
> >
> > I imported the code from git (commit: 23c56f7bd5f1), so we get the same
> > result.
> >
> > This tool traverses the source tree, parsing all .gitignore files, and
> > prints file paths that are ignored by git.
> >
> > The output is similar to 'git ls-files --ignored --directory --others
> > --exclude-per-directory=.gitignore', except
> >
> >   [1] Not sorted
> >   [2] No trailing slash for directories
> >
> > [2] is intentional because tar's --exclude-from option cannot handle
> > trailing slashes.
> >
> > [How to test this tool]
> >
> >   $ git clean -dfx
> >   $ make -s -j$(nproc) defconfig all                       # or allmodconifg or whatever
> >   $ git archive -o ../linux1.tar --prefix=./ HEAD
> >   $ tar tf ../linux1.tar | LANG=C sort > ../file-list1     # files emitted by 'git archive'
> >   $ make scripts_package
> >     HOSTCC  scripts/list-gitignored
> >   $ scripts/list-gitignored  --prefix=./ -o ../exclude-list
> >   $ tar cf ../linux2.tar --exclude-from=../exclude-list .
> >   $ tar tf ../linux2.tar | LANG=C sort > ../file-list2     # files emitted by 'tar'
> >   $ diff  ../file-list1 ../file-list2 | grep -E '^(<|>)'
> >   < ./Documentation/devicetree/bindings/.yamllint
> >   < ./drivers/clk/.kunitconfig
> >   < ./drivers/gpu/drm/tests/.kunitconfig
> >   < ./drivers/hid/.kunitconfig
> >   < ./fs/ext4/.kunitconfig
> >   < ./fs/fat/.kunitconfig
> >   < ./kernel/kcsan/.kunitconfig
> >   < ./lib/kunit/.kunitconfig
> >   < ./mm/kfence/.kunitconfig
> >   < ./tools/testing/selftests/arm64/tags/
> >   < ./tools/testing/selftests/arm64/tags/.gitignore
> >   < ./tools/testing/selftests/arm64/tags/Makefile
> >   < ./tools/testing/selftests/arm64/tags/run_tags_test.sh
> >   < ./tools/testing/selftests/arm64/tags/tags_test.c
> >   < ./tools/testing/selftests/kvm/.gitignore
> >   < ./tools/testing/selftests/kvm/Makefile
> >   < ./tools/testing/selftests/kvm/config
> >   < ./tools/testing/selftests/kvm/settings
> >
> > The source tarball contains most of files that are tracked by git. You
> > see some diffs, but it is just because some .gitignore files are wrong.
> >
> >   $ git ls-files -i -c --exclude-per-directory=.gitignore
> >   Documentation/devicetree/bindings/.yamllint
> >   drivers/clk/.kunitconfig
> >   drivers/gpu/drm/tests/.kunitconfig
> >   drivers/hid/.kunitconfig
> >   fs/ext4/.kunitconfig
> >   fs/fat/.kunitconfig
> >   kernel/kcsan/.kunitconfig
> >   lib/kunit/.kunitconfig
> >   mm/kfence/.kunitconfig
> >   tools/testing/selftests/arm64/tags/.gitignore
> >   tools/testing/selftests/arm64/tags/Makefile
> >   tools/testing/selftests/arm64/tags/run_tags_test.sh
> >   tools/testing/selftests/arm64/tags/tags_test.c
> >   tools/testing/selftests/kvm/.gitignore
> >   tools/testing/selftests/kvm/Makefile
> >   tools/testing/selftests/kvm/config
> >   tools/testing/selftests/kvm/settings
> >
> > [1]: https://lore.kernel.org/all/20230128173843.765212-1-masahiroy@kernel.org/
> >
> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> > ---
> 
> 
> 01 - 11 applied to linux-kbuild.
> 
> 
> I will update 12/12 (postponed to v6.4)

Might you want to re-consider to include this patch already in v6.3?
Bastian seems to be unhappy with the current state of v6.3:
https://lore.kernel.org/linux-kbuild/20230305232536.19528-1-bage@linutronix.de/T/#t

Kind regards,
Nicolas

  reply	other threads:[~2023-03-06 14:39 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-15  1:20 [PATCH v6 01/12] kbuild: add a tool to list files ignored by git Masahiro Yamada
2023-02-15  1:20 ` [PATCH v6 02/12] kbuild: deb-pkg: create source package without cleaning Masahiro Yamada
2023-02-24 22:28   ` Nicolas Schier
2023-02-15  1:20 ` [PATCH v6 03/12] kbuild: rpm-pkg: build binary packages from source rpm Masahiro Yamada
2023-02-15  1:20 ` [PATCH v6 04/12] kbuild: srcrpm-pkg: create source package without cleaning Masahiro Yamada
2023-02-15  1:20 ` [PATCH v6 05/12] kbuild: deb-pkg: hide KDEB_SOURCENAME from Makefile Masahiro Yamada
2023-02-24 22:33   ` Nicolas Schier
2023-02-15  1:20 ` [PATCH v6 06/12] kbuild: deb-pkg: make .orig tarball a hard link if possible Masahiro Yamada
2023-02-24 22:37   ` Nicolas Schier
2023-02-15  1:20 ` [PATCH v6 07/12] kbuild: deb-pkg: switch over to source format 3.0 (quilt) Masahiro Yamada
2023-02-24 22:42   ` Nicolas Schier
2023-02-25  8:54     ` Masahiro Yamada
2023-02-15  1:20 ` [PATCH v6 08/12] kbuild: make perf-tar*-src-pkg work without relying on git Masahiro Yamada
2023-02-15  1:20 ` [PATCH v6 09/12] kbuild: tar-pkg: use tar rules in scripts/Makefile.package Masahiro Yamada
2023-02-15  1:20 ` [PATCH v6 10/12] kbuild: deb-pkg: fix binary-arch and clean in debian/rules Masahiro Yamada
2023-02-15  1:20 ` [PATCH v6 11/12] kbuild: deb-pkg: improve the usability of source package Masahiro Yamada
2023-03-08 12:29   ` Péter Ujfalusi
2023-03-08 17:01     ` Masahiro Yamada
2023-02-15  1:20 ` [PATCH v6 12/12] kbuild: add srcdeb-pkg target Masahiro Yamada
2023-02-24 22:48   ` Nicolas Schier
2023-02-25 10:14     ` Masahiro Yamada
2023-03-01 20:41       ` Nicolas Schier
2023-02-26  8:01 ` [PATCH v6 01/12] kbuild: add a tool to list files ignored by git Masahiro Yamada
2023-03-06 14:27   ` Nicolas Schier [this message]
2023-02-27  8:24 ` Rasmus Villemoes
2023-02-27  9:51   ` Masahiro Yamada

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=ZAX4O2zg8mUulh4R@buildd.core.avm.de \
    --to=nicolas@fjasle.eu \
    --cc=ben@decadent.org.uk \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.