https://pantsbuild.org/ logo
n

narrow-vegetable-37489

03/14/2022, 1:35 PM
buf breaking
needs a previous state to compare against in order to detect breaking changes. My naive approach is to simply piggyback on Pants'
pants.base.build_environment.get_git
and
pants.vcs.changed.ChangedOptions
functionality.
get_git
to get the git workdir (from the currently protected
_gitdir
attribute) and `ChangedOptions.diffspec`/`ChangedOptions.since` to get the rev to compare the local tree against. If `ChangedOptions.diffspec`/`ChangedOptions.since` it can fall back on
HEAD
, and if
get_git
returns
None
then the linter will be skipped I guess? I'm not entirely sure how to put it all together.
get_git
seems to be callable from anywhere, so that should be simple enough, but
ChangedOptions
I'm struggling to get into my linter rule, probably because it's not intended to be used directly by rules but rather to determine which sources to provide the rules with. I'm also pondering about on how to structure the code and its options. The current linter is located in
pants/backend/codegen/protobuf/lint/buf
. Is this even a linter, or is a test or a check? Right now I've renamed the current
rules.py
to
lint_rules.py
and have introduce
breaking_rules.py
. I imagine people will want the option to only enable/disable one of them, so bundling them in the same backend might not be the best approach. Then there's also the subsystem which I, of course, want to reuse for both, but should it be extended so
lint
and
breaking
have different
options_scope
perhaps? I appreciate any and all feedback 🖖