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

How? The rebase only affects commits after the "real" branch, so it still
cleanly fast forwards?

Merging is *hard*. Especially 2.1 -> 3.0, with many breaking API changes
(this is before 8099, which is going to make a *world* of hurt, and will
stick around for a year). It is *very* easy to break things, with even the
utmost care.

On Thu, May 7, 2015 at 3:46 PM, Jake Luciani <jak...@gmail.com> wrote:

> 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