bazel-contrib / bazel-gazelle

Gazelle is a Bazel build file generator for Bazel projects. It natively supports Go and protobuf, and it may be extended to support new languages and custom rule sets.
Apache License 2.0
1.21k stars 381 forks source link

Exclude files/folders that are .gitignore'd #1166

Open alexeagle opened 2 years ago

alexeagle commented 2 years ago

This is a major usability hurdle at one of Aspect's clients. Gazelle fails because they have some junk in their repo which is covered by a .gitignore so they don't realize they have an unclean state. The error messages when gazelle descends into these files is cryptic to them. They then ask a support question where it's not obvious that git clean -ffdx is the solution.

Gazelle should simply ignore things that are .gitignore'd (probably with a directive to opt-in/out)

f0rmiga commented 2 years ago

I think Gazelle has enough users that Hyrum's law would be applied here. I wonder how many users have git-ignored files that end up in the targets that depend on a flow like:

go generate -> some git-ignored files -> gazelle -> bazel build

I believe it would be wise to make it opt-in rather than opt-out.

garymm commented 2 years ago

Facing a similar issue with git submodules. Would be happy to opt in.

DavidZbarsky-at commented 2 months ago

As a data point, I tried the linked PR on our repo and it makes our generation time go from 2.5s to 4+s. It may make sense to advise people to put their generated junk in .bazelignore (or ideally don't generate things into the source tree, though I understand half-migrated repos are "fun")

jbedard commented 2 months ago

I think that would be a reason to make this opt-in, maybe with documentation pointing out that .bazelignore is better?

FWIW the .bazelignore is only faster since https://github.com/bazelbuild/bazel-gazelle/commit/5cd3717daec5e34808b616107145dd1a83e93b9a that stopped treating entries as globs.

gonzojive commented 2 months ago

https://github.com/aspect-build/aspect-cli/commit/a70f957fd61efb303dca637f640f654b071c8127#diff-b61fcd9f5596f8f5a65d234f9606c2b41a8b7c53ab2f7701e8a0baa7a6e6f218 includes a patch to gazelle that adds an extra ignore predicate check within walk.Walk. The following is the relevant walk code.

https://github.com/bazelbuild/bazel-gazelle/blob/master/walk/walk.go#L164-L184

I suppose gazelle's walk function could support user-configured hooks by, for example, reading all entries from config.Ext that implement some interface. The config loading code (getWalkConfig) could inspect c.Exts:

https://github.com/bazelbuild/bazel-gazelle/blob/master/walk/config.go#L40-L58