To recap, this proposal is now revised to remove 2 of the 3 merge options from GitHub, leaving only Squash and Merge. PR #4513 <https://github.com/apache/geode/pull/4513> serves as an exhibit of what is proposed (it is not to be merged unless discussion leads to consensus and a successful vote). Please use the dev list (not the PR) for all discussion (and voting, if we get that far).
Squash and merge is already used almost exclusively by the Geode community, with any exceptions tending to be accidental more often than intentional. However, some have raised the concern that implementing this restriction could result in harm or wasted time. Can someone give an example of a such a scenario? It seems there is a divide here between junior and senior community members. Newer committers appreciate additional guardrails to protect them from accidentally doing the wrong thing, while those with more experience want to be able to work unencumbered by restrictions of any kind. Our welcome email to new committers states “We like to work on trust rather than unnecessary constraints...Being a committer enables you to more easily make changes without needing to go through the patch submission process”. I can see this as an argument against this proposal (perhaps even an argument against any form of branch protection). In the scheme of things, this proposal makes very little difference. There are still other ways to get non-compiling commits onto develop (e.g. waiting a long time between running PR checks and merging to develop). What’s more important is working well together as a community. So, perhaps what’s best for the community is to encourage working on trust rather than unnecessary constraints. -Owen On Dec 31, 2019, at 10:56 AM, Kirk Lund <kl...@apache.org> wrote: I'm happy to file multiple PRs when I need to merge multiple commits to develop. On Mon, Dec 30, 2019 at 5:45 PM Mark Hanson <mhan...@pivotal.io> wrote: This change to disable all but squash-merge would be really easy to revert. How about we try it for a while and see? If people decide it is really limiting them, we can change it back. Let’s do it for 1 month and see how it goes. Does that sound reasonable? Thanks, Mark On Dec 30, 2019, at 5:25 PM, Owen Nichols <onich...@pivotal.io> wrote: Given that we adopted < https://lists.apache.org/thread.html/c3eb5c028cb3a4d76024f928a7a33c0311228f5dbbcaa86287bf5826@%3Cdev.geode.apache.org%3E > and still wish to continue < https://lists.apache.org/thread.html/8795697c1ad57068c053b48b4b1845005f3ade0be777e679eafe95db@%3Cdev.geode.apache.org%3E > having branch protection rules to ensure every commit landing in develop has passed the required PR checks, it seems like that decision alone mandates that we disable all merge mechanisms other than squash-and-merge. Allowing merge commits or rebase merges bypasses branch protection for all commits other than the final one in the merge or rebase set. Given that we decided < https://lists.apache.org/thread.html/1ba19d9aeb206148c922afdd182ba322d6f128bbb83983f2f72a108e@%3Cdev.geode.apache.org%3E > that bypassing PR checks should never be allowed, keeping this loophole open seems untenable. This is not just hypothetical — this loophole is causing real problems. We now have commits on develop that don’t compile. For example: git checkout 19eee7821322a1301f16bdcd31fd3b8c872a41b6 ./gradlew devBuild ...spotlessJava FAILED We implemented branch protections to make this impossible, right? We can very easily close this loophole by disabling all but the Squash&Merge button for PRs. This will not make more work for any developer. If you want to get multiple commits onto develop, simply submit each as a separate PR — that is the only way to assure that required PR checks have passed for each. On the other hand, if we as a Geode community feel strongly that bypassing branch protection via merge commits and rebase commits is important to allow, why not also allow arbitrary overrides (or get rid of branch protection entirely)? -Owen On Dec 20, 2019, at 12:31 PM, Blake Bender <bben...@pivotal.io> wrote: Just FWIW, the situation described of having multiple commits in a single PR with separate associated JIRA tickets is still kind of problematic. It could well be the case that the commits are interdependent, thus when bisecting etc it's still not possible to revert the fix for a single bug/feature/whatever atomically. It's all good, though, I'm satisfied no one's forcing me to adopt practice I'm opposed to. Apologies for getting my feathers a little ruffled, or if I ruffled anyone else's in return. Thanks, Blake On Fri, Dec 20, 2019 at 12:18 PM Nabarun Nag <n...@pivotal.io> wrote: Hi Dan, When we do squash merge all the commit messages are preserved and also the co-authored tag works when we do squash merge. So the authorship and history are preserved. In my own personal experience and reverts and pinpointing regression failures are tough when the commits are spread out. Also, reverts are easier when it is just one commit while we are bisecting failures. Regards Naba On Fri, Dec 20, 2019 at 12:07 PM Dan Smith <dsm...@pivotal.io> wrote: I'll change to -0. I think merge commits are a nice way to record history in some cases, and can also be a way to avoid messy conflicts that come with rebase. Merge commits also preserve authorship of commits (compared to squash-merge), which I think is valuable as an open source community that is trying to keep track of outside contributions. That said, if the rest of y'all feel it will help to disable the button, I won't stand in the way. -Dan On Fri, Dec 20, 2019 at 11:50 AM Anthony Baker <aba...@pivotal.io> wrote: Whether we are talking about the geode/ repository or the geode-native/ repository we are all one GEODE community. The idea of a native client team may matter in some contexts but in this space we are all GEODE contributors. Adopting a common approach across our repos will make it easier for new contributors to engage, learn our norms, and join our efforts. $0.02, Anthony On Dec 20, 2019, at 11:32 AM, Blake Bender <bben...@pivotal.io> wrote: Is this a policy the native client team must abide by, as well? It varies slightly with what we've been doing, and all other things being equal I see no reason for us to change that. If I am to have any measure of control over the nc repository, I will definitely enforce a 1:1 correspondence between commits to develop and JIRA tickets. IMO, if your refactoring in a PR is sufficiently large or complex that it's difficult to tease it out from the bug you're fixing or feature you're implementing, it merits its own JIRA ticket and a separate PR. If your "actual" fix then becomes dependent on the refactored code, that's a price I'm willing to pay to keep history clean. On the other hand, I see no real value in squashing to a single commit prior to submitting a PR, since your view of the changes on GitHub is essentially the same either way. We haven't enforced this on the nc repo, and I'd prefer to keep it that way. Thanks, Blake On Fri, Dec 20, 2019 at 10:29 AM Jinmei Liao <jil...@pivotal.io> wrote: Merge commit is the new contributor's default setting. When we are merging new contributor's PR, since we are so used to THINKING "squash-and-merge" is the default, we forgot to check what the button really says when we are merging other people's PR. On Fri, Dec 20, 2019 at 10:18 AM Ernest Burghardt < eburgha...@pivotal.io> wrote: I'm a proponent of using squash-and-merge, and once a person has chosen this option once it comes up by default afterwards... Owen, I don't think you have consensus to put forth this PR, there are -1s above... (early voting) maybe we'll be better off socializing the norm of squash-and-merge and gaining a natural consensus that way... On Fri, Dec 20, 2019 at 10:07 AM Owen Nichols < onich...@pivotal.io wrote: The proposed action manifests as a commit to the Geode git repository, so a PR is an acceptable vehicle for voting in this case. On Dec 20, 2019, at 9:38 AM, Bruce Schuchardt < bschucha...@pivotal.io> wrote: I see a lot of plus-ones and a "voting deadline" on this DISCUSS thread and a request to "vote" using a PR. This all seems out of order to me. Our votes are supposed to be on the email list, aren't they? and I haven't seen a VOTE request. On 12/20/19 9:33 AM, Nabarun Nag wrote: +1 On Fri, Dec 20, 2019 at 9:25 AM Owen Nichols < onich...@pivotal.io wrote: Based on the feedback so far, I will amend the proposal to drop item 2). Therefore, the current ability to create merge commits using command-line git will remain available. The proposal as amended is now: Change GitHub settings to make "Squash and merge" the default (by removing “Create a merge commit” option). Update the PR template to change the text "Is your initial contribution a single, squashed commit” to “Is your initial contribution squashed for ease of review (e.g. a single commit, or a ‘refactoring’ commit plus a ‘fix’ commit)" As Naba suggested, we can try it, and if we don’t like it, it’s simple to revert. I’ve create a PR for the proposed change here: https://github.com/apache/geode/pull/4513 Please use the PR to vote for against this proposal. It will not be merged before the VOTING DEADLINE of DEC 31 (if no -1’s at that time) On Dec 20, 2019, at 8:31 AM, Ju@N <jujora...@gmail.com> wrote: +1 On Fri 20 Dec 2019 at 16:18, Owen Nichols < onich...@pivotal.io> wrote: Hi Bruce, this proposal will not waste a single second of your time. It just prevents people from accidentally pressing a button that we have already agreed should never be pressed, but because we never configured our GitHub to match our stated policy, is currently the default. However, it will save a lot of time and frustration for anyone needing to bisect failures, revert, or cherry-pick changes, which has merit even if you personally never do any of those three things. Please start a separate thread if you would like to revisit the community decision to require passing PR checks. On Dec 20, 2019, at 7:49 AM, Bruce Schuchardt < bschucha...@pivotal.io> wrote: I agree with Jake. I would go further by saying that I see very little merit in this proposal. I think we're getting more and more bureaucratic in our process and that it stifles productivity. I was recently forced to spend three days fixing tests in which I had changed an import statement before they would pass stress testing. I'm glad the tests now pass reliably but I was very frustrated by the process. On 12/19/19 4:49 PM, Jacob Barrett wrote: I’m in agreement with Dan. Changes to the infrastructure to flat out prevent things that should be self policing is annoying. This PR review lock we have had already cost us valuable time waiting for PR pipelines to pass that have no relevance to the commit, like CI work: I’d hat to see yet another process enforced that Kees us from getting work done when necessary. -Jake On Dec 19, 2019, at 4:43 PM, Dan Smith < dsm...@pivotal.io wrote: -1 to (1) and (2). I think merge commits are appropriate in certain circumstances, so I don't think we should make a blanket restriction. In fact I think our release process involves some merges. I think setting standards on what is reasonable to be an individual commit will do a lot more to clean up our history than blocking merges. We'd rather not see commits like "Spotless Apply" in the history, but if reasonably separate and well written commits come in as part of a merge, I think that's fine. -Dan On Thu, Dec 19, 2019 at 4:27 PM Jinmei Liao < jil...@pivotal.io wrote: +1 On Thu, Dec 19, 2019, 4:05 PM Owen Nichols < onich...@pivotal.io wrote: I’d like to advance this topic from an informal request/discussion to a discussion of a concrete proposal. To recap, it sounds like there is general agreement that commit history on develop should be linear (no merge commits), and that the biggest obstacle to this is that the PR merge button in GitHub creates a merge commit by default. I propose the following changes: 1) Change GitHub settings to remove the ability to create a merge commit. This will make Squash & Merge the default. 2) Change GitHub settings to require linear history on develop. This prevents merge commits via command-line (not recommended, but wiki still has instructions for merging PRs this way). 3) Update the PR template to change the text "Is your initial contribution a single, squashed commit” to “Is your initial contribution squashed for ease of review (e.g. a single commit, or a ‘refactoring’ commit plus a ‘fix’ commit)" For clarity, I am proposing no-change in the following areas: i) Leave Rebase & Merge as an option for PRs that have been structured to benefit from it (this can make it easier in a bisect to see whether the refactoring or the “fix” broke something). ii) Leave existing wording in the wiki as-is [stating that squashing is preferred]. Please comment via this email thread. -Owen On Dec 16, 2019, at 10:49 AM, Kirk Lund < kl...@apache.org> wrote: I think it's already resolved Udo ;) Here's the problem, if I fixup a dunit test by removing all uses of "this." and I rename the dunit test, then git doesn't remember that the file is a rename -- it forever afterwards interprets it as a new file that I created if I touch more than 50% of the lines (which "this." can easily do). If we squash two commits: the rename and the cleanup of that dunit test -- then we effectively lose the history of that file and it shows that I created a new file. Also for the record, I've been working on Geode since the beginning and I was never made aware of this change in our process. I never voted on it. I'm not a big fan of changing various details in our process every single week. It's very easy to miss these discussions unless someone points it out to me. On Mon, Dec 16, 2019 at 10:34 AM Udo Kohlmeyer < ukohlme...@pivotal.io> wrote: I'm not sure what this discussion is about... WE, as a community, have agreed in common practices, in two place no less... 1) Quoting our PR template For all changes: * Is there a JIRA ticket associated with this PR? Is it referenced in the commit message? * Has your PR been rebased against the latest commit within the target branch (typically|develop|)? * ***Is your initial contribution a single, squashed commit?* * Does|gradlew build|run cleanly? * Have you written or updated unit tests to verify your changes? * If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion underASF 2.0 < http://www.apache.org/legal/resolved.html#category-a ? On our PR template we call out that the initial PR commit should be squashed. 2) https://cwiki.apache.org/confluence/display/GEODE/Code+contributions < https://cwiki.apache.org/confluence/display/GEODE/Code+contributions -- See "Accepting a PR Using the Command Line" - Point #3. @Kirk, if each of your commits "stands alone", I commend you on the diligence, but in reality, they should either then be stand alone PR's or just extra work created for yourself. If we want to change the way we have agreed upon we submit/commit/merge changes back into develop... Then this is another discussion thread, until then, I think we should all remind ourselves on our agreed contributions code of conduct. --Udo On 12/16/19 9:59 AM, Nabarun Nag wrote: Kirk, I believe that creating a Pull Request with multiple commits is ok. It's just in the end that when it's being pushed to develop branch, it needs to be squash merged. I believe that is what you have mentioned in the first paragraph, and I am more than happy with that. If you can see in the first screenshot comparison that I had attached in the first email in this thread is what I want to avoid. Thank you for your feedback. Regards Naba On Mon, Dec 16, 2019 at 9:47 AM Kirk Lund < kl...@apache.org> wrote: Whenever I submit a PR with multiple commits that I intend to rebase to develop, I always try to ensure that each commit stands alone as is (compiles and passes tests). Separating file renames and refactoring from behavior changes into different commits seems very valuable to me, and I've had trouble getting people to review PRs without this separation (but it could be squashed as it's merged to develop). It sounds to me like the real problem is (a) some PRs have multiple commits that don't compile or don't pass tests, and (b) some PRs that should be merged with squash are not (by accident most likely). I can submit multiple PRs instead of one PR with multiple commits. So I'll change my response to -0 if that helps prevent commits to develop that don't compile or pass tests. Without preventing rebase or merge commits from github, I'm not sure how we can really enforce this or prevent (b) above. On Fri, Dec 13, 2019 at 3:38 PM Alexander Murmann < amurm...@pivotal.io> wrote: I wonder if Kirk's and Naba's statements are necessarily at odds. Make the change easy (warning: this may be hard), then make the easy change." -Kent Beck Following Kent Beck's advise might reasonably split into two commits. One refactor commit and a separate commit that introduces the actual change. They should be individually revertible and might be easier understood if split out. I vividly remember a change on our code base where someone did a huge amount of refactoring that resulted than in one parameter changing in order to get the desired functionality change. If that was in one commit, it would be hard to see the actual change. If split out, it's beautiful and crystal clear. I am unsure how that would be reflected in terms of JIRA ticket references. Usually we assume that if there is a commit with the ticket number, the issue is resolved. Maybe the key here is to create a separate refactoring ticket. Would that allow us to have our cake and eat it too? On Fri, Dec 13, 2019 at 3:16 PM Nabarun Nag < n...@pivotal.io> wrote: It is to help with bisect operations when things start failing ... helps us it revert and build faster. also with cherry picking features / fixes to previous versions . And keeping the git history clean with no unnecessary “merge commits”. Regards Naba On Fri, Dec 13, 2019 at 2:25 PM Kirk Lund < kl...@apache.org> wrote: -1 I really like to sometimes have more than 1 commit in a PR and keep them separate when they merge to develop On Tue, Oct 22, 2019 at 5:12 PM Nabarun Nag < n...@pivotal.io> wrote: Hi Geode Committers, A kind request for using squash commit instead of using merge. This will really help us in our bisect operations when a regression/flakiness in the product is introduced. We can automate and go through fewer commits faster, avoiding commits like "spotless fix" and "re-trigger precheck-in" or other minor commits in the merged branch. Also, please use the commit format : (helps us to know who worked on it, what is the history) * GEODE-xxxx: <brief intro > * explanation line 1 * explanation line 2* This is not a rule or anything, but a request to help out your fellow committers in quickly detecting a problem. For inspiration, we can look into Apache Kafka / Spark where they have a complete linear graph for their main branch HEAD [see attachment] Regards Naba. -- Ju@N -- Cheers Jinmei