Difference between revisions of "User:AndrewJohnson/Developing Future Releases"
(Started looking at features added to cvs-trunk) |
(Finished summarizing libCom, tools, makeBaseApp) |
||
Line 12: | Line 12: | ||
=== Proposal === | === Proposal === | ||
The current R3.14 branch should form the basis for the R3.15 release branch. All features to be included in R3.15 should be published as separate feature branches and proposed for merger into the new release branch. By adopting this approach, changes that are made on the R3.14 branch after the R3.15 branch has been created can easily be merged into R3.15 as well with a simple 'bzr merge' from the R3.14 branch. | The current R3.14 branch should form the basis for the R3.15 release branch. All features to be included in R3.15 should be published as separate feature branches and proposed for merger into the new release branch. By adopting this approach, changes that are made on the R3.14 branch after the R3.15 branch has been created can easily be merged into R3.15 as well with a simple 'bzr merge' from the R3.14 branch. This also means that bugs should first be fixed in the earliest branch series that is still being supported, and then these changes should be merged forward (adjusted as necessary) to later branch series. | ||
Adopting this proposal requires that all desired features that have already been added to the CVS trunk be extracted into new feature branches and published separately. Where there are dependencies between features the more dependent ones will need to be derived from the earlier feature branches, but doing so is not complicated as long as the relationships are clear. | Adopting this proposal requires that all desired features that have already been added to the CVS trunk be extracted into new feature branches and published separately. Where there are dependencies between features the more dependent ones will need to be derived from the earlier feature branches, but doing so is not complicated as long as the relationships are clear. | ||
A look at the differences between the two branches reveals the following features are present on the cvs-trunk but not on the 3.14 branch. Note that this list does not mention | A look at the differences between the two branches reveals the following features are present on the cvs-trunk but not on the 3.14 branch. Note that this list does not mention features that have been added to the 3.14 branch but not to the cvs-trunk, the assumption is that those should stay: | ||
configure: | configure: | ||
* Up files and associated changes to Makefiles and RULES_ARCHS | * Up files everywhere, and associated changes to Makefiles and RULES_ARCHS | ||
* CONFIG files for the linux-ppc-bgl architecture | * Added os/CONFIG* files for the linux-ppc-bgl architecture | ||
src/tools: | |||
* installEpics.pl Silence echo when -s in $ENV{MAKEFLAGS} | |||
* makeMakefile.pl updates | |||
src/makeBaseApp: | |||
* Renamed top dir to template | |||
** ''This change unnecessary, don't make'' - ANJ | |||
src/libCom: | src/libCom: | ||
* New BaseString/ | * New BaseString/ | ||
** test/BaseStringTest.cpp, test/SegBufferTest.cpp, test/TestSegString.h | |||
* Many changes in cxxTemplates/ | * Many changes in cxxTemplates/ | ||
** New epicsThrowTrace, autoDestroyPtr | |||
** epicsGuard.h and tsMinMax.h deleted | |||
* New yajl/ | * New yajl/ | ||
* New EPICS_CA_NAME_SERVERS in env/envDefs.h | * New EPICS_CA_NAME_SERVERS in env/envDefs.h | ||
Line 35: | Line 46: | ||
* Win32 visibility attribute used in misc/shareLib.h | * Win32 visibility attribute used in misc/shareLib.h | ||
* Major changes to osi/epicsMutex and osi/epicsThread | * Major changes to osi/epicsMutex and osi/epicsThread | ||
** WIN32/osdMutex drop support for W95/W98/WME | |||
** WIN32/osdThread.c updates | |||
** test/epicsMutexTest.cpp | |||
** Makefile osdThread_CPPFLAGS setting | |||
* No-throw guarantees and support for addNanoSec(-ve args) in misc/epicsTime | * No-throw guarantees and support for addNanoSec(-ve args) in misc/epicsTime | ||
** ''Don't like those no-throw guarantees - ANJ'' | ** ''Don't like those no-throw guarantees - ANJ'' | ||
* New osdAtomic API in osi/os/* | * New osdAtomic API in osi and osi/os/* | ||
* Updates to osi/os/ | ** test/osiAtomicTest.cpp | ||
* Updates in osi/os/default/osdWireFormat.h | * Updates to osi/os/*/osdNetIntf.c (probably 3.14 missing from 3.15 though) | ||
** Related changes in osi/osiSock.h | |||
* Updates in osi/osiWireFormat.h and osi/os/default/osdWireFormat.h | |||
* Removed all sigAlarm routines from osi/os/*/osdSignal.cpp | |||
** Also enum change in osi/osiSock.h, test/blockingSockTest.cpp | |||
* WIN32/epicsGetopt - mingwex library provides getopt(), don't build on mingw | |||
* WIN32/osdProcess.c cleanup | |||
* WIN32/osdTime.cpp updates | |||
* WIN32/setThreadName.cpp updates | |||
* test/cvtFastPerform.cpp using stmts. | |||
* Removed 3.13 compatibility from Makefile | |||
* Major updates in timer/ | |||
* Deleted tsDefs/ |
Revision as of 22:22, 20 January 2010
This document proposes a method for managing development work intended for future releases of EPICS Base.
Background
Developing new features for EPICS Base has always been limited by the complexities of managing significant code changes in the CVS repository. Work on bug fixes and minor new features was developed on the current release branch, while more extensive developments that were intended for the next major release took place on the main trunk. This has made it essential to coordinate development projects so that everything committed on the relevant branch is finished and working in time for the release. For long-term development work, this results in an inability to release a version containing some new features because others are still not finished.
For minor changes that have been made on the current release branch, this has also required additional effort from the developers to ensure that their changes also get committed to the main trunk. Unfortunately the commit log messages for these secondary commits on the trunk have mostly become content-free, which makes them useless for future examination. The commit log messages on the branch however do contain useful information.
One of the advantages of using a Distributed Version Control System (DVCS) like Bazaar is the ability to use separate development branches. Each new feature is developed on its own private branch and the result only gets merged into the official repository once development is finished and the resulting code has been tested. The ability to review changes, ask questions and make comments on them before they get applied to the official repository should help improve the quality of future releases.
Proposal
The current R3.14 branch should form the basis for the R3.15 release branch. All features to be included in R3.15 should be published as separate feature branches and proposed for merger into the new release branch. By adopting this approach, changes that are made on the R3.14 branch after the R3.15 branch has been created can easily be merged into R3.15 as well with a simple 'bzr merge' from the R3.14 branch. This also means that bugs should first be fixed in the earliest branch series that is still being supported, and then these changes should be merged forward (adjusted as necessary) to later branch series.
Adopting this proposal requires that all desired features that have already been added to the CVS trunk be extracted into new feature branches and published separately. Where there are dependencies between features the more dependent ones will need to be derived from the earlier feature branches, but doing so is not complicated as long as the relationships are clear.
A look at the differences between the two branches reveals the following features are present on the cvs-trunk but not on the 3.14 branch. Note that this list does not mention features that have been added to the 3.14 branch but not to the cvs-trunk, the assumption is that those should stay:
configure:
- Up files everywhere, and associated changes to Makefiles and RULES_ARCHS
- Added os/CONFIG* files for the linux-ppc-bgl architecture
src/tools:
- installEpics.pl Silence echo when -s in $ENV{MAKEFLAGS}
- makeMakefile.pl updates
src/makeBaseApp:
- Renamed top dir to template
- This change unnecessary, don't make - ANJ
src/libCom:
- New BaseString/
- test/BaseStringTest.cpp, test/SegBufferTest.cpp, test/TestSegString.h
- Many changes in cxxTemplates/
- New epicsThrowTrace, autoDestroyPtr
- epicsGuard.h and tsMinMax.h deleted
- New yajl/
- New EPICS_CA_NAME_SERVERS in env/envDefs.h
- Updates in fdmgr/
- New EPICS_UNUSED in misc/compilerDependencies.h
- New misc/EnclLnk.h
- New types in misc/epicsTypes.h
- Updates to misc/ipAddrToAsciiAsynchronous
- Deprecated EPICS_UPDATE_LEVEL removed from output of misc/makeEpicsVersion.pl
- Win32 visibility attribute used in misc/shareLib.h
- Major changes to osi/epicsMutex and osi/epicsThread
- WIN32/osdMutex drop support for W95/W98/WME
- WIN32/osdThread.c updates
- test/epicsMutexTest.cpp
- Makefile osdThread_CPPFLAGS setting
- No-throw guarantees and support for addNanoSec(-ve args) in misc/epicsTime
- Don't like those no-throw guarantees - ANJ
- New osdAtomic API in osi and osi/os/*
- test/osiAtomicTest.cpp
- Updates to osi/os/*/osdNetIntf.c (probably 3.14 missing from 3.15 though)
- Related changes in osi/osiSock.h
- Updates in osi/osiWireFormat.h and osi/os/default/osdWireFormat.h
- Removed all sigAlarm routines from osi/os/*/osdSignal.cpp
- Also enum change in osi/osiSock.h, test/blockingSockTest.cpp
- WIN32/epicsGetopt - mingwex library provides getopt(), don't build on mingw
- WIN32/osdProcess.c cleanup
- WIN32/osdTime.cpp updates
- WIN32/setThreadName.cpp updates
- test/cvtFastPerform.cpp using stmts.
- Removed 3.13 compatibility from Makefile
- Major updates in timer/
- Deleted tsDefs/