Sounds good.

I think the high level bit is that whoever merges should *think* about
what they're putting in the history, even if it's just a pausing to
think "should I swash or merge this PR" rather than just clicking the
button.

On Wed, Jul 17, 2019 at 4:59 PM Valentyn Tymofieiev <valen...@google.com> wrote:
>
> Thanks everyone for the discussion and your thoughts.
>
> Here's my summary:
>
> We don't have to be too prescriptive about who does what and when if we keep 
> these goals in mind:
>
> 1. When a PR is being merged, each commit should clearly do something that it 
> states, and a commit should do just one thing.
> 2. While a PR is being reviewed, authors should refrain from squashing new 
> changes into previously reviewed commits.
>
> Committers who do the merge can help enforce #1, and every contributor can 
> help shape review culture to follow #2.
>
> For example, assume we have following PRs that were LGTMed:
>
> PR #1:
> a000000 "[BEAM-1234] Add feature X"
> a000001 "fixup: Address review  comments."
> a000002 "fixup! Fix lint."
>
> A committer can Squash-and-merge PR #1, and clean up fixup messages from the 
> merge commit description. As far as I know, fixup: vs fixup! makes no 
> difference.
>
> PR #2
> a000003 "[BEAM-1234] Add feature Y"
> a000004 "[BEAM-1234] Add feature Z"
> a000005 "fixup: Fix lint."
>
> A committer cannot squash-and-merge PR #1 using current github UI, since 
> features Y and Z will be combined into 1 commit, which violates item 1. 
> Therefore, a committer should ask the author to squash a000005 once PR has 
> been LGTMed.
>
> Authors can squash their changes and do force pushes as long as they don't 
> squash changes into commits that were commented on, which renders reviewer's 
> comments "Outdated". Although outdated comments can still be found on PR 
> page, discussion thread is hard to follow and does comments threads do not 
> appear when reviewing the PR, e.g in "Files changed". Authors can still 
> squash new commits between review iterations, for example:
> 1. Author adds commit a000000 "[BEAM-1234] Add feature X" and requests review.
> 2. Author adds a000001 "fixup: Address review  comments." and pushes the 
> branch.
> 3. Author notices that lint tests fail and adds a000002 "fixup! Fix lint."
> 4. Author can squash a000002 into a000001 if they wish, and force-push two 
> commits:
>
> a000000 "[BEAM-1234] Add feature X"           - commit hash not changed after 
> squash & force-push
> b000000 "fixup: Address review  comments."  - commit hash has changed after 
> squash, but these commits were never reviewed,
>
> 5. Author requests another review iteration (PTAL). Since PR still has 
> a000000, previous review comments will not be outdated, and reviewer can 
> still see the difference since last review by inspecting b000000.
>
> Thanks,
> Valentyn
>
> On Wed, Jul 10, 2019 at 3:26 AM Robert Bradshaw <rober...@google.com> wrote:
>>
>> On Wed, Jul 10, 2019 at 5:06 AM Kenneth Knowles <k...@apache.org> wrote:
>> >
>> > My opinion: what is important is that we have a policy for what goes into 
>> > the master commit history. This is very simple IMO: each commit should 
>> > clearly do something that it states, and a commit should do just one thing.
>>
>> Exactly how I feel as well.
>>
>> > Personally, I don't feel a need to set a rule for who does the squashing 
>> > (or non-squashing) or other actions necessary to maintain a clear history.
>>
>> I think it is on the person who does the merge to make sure the
>> history is clean.
>>
>> > In PRs I review the question of who should squash has never come up as an 
>> > issue. Most PRs are either a bunch of random commits obviously meant for 
>> > squash, or carefully managed commits with good messages using the 
>> > git-supported "fixup!" syntax or clear "fixup:" commit messages. It is a 
>> > polarizing issue, which is a good thing in this case as it makes it very 
>> > clear how to merge.
>>
>> This is my experience too.
>>
>> Unfortunately, GitHub only offers squash-everything vs. squash-nothing
>> via the UI.
>>
>> > Your original concern was authors force pushing during review making it 
>> > hard to review. For your point "3. After a force-push, comments made by 
>> > reviewers on earlier commit are hard to find." I thought GitHub had fixed 
>> > that. These comments used to vanish entirely, but now they are still on 
>> > the main PR page IIRC. If it is not fixed, it would make sense to add this 
>> > to the contribution guide, and even to the PR template.
>>
>> I find it harder to review when authors force-push as well. When
>> commits are separate, the reviewer can choose what subset of changes
>> (including all of them, or just since the last review) to inspect, but
>> when they're squashed this ability is lost (and comments, though now
>> not dropped, don't tie back to code). I would be in favor of a
>> recommendation to not force-pushing *reviewed* commits during review.
>>
>> I think this also requires committers to make a conscious effort when
>> merging (which is not being consistently done now). Something like a
>> simple github hook that advises (based on the commit messages) which
>> would be best could go a long way here.
>>
>>
>> > On Tue, Jul 9, 2019 at 2:18 PM Valentyn Tymofieiev <valen...@google.com> 
>> > wrote:
>> >>
>> >> Ok, I think if authors mark fixup commits with "fixup" prefix and 
>> >> committers routinely fixup commits before the merge without asking the 
>> >> contributors to do so, the authors should not have a particular reason to 
>> >> fixup/squash + force-push all changes into one commit after addressing 
>> >> review comments. This will make the review easier, however committers 
>> >> will have to take responsibility for merging fixup commits.
>> >>
>> >> Currently both committer guide[1] and contributor guide[2] assume that it 
>> >> is the author's responsibility to merge fixup commit.
>> >>
>> >>> The reviewer should give the LGTM and then request that the author of 
>> >>> the pull request rebase, squash, split, etc, the commit
>> >>
>> >>
>> >>> "After review is complete and the PR accepted, multiple commits should 
>> >>> be squashed (see Git workflow tips)".
>> >>
>> >>
>> >> Should we explicitly make squashing review-related commits a 
>> >> responsibility of committers?
>> >>
>> >> [1] https://beam.apache.org/contribute/committer-guide
>> >> [2] https://beam.apache.org/contribute/
>> >>
>> >>
>> >> On Tue, Jul 9, 2019 at 12:22 PM Rui Wang <ruw...@google.com> wrote:
>> >>>
>> >>> "allow maintainers to edit" by default is enabled. Then the proposed 
>> >>> workflow looks reasonable to me now.
>> >>>
>> >>>
>> >>> -Rui
>> >>>
>> >>> On Tue, Jul 9, 2019 at 11:26 AM Kenneth Knowles <k...@apache.org> wrote:
>> >>>>
>> >>>> If you "allow maintainers to edit" the PR, it is easy for any committer 
>> >>>> to fix up the commits and merge. They should not have to ask you to do 
>> >>>> it, unless it is not obvious what to do.
>> >>>>
>> >>>> Kenn
>> >>>>
>> >>>> On Tue, Jul 9, 2019 at 11:05 AM Rui Wang <ruw...@google.com> wrote:
>> >>>>>
>> >>>>> At least for me, because I usually don't know when PR review is done, 
>> >>>>> in order to make PR to be merged into Beam repo faster, I keep 
>> >>>>> squashing commits every time so that committers can review and then 
>> >>>>> merge at a time, otherwise committers could approve a PR but then ask 
>> >>>>> squashing commits, which leads to another ping and wait round.
>> >>>>>
>> >>>>> Thus I prefer committers do squash and merge, which will reduce PR 
>> >>>>> authors' load during PR review process.
>> >>>>>
>> >>>>>
>> >>>>> -Rui
>> >>>>>
>> >>>>>
>> >>>>> On Mon, Jul 8, 2019 at 5:44 PM Valentyn Tymofieiev 
>> >>>>> <valen...@google.com> wrote:
>> >>>>>>
>> >>>>>> Rui, committer guide[1] does say that all commits are standalone 
>> >>>>>> changes:
>> >>>>>>
>> >>>>>>> We prefer small independent, incremental PRs with descriptive, 
>> >>>>>>> isolated commits. Each commit is a single clear change.
>> >>>>>>
>> >>>>>>
>> >>>>>> However in my opinion, this recommendation applies to moments when a 
>> >>>>>> PR is first sent for review, and when a PR is being merged. Committer 
>> >>>>>> guide also mentions that during review iterations authors may add 
>> >>>>>> review-related commits.
>> >>>>>>
>> >>>>>>> the pull request may have a collection of review-related commits 
>> >>>>>>> that are not meaningful to preserve in the history. The reviewer 
>> >>>>>>> should give the LGTM and then request that the author of the pull 
>> >>>>>>> request rebase, squash, split, etc, the commits, so that the history 
>> >>>>>>> is most useful.
>> >>>>>>
>> >>>>>>
>> >>>>>> Review-related commits don't have to be isolated independent changes, 
>> >>>>>> and perhaps committer guide and contributor guide [2] should spell 
>> >>>>>> out clearly that authors should not feel pressure to make review 
>> >>>>>> commits look like meaningful changes of their own when it does not 
>> >>>>>> make sense to do.  By the end of the review, review commits should be 
>> >>>>>> squashed by a committer or by the author.
>> >>>>>>
>> >>>>>> I think there are some incentives to always squash-and-force-push:
>> >>>>>> - Committer will not ask the author to squash commits if there is 
>> >>>>>> only one commit.
>> >>>>>> - We don't have to wait for another round of tests to pass on the 
>> >>>>>> final  PR.
>> >>>>>>
>> >>>>>> Both concerns are addressed if a committer follows squash-and-merge 
>> >>>>>> workflow.
>> >>>>>>
>> >>>>>> [1] https://beam.apache.org/contribute/committer-guide
>> >>>>>> [2] https://beam.apache.org/contribute/
>> >>>>>>
>> >>>>>> On Mon, Jul 8, 2019 at 11:33 AM Rui Wang <ruw...@google.com> wrote:
>> >>>>>>>
>> >>>>>>> Myself usually follows the pattern of "authors force-push their 
>> >>>>>>> changes during every review iteration". The reason is after reading 
>> >>>>>>> [1], I found it's hard to maintain a multiple commits PR as it's 
>> >>>>>>> hard to create isolated commits for different logical pieces of code 
>> >>>>>>> in practice. Therefore in practice I keep squash commits (and then 
>> >>>>>>> have to force-push) to create at least a single isolated commit.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> [1] 
>> >>>>>>> https://beam.apache.org/contribute/committer-guide/#pull-request-review-objectives
>> >>>>>>>
>> >>>>>>> -Rui
>> >>>>>>>
>> >>>>>>> On Mon, Jul 8, 2019 at 11:25 AM Udi Meiri <eh...@google.com> wrote:
>> >>>>>>>>
>> >>>>>>>> I think there are already some guidelines here: 
>> >>>>>>>> https://beam.apache.org/contribute/committer-guide/#pull-request-review-objectives
>> >>>>>>>>  (maybe we could point to them from the PR template?)
>> >>>>>>>> Yes, it is acceptable to ask for squash or if it's ok to squash to 
>> >>>>>>>> a single commit.
>> >>>>>>>>
>> >>>>>>>> On Mon, Jul 8, 2019 at 11:14 AM Valentyn Tymofieiev 
>> >>>>>>>> <valen...@google.com> wrote:
>> >>>>>>>>>
>> >>>>>>>>> I have observed a pattern where authors force-push their changes 
>> >>>>>>>>> during every review iteration, so that a pull request always 
>> >>>>>>>>> contains one commit. This creates the following problems:
>> >>>>>>>>>
>> >>>>>>>>> 1. It is hard to see what has changed between review iterations.
>> >>>>>>>>> 2. Sometimes authors  make changes in parts of pull requests that 
>> >>>>>>>>> the reviewer did not comment on, and such changes may be unnoticed 
>> >>>>>>>>> by the reviewer.
>> >>>>>>>>> 3. After a force-push, comments made by reviewers on earlier 
>> >>>>>>>>> commit are hard to find.
>> >>>>>>>>>
>> >>>>>>>>> A better workflow may be to:
>> >>>>>>>>> 1. Between review iterations authors push changes in new 
>> >>>>>>>>> commit(s), but also keep the original commit.
>> >>>>>>>>> 2. If a follow-up commit does not constitute a meaningful change 
>> >>>>>>>>> of its own, it should be prefixed with "fixup: ".
>> >>>>>>>>> 3. Once review has finished either:
>> >>>>>>>>> - Authors squash fixup commits after all reviewers have approved 
>> >>>>>>>>> the PR per request of a reviewer.
>> >>>>>>>>> - Committers squash fixup commits during merge.
>> >>>>>>>>>
>> >>>>>>>>> I am curious what thoughts or suggestions others have. In 
>> >>>>>>>>> particular:
>> >>>>>>>>> 1. Should we document guidelines for iterating on PRs in our 
>> >>>>>>>>> contributor guide?
>> >>>>>>>>> 2. Is it acceptable for a reviewer to ask the author to rebase 
>> >>>>>>>>> squashed changes that were force-pushed to address review feedback 
>> >>>>>>>>> onto their original commits to simplify the rest of the review?
>> >>>>>>>>>
>> >>>>>>>>> Thanks.
>> >>>>>>>>>
>> >>>>>>>>> Related discussion:
>> >>>>>>>>> [1] Committer Guidelines / Hygene before merging PRs 
>> >>>>>>>>> https://lists.apache.org/thread.html/6d922820d6fc352479f88e5c8737f2c8893ddb706a1e578b50d28948@%3Cdev.beam.apache.org%3E

Reply via email to