Yuan Yijun (bbbush) wrote,
Yuan Yijun
bbbush

VSS file sharing releng scheme

The following is what I write as our release management document, for our project:

How to create a new release

Client side

Once the source folder of a new release is decided, you can create a new release by

  1. make all folders there in the new release's repo.
    $wwwroot
    $wwwroot/ReportBuilder
    $wwwroot/ReportBuilder/RBResource
    $wwwroot/ReportBuilder/RBResource/fo
    $wwwroot/ReportBuilder/RBResource/request
    $wwwroot/ReportBuilder/RBResource/report-common
    $wwwroot/ReportBuilder/RBResource/images
    $wwwroot/ReportBuilder/RBResource/messages/en_US
    ...
  2. copy config files from main repo, under $wwwroot/ReportBuilder/

    • Current main repo is $/AWD3.0/ReportBuilder/wwwroot/
      Never share config files

  3. make changes to config files, to match release requirements.
    • selected component set, including stable and ongoing ones.
  4. share only the necessary codes from main component repo, under $wwwroot/ReportBuilder/RBResource

    • including hooks, fo, request, report-common, images, messages/en_US
      • Because code is shared, development could happen in either main component repo or working folder of this release
    • branch necessary files if this release will be different to what is in main component repo

  5. when this release is freezing, branch all shared files, so development could continue in the main repo

    • Only branch files in release folder, never branch files in the main repo because files in main repo are shared to multiple releases.

    • It is OK to keep some files shared, if they are never going to change.
  6. when release is done, source code should be branched and archived (usually this is done by release manager)
    • archived code could be changed for patch release, but don't share it with main folder.
    • if code is not archived, then the management has some problem.
  7. when a new release is being prepared, start all over again from 1.
(fin)


As you can see, VSS style file sharing is used a lot. The folder "fo", "request", "messages", "images", all contan a lot of files for different purposes, everytime we add a new component, at least 4 different files should be added to those folders. Not all components are needed in one specific product or release, some even have been dropped for ever.

The files do not require compile. In another scenario, we shared most of the c++ code of one project between 2 releases, but left only the StdAfx.h as well as the .vcproj file, because headers have changed their places, also the after build events (copying files to other location, bin\) are changed, too. .

I read this and this thread, the former is about SVN and the latter is about Perforce. I generally agree with what they are saying, for example, create modules for shared parts, setup folders and then create views, etc.  In our development, there could be a lot of folders instead of only 4, and each folder is one component, containing 4 files like it used to be. The we development them as seperate modules. In the second case, the header files pathname in StdAfx.h can be removed, define something like CXXFLAGS instead, and move build event to another "master" project file. The fact is, we cannot change our behavior in the first one, and I cannot change theirs (c++ module maintainers) in the second.

If seperation is indeed better I'll work on it anyway. We suffer from sharing files, like some files for one component is not shared, or files that should be branched get shared, and overall this are too complex for an untrained person. But even we did this, we would still suffer from file inclusion problem, which should really become a new library... ok I admit everything is doable if we keep seperate module/library in head. Wondering why we didn't think about this before, maybe because VSS has no module sharing but only file sharing? Then they might be right: ALWAYS share ALL files in a folder (a complete module).

OK, it seems VSS has won again (it supports module style). My problem is still not solved: in svn, bazaar or git, if I want a folder to contain files from 2 or more different sources (external modules), how can I achieve that? And that is in development stage, not in release freeze stage, so I want my changes to be committed back to different sources as well, not to the repo for _this_ product or release only. How? You cannot simply say you don't like dump all source code to a big text file because that is only a matter of taste (sorry).
Tags: 工作
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments