You then fetch and repair
your local version and try again.

This breaks your model of applying every commit ref by ref.

I'm all for trying to avoid extra work/stability but we already have
added a layer of testing every change before commit.  I'm not going to
accept we need to also add a layer of testing before every merge.




On Thu, May 7, 2015 at 10:36 AM, Benedict Elliott Smith
<belliottsm...@datastax.com> wrote:
>>
>> wouldn't you need to force push?
>
>
> git push --force-with-lease
>
> This works essentially like CAS; if the remote repositories are not the
> same as the one you have modified, it will fail. You then fetch and repair
> your local version and try again.
>
> So what does this buy us?
>
>
> This buys us a clean development process. We bought into "always
> releasable". It's already a tall order; if we start weakening the
> constraints before we even get started, I am unconvinced we will
> successfully deliver. A monthly release cycle requires *strict* processes,
> not *almost* strict, or strict*ish*.
>
> Something that could also help make a more streamlined process: if actual
> commits were constructed on development branches ready for commit, with a
> proper commit message and CHANGES.txt updated. Even more ideally: with git
> rerere data for merging up to each of the branches. If we had that, and
> each of the branches had been tested in CI, we would be much closer than we
> are currently, as the risk-at-commit is minimized.
>
> On Thu, May 7, 2015 at 2:48 PM, Jake Luciani <jak...@gmail.com> wrote:
>
>> git rebase -i trunk_staging <ref~1>
>> fix the problem
>> git rebase --continue
>>
>> In this situation, if there was an untested follow on commit wouldn't
>> you need to force push?
>>
>> On Thu, May 7, 2015 at 9:28 AM, Benedict Elliott Smith
>> <belliottsm...@datastax.com> wrote:
>> >>
>> >> If we do it, we'll end up in weird situations which will be annoying for
>> >> everyone
>> >
>> >
>> > Such as? I'm not disputing, but if we're to assess the relative
>> > strengths/weaknesses, we need to have specifics to discuss.
>> >
>> > If we do go with this suggestion, we will most likely want to enable a
>> > shared git rerere cache, so that rebasing is not painful when there are
>> > future commits.
>> >
>> > If instead we go with "repairing" commits, we cannot have a "queue" of
>> > things to merge up to. Say you have a string of commits waiting for
>> > approval C1 to C4; you made C1, and it broke something. You introduce C5
>> to
>> > fix it, but the tests are still broken. Did you not really fix it? Or
>> > perhaps one of C2 to C4 are to blame, but which? And have you
>> accidentally
>> > broken *them* with your commit? Who knows. Either way, we definitely
>> cannot
>> > fast forward. At the very best we can hope that the new merge did not
>> > conflict or mess up the other people's C2 to C4 commits, and they have to
>> > now merge on top. But what if another merge comes in, C6, in the
>> meantime;
>> > and C2 really did also break the tests in some way; how do we determine
>> C2
>> > was to blame, and not C6, or C3 or C4? What do the committers for each of
>> > these do? We end up in a lengthy tussle, and aren't able to commit any of
>> > these to the mainline until all of them are resolved. Really we have to
>> > prevent any merges to the staging repository until the mistakes are
>> fixed.
>> > Since our races in these scenario are the length of time taken for cassci
>> > to vet them, these problems are much more likely than current race to
>> > commit.
>> >
>> > In the scheme I propose, in this scenario, the person who broke the build
>> > rebases everyone's branches to his now fixed commit, and the next broken
>> > commit gets blamed, and all other commits being merged in on top can go
>> in
>> > smoothly. The only pain point I can think of is the multi-branch rebase,
>> > but this is solved by git rerere.
>> >
>> > I agree running tests is painful, but at least for the build, this should
>> >> be the responsibility of the committer to build before merging
>> >
>> >
>> > Why make the distinction if we're going to have staging commits? It's a
>> bit
>> > of a waste of time to run three ant real-clean && ant tasks, and
>> increases
>> > the race window for merging (which is painful whether or not involves a
>> > rebase), and it is not a *typical* occurrence ("alarming" is subjective)
>> >
>> > On Thu, May 7, 2015 at 2:12 PM, Sylvain Lebresne <sylv...@datastax.com>
>> > wrote:
>> >
>> >> > If one of them breaks, we go and edit the _staging branch in place to
>> >> correct
>> >> > the problem, and let CI run again.
>> >>
>> >> I would strongly advise against *in place* edits. If we do it, we'll
>> end up
>> >> in
>> >> weird situations which will be annoying for everyone. Editing commits
>> that
>> >> have
>> >> been shared is almost always a bad idea and that's especially true for
>> >> branch
>> >> that will have some amount of concurrency like those staging branches.
>> >>
>> >> Even if such problems are rare, better to avoid them in the first place
>> by
>> >> simply
>> >> commit new "fixup" commits as we currently do. Granted this give you a
>> >> slightly
>> >> less clean history but to the best of my knowledge, this hasn't been a
>> pain
>> >> point so far.
>> >>
>> >> > wait for CI; all clear
>> >> >
>> >> > git checkout cassandra-2.0; git merge cassandra-2.0_staging
>> >> > git checkout cassandra-2.1; git merge cassandra-2.1_staging
>> >> > git checkout trunk; git merge trunk_staging
>> >> >
>> >> > This does introduce some extra steps to the merge process
>> >>
>> >> If we do this, we should really automate that last part (have the CI
>> >> environment merge the staging branch to the non-staging ones on
>> success).
>> >>
>> >> > It seems if we want an "always releasable" set of branches, we need
>> >> something
>> >> > along these lines.
>> >>
>> >> Agreed as far as having staging branches vetoed by CI goes. Less sure
>> about
>> >> the edit-commit-in-place part as said above.
>> >>
>> >> > I certainly break tests by mistake, or the build itself, with alarming
>> >> regularity.
>> >>
>> >> I agree running tests is painful, but at least for the build, this
>> should
>> >> be
>> >> the responsibility of the committer to build before merging. We all
>> forget
>> >> it from
>> >> times to times and that's ok, but it's not ok if it's "alarmingly
>> regular".
>> >>
>> >> --
>> >> Sylvain
>> >>
>>
>>
>>
>> --
>> http://twitter.com/tjake
>>



-- 
http://twitter.com/tjake

Reply via email to