Re: Developing frameworks and applications in tandem and managing dependencies
John Elliot <[email protected]> Tue, 31 Jul 2012 18:47:57 +1000
| Newsgroups | gmane.comp.windows.off-topic |
|---|---|
| Message-ID | <[email protected]> |
Hey Anna-Jayne, Thanks for your lightening fast reply. I have a few questions because I didn't entirely understand what you told me. I won't ask all of my questions in one go though, so firstly: Are you using Subversion as your version control system? Regards, John Elliot. On 2012-07-31 18:26, Anna-Jayne Metcalfe wrote: > Hi John, > > > >> What I can't decide on is how I should accomplish this with my version > control system. > > We hit the same issue ages back with our core libraries, and decided that > the trade-off is effectively whether you keep the product code stable or the > core. > > As we felt that multiple copies of divergent product code are less likely to > cause issues (product branches tend to have a limited lifespan) than > divergent versions of the core framework, we chose to allow the framework to > remain common, and let it cause breaks and instability elseware to allow us > to ensure that the product code always reflects the current framework > design. > > A bit of background might help. > > We have four products (Visual Lint, Visual TICS, ResOrg and LintProject Pro) > which use the same core libraries. Of those Visual Lint is by far the > largest (about 360kLOC in 45 projects - a lot of which is obviously test > code and core libraries), and tends to drive development of shared projects > most of the time. > > Each product has at least two long term branches - Dev and Release. Dev code > is unstable and (build from Dev are generally shared only with beta > testers), while Release code is stable and reflects public versions of the > product. > > The way we solved the problem was straightforward - we placed a copy of each > required library in each product, and linked each copy so that changes in > shared code in one Dev branch are immediately reflected in all other Dev > branches using it. > > In a conventional build environment, that would seem to be a terrible idea > as subtle breaks could lie undetected for long enough to cause major > disruption at critical moments. However, as we use a continuous integration > server (nothing fancy - just a simple CruiseControl.NET instance) breaks are > detected and fixed very quickly. > > As a result, Dev versions of all products are always being tested against > the latest version of the core libraries, and always reflect their current > state. > > Release branches are another matter. They must be stable, and as such they > are branched from Dev upon the first public release of a new version and > then sandboxed from changes to it. Changes to core libraries there tend to > be hand merged from the corresponding Dev branch where needed, and only live > as long as the next product version release (which replaces the branch with > a new one). > > I hope that helps. > > > > > > Kind Regards, > > > > Anna-Jayne Metcalfe > > Product Manager, > > Riverblade Limited > > > > <http://www.riverblade.co.uk/> http://www.riverblade.co.uk > > Twitter: @annajayne > > Skype: anna-jayne.metcalfe > > > > > > Riverblade Limited, 3 Wellington Road, Bournemouth, Dorset BH8 8JQ, United > Kingdom > > Registered in England no. 5187132. VAT Registration no. 847 0045 38 > > Please direct general enquiries to <mailto:[email protected]> > enquiries-Ql1sqIwY9iDiUBgd2R2O9eG/[email protected] > > > > ACCU - <http://www.accu.org/conference> http://www.accu.org - Writing > software is a craft, and crafts need craftsmen. Where else are you going to > learn? > > > >