Hi Phil: This is long, but you have given me lots to respond to. :-)
On 2015-05-24 09:37+0100 Phil Rosenberg wrote: > Hi Alan and Dave > > Some specific comments first, then some general ones after. > >> Fundamentally, the git world is split on the rebase-only >> versus merge-only question > As it happens I fall in the merge camp. But for the work we have been > doing up to now I don't feel there has been much difference either > way.But this is personal and I know you feel strongly about rebase > only so I have no intention to push you on this. Just to explain further why I am being so conservative about this.... The advice I got from Brad King (who has experience advising a large number of software projects on the svn to git transition) is stick with our current rebase-only workflow until all developers were up to speed with git. I would argue we are not there yet since some of the PLplot developers who were active in the svn era have not contributed a single commit yet in the git era. Some of those might just be missing in action for other reasons, but I know of at least one case where intimidation concerning git has played a significant role in delaying participation for at least a while, but I am hoping he will overcome his fears and become an active developer for PLplot again. So this is definitely not a good time to start fooling with the workflow. Once we do get to the stage of being up to speed with git as a development team, Brad went on to argue that moving to a merge-only workflow that preserved a clean first-parent shape of history was not for the faint-hearted and would require a merge czar (his current role in CMake development) to fight through all the complicated merge issues for the master branch with that merge czar being essentially the only one in control of the master branch. So the choices for the merge-only model seem to be to either have a merge czar or abandon all workflow rules which would mean that the history DAG was extremely chaotic. I don't like either of those choices. I think none of us, including me, are qualified to be the merge czar, and in any case I think that is bad politics for such a small development community to have just one or two gatekeepers for the master branch. In my view it is much better for all our active developers to feel responsible for the quality of PLplot including our git history, and the rule for enforcing rebase-only workflow (no merge commits allowed) is in principal a lot easier to understand than the much more complicated rule required to have a good first-parent shape for the history. I think providing a meaningful history is really important for such development work as git bisection to find regressions. To expand on that concern, I just skimmed an interesting paper called "Fighting regressions with git bisect" by Christian Couder which I highly recommend to others here. (You can probably find it with a google search, but for Debian wheezy it appears as <file:///usr/share/doc/git/html/git-bisect-lk2009.html>.) The principal conclusion I drew from this paper was git bisection results are more reliable the simpler the history. And git bisection really is a killer app that I and others used quite a bit in the last release cycle to find regressions, and I would personally hate to compromise that killer app by allowing our history to be chaotic due to an uncontrolled merge workflow. >> However, we could allow for deliberate rebasing (e.g., to >> propagate a must-have fix from master to throwaway_plplot6), but that >> would have to be scheduled a couple of days in advance > I feel very strongly against this. If somebody misses the deadline > because they are off email or their work isn't is a state to commit > (i.e. it would break the build) then we could easily lose large chunks > of work that somebody has created. In my opinion we absolutely must > not rebase a branch we are working on. Ever. I think that restriction is too strong. Instead, in response to your concern, I think we could establish the rule that the guy who is proposing the rebase could simply wait for a positive OK from everybody who is actively working on the public topic branch (which might mean in practice the rebase only occurs right at the end when the topic has matured, see below). > > So perhaps some general points now > > In the last development cycle I tried to work simultaneously on my > Windows machine and two Linux machines to test my personal branches on > all three. The rebase only workflow made this essentially impossible. > I continually ended up in situations where I broke my repos because I > rebased some work that existed in another repo and this caused massive > issues. This was one person with three checked out versions of the > code and it was a nightmare. If we have more than one person then I > can guarantee we will break people's repos with almost every rebase. I think this is an illustration of the point I made previously in this thread that pushing between multiple servers is virtually a guarantee of merge commits which are prohibited under the rebase-only workflow. However, I think you could have made the above work quite simply as follows (or at least I would like to see you try this method next time): 1. Always keep master on each server exactly the same as master on our official SF server. 2. Always rebase your topic branch on each server on that (common) master branch. Those two rules mean every topic branch on each of your servers is identical except for additional development you have made on that topic branch on one of your servers. But then it should be trivial using the "git format-patch"/"git am" method to update all your servers' topic branches to be identical with the one where you have done additional recent development, Note especially I have found the --interactive option of "git am" and "git log --oneline" to be quite effective in selecting the commits that will be applied from a series generated by "git format-patch". > On question that might have an impact. Do we wish to continue > supporting PLplot 5 for some time with bug fixes? It might be that > some users have legacy software that relies on v5 API. So maybe we > should consider having permanently separate v5 and v6 branches? I'm > not sure what this does to our development model. See below for an answer to this question. > > I'm not sure this is right, but I would assume that if we apply a bug > fix to the v5 branch then create a patch of this commit and apply that > to the v6 branch then if we ever merge (or rebase) the branches then > git is clever enough to not create a conflict. Is this correct? I don't think we should limit how we develop on throwaway-plplot6 by trying to avoid in advance rebase conflict issues. So using patches from master to throwaway-plplot6 or rebasing (if you can get complete agreement to that step for all active developers at the time) should be fine. Of course, when we do our final rebase before the merge (see below), we will just have to deal with conflicts the way that is described in "git help rebase". > > So in my opinion we have limited options (in no particular order) > 1)We just don't run a parallel v6 branch. > 2)We run a parallel branch permanently and if we have commits we wish > to apply to both v5 and v6 we do so with a patch > 3)We run a parallel branch permanently and if we have commits we wish > to apply to both v5 and v6 we do a rebase (I think this would be very > bad!!!) > 4)We move to a merge workflow > 5)We hide our v6 branch so we only break out own when we rebase only > once when v6 is ready (already discounted by Alan) > > Out of all those perhaps the idea of having a v5 and v6 branch that we > actually never merge together, and use patches to commit to both gives > use the advantage of parallel branches and also rebase workflow? > That last is pretty close to one of the two options I proposed so I think we are quite close to consensus here. In my proposal the names of the two public branches would be throwaway-plplot6 for PLplot 6 development and master for PLplot 5 development. And even if you are uncomfortable with the rebase method I proposed above to deal with the developer who is temporarily out of e-mail contact, I think it is important to rebase at least when throwaway-plplot6 has matured to make sure all innovations and bug fixes that are on the master branch that are relevant to PLplot 6 are continued when throwaway-plplot6 is merged into master. To make that proposal more specific we should do the following once throwaway-plplot6 has matured. 1. Tag the tip of the master branch (with a name like plplot5-branchpoint for easy future reference). 2. Rebase throwaway-plplot6 with master (making sure that everyone is aware of this so that nobody is left behind by this change). 3. merge --ff-only throwaway-plplot6 onto master. 4. Delete throwaway-plplot6. In other words, we generally treat the public throwaway-plplot6 branch the same as we ordinary treat a small private topic branch except that the rebasing of throwaway-plplot6 will probably more limited due to the developer coordination reasons discussed above. In sum, I think this is a good compromise git development proposal that works well for our rebase-only workflow, and which also satisfies your concerns with ease of collaboration for many developers working on a private topic branch. Assuming you agree with this proposal and nobody else can find some git issue with it, then I would like to flesh out how I visualize the transition between PLplot 5 and PLplot 6. The maturation stages that PLplot 6 will go through are something like the following: 1. Just beginning to work, i.e., parts of it work on one specific platform. (I assume it would take you only a week or so to achieve this with a C++ plplot core with decent error propagation and a corresponding C wrapper.) 2. Partly working, i.e., most components work on most platforms we have access to. We would want this to be an all-out effort concentrating strictly on introducing all backwards-incompatible changes we want for PLplot 6. That is, I hope this can be done in a month or so rather than dragging it out for years with problems in that case with feature creep that tends to be an issue for unreleased software. 3. Mostly working, i.e., the comprehensive test script works for everyone on all platforms we can access as well as it does for PLplot 5. The amount of time and effort going into this part of the effort will depend strongly on how much test platform coverage we already have achieved for PLplot 5, but I am hoping we achieve large coverage for both PLplot 5 very soon now and PLplot 6 when it is ready so that users of either will have a smooth ride on most platforms. 4. Completely works for us, e.g., the comprehensive test script without any special options (i.e., testing everything) works for all of us on the various platforms we have access to. Note, I continue to strive for stage 4 with PLplot 5 which makes stage 3 a moving target for PLplot 6. For example, with my help both in selecting packages and with any further build system issues we run into I hope Arjen will be able to achieve perfect comprehensive test results in the next few weeks for a Cygwin platform where all possible PLplot prerequisites have been installed. And once that goal is achieved and with willingness of our developers to run the tests on the various platforms accessible to them, it should be fairly straightforward to achieve similar good results on MinGW-w64/MSYS2 (as a close analog of the Cygwin success) and Mac OS X (as a fairly close Unix analog of our Linux success). But, I am pretty sure the equivalent comprehensive testing success on MSVC is going to be more difficult to achieve (even for the limited prerequisites that are available on that platform) so I expect the distinction between stages 3 and 4 for PLplot 6 is going to be a real one for some time to come. Also note that PLplot 6 is going to be backwards-incompatible with PLplot 5 so making that transition is going to be painful for our users without much to gain from their prospective other than a superior response to errors. So we want to reduce their pain as much as possible by avoiding a release of PLplot 6 before it is ready. Furthermore, we have limited manpower so we want to minimize the length of time we have to support both PLplot 5 and PLplot 6, and the best way to do that is do not release PLplot 6 until it is ready i.e., it has _completely_ achieved stage 3 above. So what I have in mind is only when stage 3 has been achieved do we do the above steps to merge throwaway-plplot6 onto master and release PLplot-5.99.y releases (6.0 release candidates) soon after for our users to evaluate followed by the 6.0.0 release just as soon as we have no more user complaints about those release candidates. Note, I am emphasizing speed of development here and reliability rather than features. However, it sounds from what you have said that propagating all error conditions will be trivial so it will be nice to have that feature right away as (say) the sole initial selling point of PLplot 6.0.0 to help pay for the user pain of the transition from PLplot 5 to 6. If we follow that model it should be possible in theory to go smoothly from the last PLplot 5.x release (where x < 99) to the release of 6.0.0 with no overlap in support between PLplot 6 and 5, but we should definitely tag the last PLplot 5 commit (as I stated in the details above), and subsequently (if needed) use that tag as the origin of a semi-permanent public plplot5 branch if we need to do further PLplot 5.x bug-fix releases. Obviously in this case the plplot5 branch would never be rebased or merged with the master branch since PLplot 5 would be a dead-end branch of development (only devoted to minimal bug fixing) by design. Sorry this has been so long, but there is a lot to think about beyond just the programming aspects when planning our move from PLplot 5 to PLplot 6! Alan __________________________ Alan W. Irwin Astronomical research affiliation with Department of Physics and Astronomy, University of Victoria (astrowww.phys.uvic.ca). Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); the Time Ephemerides project (timeephem.sf.net); PLplot scientific plotting software package (plplot.sf.net); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel