-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add TrackableFilter interface #4410
Add TrackableFilter interface #4410
Conversation
@sdowell: This PR has multiple commits, and the default merge method is: merge. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
Hi @sdowell. Thanks for your PR. I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
return baseSetEntryFunc(node) | ||
} | ||
// WithMutationTracker registers a callback which will be invoked each time a field is mutated | ||
func (f *Filter) WithMutationTracker(callback func(key, value, tag string, node *yaml.RNode)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could alternatively be implemented using embedding rather than the private setter
attribute. I see the tradeoff as less boilerplate vs unnecessarily exposing the SetScalar
and SetEntry
methods.
I chose to not use embedding because I figured we wanted to keep the public api as minimal as possible, but I am open to suggestions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with your decision with keeping setter
private rather than embedding it. In addition to avoiding unnecessarily exposing public methods, IMO it is clearer to understand what is happening when each filter that implements TrackableFilter is explicitly defining their own WithMutationTracker
.
/cc |
/ok-to-test |
return baseSetEntryFunc(node) | ||
} | ||
// WithMutationTracker registers a callback which will be invoked each time a field is mutated | ||
func (f *Filter) WithMutationTracker(callback func(key, value, tag string, node *yaml.RNode)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with your decision with keeping setter
private rather than embedding it. In addition to avoiding unnecessarily exposing public methods, IMO it is clearer to understand what is happening when each filter that implements TrackableFilter is explicitly defining their own WithMutationTracker
.
This interface is an extension of the Filter interface which can be used for filters which are capable of tracking which fields they mutate.
This struct provides an abstraction to help Filters implement the TrackableFilter interface
This updates the annotations filter to implement the TrackableFilter interface by reusing the TrackableSetter abstraction provided by filtersutil. This is done to provide a generic and consistent experience across the filters
This updates the labels filter to implement the TrackableFilter interface by reusing the TrackableSetter abstraction provided by filtersutil. This is done to provide a generic and consistent experience across the filters
e939be6
to
929334c
Compare
/lgtm |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: natasha41575, sdowell The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
This change introduces a new
TrackableFilter
interface which is an extension of theFilter
interface that can be used for Filters which are capable of tracking which fields they mutate.This is implemented by provided a
TrackableSetter
abstraction infiltersutil
. This abstraction provides a means for Filters which are already leveragingfiltersutil
to easily implement theTrackableFilter
interface with minimal boilerplate.This PR updates the two Filters which already have a
SetEntryCallback
to use this new abstraction instead. The intent is to extend theTrackableFilter
interface to other applicable filters in a subsequent PR.Issues: #4372